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

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

1.修改maven pom,如下:


		
        	org.apache.cxf
        	apache-cxf
        	2.7.18
        	  
			    
			     org.springframework  
			     spring-asm  
			    
			    
        	pom
		

因为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 重名的只能在web.xml里配置一个(不同命的可以有多个),所以以逗号分隔追加,修改如下:

 
        contextConfigLocation
        classpath:spring/mofeni_ts-context.xml,/WEB-INF/ws.xml
    

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 = "querysqlserver1              020";
		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后结果如下:

解决cxf2.2.3客户端动态调用与jdk1.7不兼容问题_第1张图片


你可能感兴趣的:(java)