spring5.x cxf3.4.x 服务端和客户端 非maven版本
生活随笔
收集整理的這篇文章主要介紹了
spring5.x cxf3.4.x 服务端和客户端 非maven版本
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 一、資料準備
- 1. 官網鏈接
- 2. 解壓
- 3. 依賴梳理
- 二、spring集成cxf
- 2.1.創建spring項目
- 2.2. 創建接口
- 2.3. impl
- 2.4. spring-cxf.xml
- 2.5. 客戶端
- 2.6. 開源項目
一、資料準備
1. 官網鏈接
http://cxf.apache.org/download.html
下載apache-cxf-3.4.5.zip
2. 解壓
3. 依賴梳理
cd apache-cxf-3.4.5/lib從bin目錄下面,復制以下jar到一個單獨的文件夾中
commons-logging-1.2.jar cxf-core-3.4.5.jar cxf-rt-bindings-soap-3.4.5.jar cxf-rt-databinding-jaxb-3.4.5.jar cxf-rt-frontend-jaxws-3.4.5.jar cxf-rt-frontend-simple-3.4.5.jar cxf-rt-transports-http-3.4.5.jar cxf-rt-wsdl-3.4.5.jar spring-aop-5.2.17.RELEASE.jar spring-beans-5.2.17.RELEASE.jar spring-context-5.2.17.RELEASE.jar spring-core-5.2.17.RELEASE.jar spring-expression-5.2.17.RELEASE.jar spring-web-5.2.17.RELEASE.jar stax2-api-4.2.1.jar woodstox-core-6.2.6.jar wsdl4j-1.6.3.jar xmlschema-core-2.2.5.jar二、spring集成cxf
2.1.創建spring項目
創建java和resources包路徑
2.2. 創建接口
package com.gblfy.service;import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebService;@WebService(targetNamespace = "http://impl.service.gblfy.com/") public interface IUserService {@WebMethodpublic String getCxf(@WebParam(name = "reqXml") String reqXml); }2.3. impl
package com.gblfy.service.impl;import com.gblfy.service.IUserService;import javax.jws.WebService;@WebService public class UserServiceImpl implements IUserService {@Overridepublic String getCxf(String reqXml) {System.out.println("接收到的報文:" + reqXml);return "OK";} }2.4. spring-cxf.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:context="http://www.springframework.org/schema/context"xmlns:jaxws="http://cxf.apache.org/jaxws" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"><!-- cxf3以后,只需要引入這個配置文件即可 --><import resource="classpath:META-INF/cxf/cxf.xml" /><jaxws:endpoint id="userService"implementor="com.gblfy.service.impl.UserServiceImpl"address="/userWS"></jaxws:endpoint> </beans>2.5. 客戶端
package com.gblfy.service.client;import org.apache.cxf.endpoint.Client; import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory; import org.springframework.stereotype.Component;import javax.xml.namespace.QName;/*** cxf客戶端調用(企業內部已封裝)** @author gblfy* @date 2021-09-17*/ @Component public class CxfClient {public static void main(String[] args) throws Exception {//-------------------------------- cxf webservice 服務端信息----------------------------------------// cxf webservice 服務地址//格式:http://IP地址/項目名稱/攔截url/請求地址?wsdlString cxfUrl = "http://127.0.0.1:8080/spring_cxf_war/cxf/userWS?wsdl";// cxf webservice 命名空間//獲取方式:從wsdl中復制targetNamespace標簽中的內容String targetNamespace = "http://impl.service.gblfy.com/";// cxf webservice 方法名//獲取方式1:由服務商提供//獲取方式2:從wsdl中復制operation標簽中name對應的指定的內容String method = "getCxf";//-------------------------------- cxf webservice 客戶端請求報文----------------------------------------// cxf 模擬請求報文(根據實際需求而定)String reqXml = "cxf請求報文";//--------------------------------調用服務客戶端任選一種即可----------------------------------------//調用服務 客戶端1CxfClient.sendCxfReqClientHandle(cxfUrl, method, reqXml);//調用服務 客戶端2CxfClient.sendCxfReqClientHandle2(cxfUrl, targetNamespace, method, reqXml);}/*** 單/多參調用工具類(Object類型)** @param cxfUrl url地址* @param method 調用方法名* @param reqXml 發送報文體* @return res 返回結果* @throws Exception 若有異常,在控制臺輸出異常,并將異常拋出*/public static String sendCxfReqClientHandle(String cxfUrl, String method, Object... reqXml) throws Exception {String res = null;// 創建動態客戶端JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();Client client = dcf.createClient(cxfUrl);// 需要密碼的情況需要加上用戶名和密碼// client.getOutInterceptors().add(new ClientLoginInterceptor(USER_NAME, PASS_WORD));Object[] objects = new Object[0];try {// 基本格式:invoke("方法名",參數1,參數2,參數3....);objects = client.invoke(method, reqXml);res = objects[0].toString();System.out.println("返回數據:" + res);} catch (java.lang.Exception e) {e.printStackTrace();throw e;}return res;}/*** 單/多參調用工具類(Object類型)** @param cxfUrl url地址* @param targetNamespace 命名空間* @param method 調用方法名* @param reqXml 發送報文體* @return res 返回結果* @throws Exception 若有異常,在控制臺輸出異常,并將異常拋出*/public static String sendCxfReqClientHandle2(String cxfUrl, String targetNamespace, String method, Object... reqXml) throws Exception {String res = null;// 創建動態客戶端JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();Client client = dcf.createClient(cxfUrl);// 需要密碼的情況需要加上用戶名和密碼// client.getOutInterceptors().add(new ClientLoginInterceptor(USER_NAME, PASS_WORD));Object[] objects = new Object[0];try {// 基本格式:invoke("方法名",參數1,參數2,參數3....);QName qName = new QName(targetNamespace, method);objects = client.invoke(qName, reqXml);res = objects[0].toString();System.out.println("返回數據:" + res);} catch (Exception e) {e.printStackTrace();throw e;}return res;} }2.6. 開源項目
https://gitee.com/gb_90/unified-access-center
總結
以上是生活随笔為你收集整理的spring5.x cxf3.4.x 服务端和客户端 非maven版本的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Nacos配置中心规范
- 下一篇: minio 单机安装、部署 centos