1.环境依赖 jdk8, springboot 2.3.12.release,cxf版本需要根据springboot版本修改,方法:查看springboot版本的发布日期,然后根据日期找相近的两个版本
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <version>2.3.12.RELEASE</version> </dependency> <dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-spring-boot-starter-jaxws</artifactId> <version>3.4.5</version> </dependency>
2. WebserviceConfig.java
1 package com.example.demo.demos.nacosconfig; 2 3 import javax.xml.ws.Endpoint; 4 5 import org.apache.cxf.bus.spring.SpringBus; 6 import org.apache.cxf.jaxws.EndpointImpl; 7 import org.apache.cxf.transport.servlet.CXFServlet; 8 import org.springframework.beans.factory.annotation.Autowired; 9 import org.springframework.boot.web.servlet.ServletRegistrationBean; 10 import org.springframework.context.annotation.Bean; 11 import org.springframework.context.annotation.Configuration; 12 13 import com.example.demo.demos.webservice.IUserWebService; 14 15 @Configuration 16 public class WebServiceConfig { 17 18 /************* 要发布的webservice,需要有对应的实现类,建议参照下文中的命名规范 ****************/ 19 @Autowired 20 private IUserWebService webService; 21 22 @SuppressWarnings({ "rawtypes", "unchecked" }) 23 @Bean 24 public ServletRegistrationBean cxfServlet() { 25 return new ServletRegistrationBean(new CXFServlet(), "/ws/*"); 26 } 27 28 @Bean 29 public SpringBus cxf() { 30 return new SpringBus(); 31 } 32 33 @Bean 34 public Endpoint endpoint() { 35 EndpointImpl endpoint = new EndpointImpl(cxf(), webService); 36 endpoint.publish("/api"); 37 return endpoint; 38 } 39 }View Code
3. 接口示例和规范
1 package com.example.demo.demos.webservice; 2 3 import javax.jws.WebMethod; 4 import javax.jws.WebService; 5 6 /** 7 * name决定了生成的相关调用代码是否简单明了且符合上下文语境<br/> 8 * targetNamespace 无所谓,和实现类一致即可 9 * @author Administrator 10 * 11 */ 12 @WebService(name = "userService", targetNamespace = "https://www.demo.tech") 13 public interface IUserWebService { 14 15 @WebMethod 16 public String sayHello(String name); 17 }View Code
4.实现类
1 package com.example.demo.demos.webservice.impl; 2 3 import javax.jws.WebService; 4 5 import org.springframework.stereotype.Component; 6 7 import com.example.demo.demos.webservice.IUserWebService; 8 9 /** 10 * 11 * class 类名如下,去掉接口中的首字母'I'和结尾单词'Service'<br/> 12 * 生成的调用代码语境就比较通顺 13 * 14 * @author Administrator 15 * 16 */ 17 @Component 18 @WebService(targetNamespace = "https://www.demo.tech", endpointInterface = "com.example.demo.demos.webservice.IUserWebService") 19 public class UserWeb implements IUserWebService { 20 21 public String sayHello(String name) { 22 return String.format("hello,%s", name); 23 } 24 }View Code
5. 打开要生成的文件夹,即生成的代码要保存到哪里就打开哪个文件夹,然后运行命令 wsimport -encoding UTF-8 -s . http://127.0.0.1:8080/ws/api?wsdl 自动生成java相关代码
6. 测试代码就会变得语境通顺
1 package com.example.demo; 2 3 import java.net.MalformedURLException; 4 import java.net.URL; 5 6 import javax.xml.namespace.QName; 7 import javax.xml.ws.Service; 8 9 import https.www_zqxx.UserService; 10 11 public class WebServiceTest { 12 public static void main(String[] args) throws MalformedURLException { 13 System.setProperty("javax.xml.bind.JAXBContext", "com.sun.xml.internal.bind.v2.ContextFactory"); 14 // 创建WSDL的URL 15 URL url = new URL("http://localhost:8080/ws/api?wsdl"); 16 // 指定命名空间和服务名称 17 QName qName = new QName("https://www.demo.tech", "UserWebService"); 18 Service service = Service.create(url, qName); 19 // 通过getPort方法返回指定接口 20 UserService userService = service.getPort(UserService.class); 21 String res = userService.sayHello("小明"); 22 System.out.println(res); 23 } 24 }View Code
7. 统一封装结果类
package com.zqxxjs.v1.common; import java.util.List; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; @XmlRootElement(name = "ResponseEntity") @XmlAccessorType(XmlAccessType.FIELD) @XmlType(propOrder = { "code", "msg", "result" }) public class ResponseEntity<T> { private Integer code; private String msg; private Message<T> result; public Integer getCode() { return code; } public void setCode(Integer code) { this.code = code; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public Message<T> getResult() { return result; } public void setResult(Message<T> result) { this.result = result; } public static <E> ResponseEntity<E> success(List<E> data, Long count) { ResponseEntity<E> entity = new ResponseEntity<>(); entity.setCode(Constant.SUCCESS_CODE); entity.setMsg(Constant.SUCCESS_MSG); Message<E> resultTmp = new Message<>(); resultTmp.setCount(count); resultTmp.setData(data); entity.setResult(resultTmp); return entity; } }View Code
8. 配合mbg插件,在生成的实体类上边要加的相关注解,注解生成工具:
package com.zqxxjs.order.common; import java.io.File; import java.lang.reflect.Field; import java.util.Collection; import org.apache.commons.io.FileUtils; import org.apache.commons.io.FilenameUtils; public class XmlUtil { public static void main(String[] args) throws Exception { String packageName="com.zqxxjs.order.entity"; String path = Thread.currentThread().getContextClassLoader().getResource(packageName.replace(".", "/")).getPath(); Collection<File> entityClassFile = FileUtils.listFiles(new File(path), new String[] { "class" }, false); for (File file : entityClassFile) { if (file.getName().contains("Example")) { continue; } Class<?> c = Class.forName(packageName+"." + FilenameUtils.getBaseName(file.getName())); Field[] fds = c.getDeclaredFields(); String s = ("@XmlType(propOrder = { "); String[] tmp = new String[fds.length - 1]; for (int i = 0; i < tmp.length; i++) { Field f = fds[i]; if (f.getName().equalsIgnoreCase("serialVersionUID")) { continue; } tmp[i] = String.format("\"%s\"", f.getName()); } System.out.println("\n\n@XmlRootElement(name = \""+c.getSimpleName()+"\")"); System.out.println("@XmlAccessorType(XmlAccessType.FIELD)"); s = s.concat(String.join(",", tmp)).concat("})"); System.out.println(s); System.out.println("-----------------------------------------------------------------"); } } }View Code
9. 加好后的示例代码
package com.zqxxjs.v1.entity; import java.io.Serializable; import java.math.BigDecimal; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; /** * * This class was generated by MyBatis Generator. This class corresponds to the * database table finance_account_info */ @XmlRootElement(name = "FinanceAccountInfo") @XmlAccessorType(XmlAccessType.FIELD) @XmlType(propOrder = { "id", "serialNumber", "projectNumber", "projectName", "director", "amountOfMoney", "createDate", "financeNumber", "remark" }) public class FinanceAccountInfo implements Serializable { /** * * This field was generated by MyBatis Generator. This field corresponds to the * database column finance_account_info.id * * @mbg.generated */ private Integer id; /** * Database Column Remarks: 流水号 * * This field was generated by MyBatis Generator. This field corresponds to the * database column finance_account_info.serial_number * * @mbg.generated */ private String serialNumber; /** * Database Column Remarks: 项目编号 * * This field was generated by MyBatis Generator. This field corresponds to the * database column finance_account_info.project_number * * @mbg.generated */ private String projectNumber; /** * Database Column Remarks: 项目名称 * * This field was generated by MyBatis Generator. This field corresponds to the * database column finance_account_info.project_name * * @mbg.generated */ private String projectName; /** * Database Column Remarks: 负责人 * * This field was generated by MyBatis Generator. This field corresponds to the * database column finance_account_info.director * * @mbg.generated */ private String director; /** * Database Column Remarks: 金额 * * This field was generated by MyBatis Generator. This field corresponds to the * database column finance_account_info.amount_of_money * * @mbg.generated */ private BigDecimal amountOfMoney; /** * Database Column Remarks: 往来日期 * * This field was generated by MyBatis Generator. This field corresponds to the * database column finance_account_info.create_date * * @mbg.generated */ private String createDate; /** * Database Column Remarks: 财务编号 * * This field was generated by MyBatis Generator. This field corresponds to the * database column finance_account_info.finance_number * * @mbg.generated */ private String financeNumber; /** * Database Column Remarks: 备注 * * This field was generated by MyBatis Generator. This field corresponds to the * database column finance_account_info.remark * * @mbg.generated */ private String remark; /** * This field was generated by MyBatis Generator. This field corresponds to the * database table finance_account_info * * @mbg.generated */ private static final long serialVersionUID = 1L; /** * This method was generated by MyBatis Generator. This method returns the value * of the database column finance_account_info.id * * @return the value of finance_account_info.id * * @mbg.generated */ public Integer getId() { return id; } /** * This method was generated by MyBatis Generator. This method sets the value of * the database column finance_account_info.id * * @param id the value for finance_account_info.id * * @mbg.generated */ public void setId(Integer id) { this.id = id; } /** * This method was generated by MyBatis Generator. This method returns the value * of the database column finance_account_info.serial_number * * @return the value of finance_account_info.serial_number * * @mbg.generated */ public String getSerialNumber() { return serialNumber; } /** * This method was generated by MyBatis Generator. This method sets the value of * the database column finance_account_info.serial_number * * @param serialNumber the value for finance_account_info.serial_number * * @mbg.generated */ public void setSerialNumber(String serialNumber) { this.serialNumber = serialNumber; } /** * This method was generated by MyBatis Generator. This method returns the value * of the database column finance_account_info.project_number * * @return the value of finance_account_info.project_number * * @mbg.generated */ public String getProjectNumber() { return projectNumber; } /** * This method was generated by MyBatis Generator. This method sets the value of * the database column finance_account_info.project_number * * @param projectNumber the value for finance_account_info.project_number * * @mbg.generated */ public void setProjectNumber(String projectNumber) { this.projectNumber = projectNumber; } /** * This method was generated by MyBatis Generator. This method returns the value * of the database column finance_account_info.project_name * * @return the value of finance_account_info.project_name * * @mbg.generated */ public String getProjectName() { return projectName; } /** * This method was generated by MyBatis Generator. This method sets the value of * the database column finance_account_info.project_name * * @param projectName the value for finance_account_info.project_name * * @mbg.generated */ public void setProjectName(String projectName) { this.projectName = projectName; } /** * This method was generated by MyBatis Generator. This method returns the value * of the database column finance_account_info.director * * @return the value of finance_account_info.director * * @mbg.generated */ public String getDirector() { return director; } /** * This method was generated by MyBatis Generator. This method sets the value of * the database column finance_account_info.director * * @param director the value for finance_account_info.director * * @mbg.generated */ public void setDirector(String director) { this.director = director; } /** * This method was generated by MyBatis Generator. This method returns the value * of the database column finance_account_info.amount_of_money * * @return the value of finance_account_info.amount_of_money * * @mbg.generated */ public BigDecimal getAmountOfMoney() { return amountOfMoney; } /** * This method was generated by MyBatis Generator. This method sets the value of * the database column finance_account_info.amount_of_money * * @param amountOfMoney the value for finance_account_info.amount_of_money * * @mbg.generated */ public void setAmountOfMoney(BigDecimal amountOfMoney) { this.amountOfMoney = amountOfMoney; } /** * This method was generated by MyBatis Generator. This method returns the value * of the database column finance_account_info.create_date * * @return the value of finance_account_info.create_date * * @mbg.generated */ public String getCreateDate() { return createDate; } /** * This method was generated by MyBatis Generator. This method sets the value of * the database column finance_account_info.create_date * * @param createDate the value for finance_account_info.create_date * * @mbg.generated */ public void setCreateDate(String createDate) { this.createDate = createDate; } /** * This method was generated by MyBatis Generator. This method returns the value * of the database column finance_account_info.finance_number * * @return the value of finance_account_info.finance_number * * @mbg.generated */ public String getFinanceNumber() { return financeNumber; } /** * This method was generated by MyBatis Generator. This method sets the value of * the database column finance_account_info.finance_number * * @param financeNumber the value for finance_account_info.finance_number * * @mbg.generated */ public void setFinanceNumber(String financeNumber) { this.financeNumber = financeNumber; } /** * This method was generated by MyBatis Generator. This method returns the value * of the database column finance_account_info.remark * * @return the value of finance_account_info.remark * * @mbg.generated */ public String getRemark() { return remark; } /** * This method was generated by MyBatis Generator. This method sets the value of * the database column finance_account_info.remark * * @param remark the value for finance_account_info.remark * * @mbg.generated */ public void setRemark(String remark) { this.remark = remark; } }View Code
标签:info,account,finance,String,generated,整合,webservice,public,springboot From: https://www.cnblogs.com/swtjavaspace/p/17404218.html