服务端的代码请看我的另一篇文章:点击打开链接
首先必须要有一个可用的WSDL服务地址,这个地址有我们需要调用的方法,将地址复制到浏览器地址栏,看测试能否通过。
方式一:
配置CXF环境变量,用wsdl2java工具自动产生代码。项目结构目录如下:
其中com.yq.webservice下面的所有的java类都是wsdl2java工具自动产生的。
JaxWsProxyFactoryBean factoryBean = new JaxWsProxyFactoryBean();
factoryBean.getInInterceptors().add(new LoggingInInterceptor());
factoryBean.getOutInterceptors().add(new LoggingOutInterceptor());
factoryBean.setServiceClass(HelloWorldDao.class);
factoryBean.setAddress("http://localhost:8080/WebServiceTest/webservice/helloworld?wsdl");
HelloWorldDao impl = (HelloWorldDao) factoryBean.create();
impl.sayHello("zhengmo");
其中:
http://localhost:8080/WebServiceTest/webservice/helloworld?wsdl是服务端提供的web service的端口地址。
上面的代码就是WebServiceClient.java中main方法里面的代码。
方式二:
任然需要先用wsdl2java工具生成相应的java代码。
HelloWorldDaoService factory = new HelloWorldDaoService();
HelloWorldDao helloWorldDao = factory.getHelloWorldDaoPort();
helloWorldDao.sayHello("zhengmo");
方式三:
最后一种方式不需要使用wsdl2java工具在客户端产生代码。
JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
String wsUrl = "http://localhost:8080/WebServiceTest/webservice/helloworld?wsdl";
Client client = dcf.createClient(wsUrl);
String method = "sayHello";//webservice的方法名
Object[] result = null;
try {
result = client.invoke(method, "zhengmo");//调用webservice
} catch (Exception e) {
e.printStackTrace();
}
<最后一种方式在eclipse中运行的时候报错:
at org.apache.cxf.common.util.Compiler.useJava6Compiler(Compiler.java:190)
at org.apache.cxf.common.util.Compiler.compileFiles(Compiler.java:144)
at org.apache.cxf.common.util.Compiler.compileFiles(Compiler.java:139)
at org.apache.cxf.endpoint.dynamic.DynamicClientFactory.compileJavaSrc(DynamicClientFactory.java:610)
at org.apache.cxf.endpoint.dynamic.DynamicClientFactory.createClient(DynamicClientFactory.java:369)
at org.apache.cxf.endpoint.dynamic.DynamicClientFactory.createClient(DynamicClientFactory.java:240)
at org.apache.cxf.endpoint.dynamic.DynamicClientFactory.createClient(DynamicClientFactory.java:233)
at org.apache.cxf.endpoint.dynamic.DynamicClientFactory.createClient(DynamicClientFactory.java:188)
原因是JaxWsDynamicClientFactory是一个动态代理类,执行到这里的时候需要编译生成java类,但是JRE是指可以运行class文件,并没有编译的能力,所以需要修改eclipse中的编译环境。
产生的原因是没有获得编译环境,也就是JRE设置的问题,需要在eclipse里面把jre设置为jdk下的jre。