解决cxf2.2.3客户端动态调用与jdk1.7不兼容问题

来源:互联网 发布:影楼相册制作软件 编辑:程序博客网 时间:2024/06/07 05:09

由于cxf2.2.3客户端动态调用不支持jdk1.7,在客户端调用时始终报错“javac:目标类1.5与源运行类1.7不兼容“问题,因为生产环境是jdk1.7,不得不升级cxf为2.7.18

1.修改maven pom,如下:

<!-- webservice --><dependency>        <groupId>org.apache.cxf</groupId>        <artifactId>apache-cxf</artifactId>        <version>2.7.18</version>        <exclusions>    <exclusion>       <groupId>org.springframework</groupId>       <artifactId>spring-asm</artifactId>    </exclusion>  </exclusions>            <type>pom</type></dependency>

因为2.7.18会自动下载spring-asm3.02 jar包,与我环境的spring4.0.2冲突,故添加exclusions来限制自动下载此依赖。

2.修改web.xml,经测试,2.7.18只能使用context-param来加载webservice的spring配置文件ws.xml,如果使用与2.2.3类似放在init-param里是不行的(参照2.2.3),会报找不到cxf这个bean的错误,由于context-param <param-name> 重名的只能在web.xml里配置一个(<param-name>不同命的可以有多个),所以以逗号分隔追加,修改如下:

 <context-param>        <param-name>contextConfigLocation</param-name>        <param-value>classpath:spring/mofeni_ts-context.xml,/WEB-INF/ws.xml</param-value>    </context-param>

3.修改项目的jdk为1.7,重新编译,部署,启动tomcat成功

4.最后附上动态调用的客户端代码,不依赖服务端的api

//不用通过wsdl生成类来调用ws,采用发送soap包的方式,动态调用,很方便import org.apache.cxf.endpoint.Client;import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;public class Test2 {public static void main(String[] args) {String xmlInput = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><request><operateType>query</operateType><dbType>sqlserver</dbType><orderBy></orderBy><userId>1</userId>              <start>0</start><limit>20</limit><processName></processName></request>";JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();String wsUrl = "http://localhost:8081/services_manager/ws/newService?wsdl";String method = "runMethod";Client client = dcf.createClient(wsUrl);Object[] res = null;try {res = client.invoke(method, "560A48A7D9A41BAF80EDF6F9C6A6AF58");System.out.println(res[0]);} catch (Exception e) {e.printStackTrace();}System.exit(0);}}

5.运行Test2后结果如下:



原创粉丝点击