因為最近公司需要對接外部接口,外部接口有webservice和restful兩種風格,在這里僅分享下springboot整合CXF webservice的過程(之前沒有做過webservice,以下內容僅供參考)
1.創建springboot項目(webserviceidea工具開發過程),一路next
2.整合webservice所需依賴(打開項目的pom文件,加入CXF依賴)
<!-- CXF webservice -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-spring-boot-starter-jaxws</artifactId>
<version>3.3.1</version>
</dependency>
<!-- CXF webservice -->
3.在項目中創建相應的包以及配置文件中的配置
3.1在新建的項目中建立相應的包
3.2可以設置項目端口號以及服務地址的前綴,默認為/services/**
4.創建接口服務以及實現類
4.1創建服務接口以及實現類
@WebService(name = "InOrderService", // 與接口中指定的name一致
targetNamespace = "http://service.omswmswebservice.zhqc.com/")
public interface InOrderService {
/**
* @param requestBody
* @return
*/
@WebMethod
@WebResult(name = "String",targetNamespace = "")
public String inOrderService(@WebParam(name = "requestBody") String requestBody);
}
@WebService(serviceName = "InOrderService", // 與接口中指定的name一致
targetNamespace = "http://service.omswmswebservice.zhqc.com/",//與接口中的命名空間一致,一般是接口的包名倒
endpointInterface = "com.zhqc.omswmswebservice.service.InOrderService")//接口地址
@Component
public class InOrderServiceImpl implements InOrderService {
/**
* 入庫訂單
* @param requestBody
* @return
*/
@Override
public String inOrderService(String requestBody) {
InOrderReq req = null;
try {
req = XmlUtil.xmlToBean(requestBody, InOrderReq.class);
//業務處理
if (req != null){
//響應對象封裝-測試數據
InOrderResp resp = new InOrderResp();
InOrderTcpContRespDto tcp = new InOrderTcpContRespDto();
InOrderResponseRespDto response = new InOrderResponseRespDto();
response.setRspCode("200");
response.setRspDesc("成功");
response.setRspType("入庫訂單類型");
tcp.setReqTime("20201020152500");
tcp.setResponse(response);
InOrderSvcContRespDto svc = new InOrderSvcContRespDto();
svc.setOrderCode("1111111");
InOrderContractRootRespDto contractRoot= new InOrderContractRootRespDto();
contractRoot.setTcpCont(tcp);
contractRoot.setSvcCont(svc);
resp.setContractRoot(contractRoot);
return XmlUtil.toXml(resp);
}
} catch (Exception e) {
e.printStackTrace();
}
return "";
}
}
5.建立服務配置類,統一的發布相應的接口服務
@Configuration
public class WebserviceConfig {
/**
* CXF默認的服務路徑
* @return
*/
@Bean
public ServletRegistrationBean dispatcherServletForWebservice(){
return new ServletRegistrationBean(new CXFServlet(),"/services/*");
}
@Bean(name = Bus.DEFAULT_BUS_ID)
public SpringBus springBus(){
return new SpringBus();
}
/**
* @return
*/
@Bean
public InOrderService inOrder(){
return new InOrderServiceImpl();
}
/**
* 訪問地址 http://127.0.0.1:8080/services/inOrderService?wsdl
* @return
*/
@Bean
public Endpoint endpoint(){
EndpointImpl endpoint = new EndpointImpl(springBus(),inOrder());
endpoint.publish("/inOrderService");
return endpoint;
}
}
6.發布接口服務
直接啟動程序入口
7.檢測接口服務是否成功
訪問:
http://127.0.0.1:8080/services/InOrderService?wsdl
注意:后綴一定要加?wsdl
8.建立測試類,測試服務端和客戶端能否通信
根據你的接口文檔的請求參數和響應參數來創建測試數據,可以檢查接口的數據格式和接口是否相符了,開始你的webservice之旅!