Spring boot 整合CXF webservice 遇到的问题及解决

将WebService的WSDL生成的代码的命令: 

wsimport -p com -s . com http://localhost:8080/service/user?wsdl

  

Spring boot 整合CXF开发web service 遇到的问题:

  1、成功集成cxf后,发现只有webservice服务可以正常使用,其他请求url全部无法正常访问。

  解决办法:在发布服务配置类WebServiceConfig.java中,更改此方法名:

  @Bean
  public ServletRegistrationBean dispatcherServlet() 

  改为:

  @Bean
    public ServletRegistrationBean disServlet(){
        return new ServletRegistrationBean(new CXFServlet(),"/service/*");//发布服务名称
    }

  即可成功访问其他url

  是因为 public ServletRegistrationBean dispatcherServlet() 把默认映射覆盖掉了,把这个名字改掉,控制类方法就能访问了。

  更改此方法明后可以正常其他请求url,webservice服务也正常。

  出处:https://blog.csdn.net/hawako/article/details/80556676

   

  2、将webservice的WSDL生成的代码后调用方法,发现List无法set参数。

  原因:CXF就是只为List提供一个get方法

  解决办法:将List get出来后 add参数就行了,如下代码,

  user.getAddresses().addAll(addresses);

  

  3、在客户端测试时,报Exception:两个类具有相同的 XML 类型名称,请使用 @XmlType.name 和 @XmlType.namespace 为类分配不同的名称,如图所示:

    解决办法:找到报错的类

 

    对XmlType重新命名(最简单粗暴的方法):

 

    此解决办法来自:https://www.cnblogs.com/hedongfei/p/7652583.html

 

   4、在CXF调用接口的代码时,本地测试的时候,没有出现任何问题,但是将包部署到服务器的时候,client调用invoke方法的时候,出现了一段异常报错:Caused by: java.lang.ClassNotFoundException: com/sun/tools/internal/xjc/api/XJC

  原因:在网上查很多资料,大多说是因为服务器环境是指向 jre 而不是JDK,导致缺失依赖 tools.jar

  解决办法:

    查看JDK配置环境 JAVA_HOME 配置是否为 JDK,如不是,改为JDK;

    服务器上给 tomcat 指定 jdk 版本:在catalina.sh(或者catalina.bat)文件的开头,写入下面代码,为该Tomcat启动时指定特定版本的 jdk,

export JAVA_HOME=/usr/local/jdk1.8      --路径是:Jdk8所在的目录
export CATALINA_OPTS="-Djava.awt.headless=true" 

  如下图:

 

 

 

 

 

 

posted @ 2019-11-22 17:06  ヤBig、Bossづ  阅读(1403)  评论(0编辑  收藏  举报