当前位置:   article > 正文

Java cxf集成第三方WebService接口_java cxf调用第三方webservice

java cxf调用第三方webservice

一、pom引入

  1. <dependency>
  2. <groupId>org.apache.cxf</groupId>
  3. <artifactId>cxf-rt-frontend-jaxws</artifactId>
  4. <version>3.1.10</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.apache.cxf</groupId>
  8. <artifactId>cxf-rt-transports-http</artifactId>
  9. <version>3.1.10</version>
  10. </dependency>
  11. <dependency>
  12. <groupId>javax.xml.ws</groupId>
  13. <artifactId>jaxws-api</artifactId>
  14. <version>2.3.1</version>
  15. </dependency>

二、方法封装

  1. import lombok.extern.slf4j.Slf4j;
  2. import org.apache.cxf.endpoint.Client;
  3. import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
  4. import org.apache.cxf.transport.http.HTTPConduit;
  5. import org.apache.cxf.transports.http.configuration.HTTPClientPolicy;
  6. import javax.xml.namespace.QName;
  7. /**
  8. * WebService 工具类
  9. * @author lenny
  10. * @date 20210717
  11. */
  12. @Slf4j
  13. public class WebServiceUtil {
  14. /**
  15. * 执行WebService方法
  16. * @param wsdlUrl
  17. * @param serviceName
  18. * @param jsonPara
  19. * @return
  20. */
  21. public static String doWebService(String wsdlUrl,QName serviceName,String jsonPara){
  22. try{
  23. // 创建动态客户端
  24. JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
  25. Client client = dcf.createClient(wsdlUrl);
  26. HTTPConduit http = (HTTPConduit)client.getConduit();
  27. //策略
  28. HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
  29. //连接超时(1分钟)
  30. httpClientPolicy.setConnectionTimeout(1 * 60000);
  31. httpClientPolicy.setAllowChunking(false);
  32. //响应超时(1分钟)
  33. httpClientPolicy.setReceiveTimeout(1 * 60000);
  34. http.setClient(httpClientPolicy);
  35. //调用方法传参
  36. Object[] result = client.invoke(serviceName, jsonPara);
  37. return result[0].toString();
  38. }catch (Exception e){
  39. log.error(e.toString());
  40. return "";
  41. }
  42. }
  43. }

三、封装方法调用

  1. String jsonParam= JSON.toJSONString(mapPara);
  2. QName SERVICE_NAME = new QName("http://service.lock.testWebService.com/", "transferLockLocationData");
  3. String result=WebServiceUtil.doWebService("接口地址",SERVICE_NAME,jsonParam);

四、异常及解决

异常一

java.lang.ClassNotFoundException: javax.xml.ws.WebServiceContext

解决方法:需要引入jar包

  1. <dependency>
  2. <groupId>javax.xml.ws</groupId>
  3. <artifactId>jaxws-api</artifactId>
  4. <version>2.3.1</version>
  5. </dependency>

异常二

java.lang.IllegalStateException:Unable to create schema compiler

改问题网上也有很多解释说是缺少tools.jar包,我这边是因为创建项目的时候选择的是IDEA自带的JDK环境,所以里面没有tools.jar包

解决方法:修改SDKs对应的JDK环境,更换成自己安装的JDK环境即可

右键左上角的File,选择Project Structure

在弹框里面点击Platform Settings 下面的“SDKs”,将JDK home path更换成自己安装的JDK环境

 异常三 

org.apache.cxf.common.i18n.UncheckedException: No operation was found with the name {http://impl.server.xxxxx.com/}xxxxx.

说明接口的命名空间与默认的命名空间不一致导致的

解决方法:修改命名空间并传入

在浏览器中输入接口地址,可查看接口信息

 找到命名空间为:http://service.lock.testWebService.com/并不是默认的http://impl.service.lock.testWebService.com/

也是为了处理这个问题,所以我再进行接口封装的时候传入的是QName而不是直接的方法名称

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/201241
推荐阅读
相关标签
  

闽ICP备14008679号