CXF3.0.4客户端调用Web service来获取服务的三种方式
2015-05-19 15:11
861 查看
服务端的代码请看我的另一篇文章:点击打开链接
首先必须要有一个可用的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中运行的时候报错:
Exception in thread "main" java.lang.NullPointerException
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。
首先必须要有一个可用的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中运行的时候报错:
Exception in thread "main" java.lang.NullPointerException
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。
相关文章推荐
- CXF的三种发布方式和客户端调用方法
- [笔记-架构探险]web服务框架-cxf-4.1.多种方式的发布与客户端调用
- CXF的三种发布方式和客户端调用方法
- CXF的三种发布方式和客户端调用方法
- CXF的三种发布方式和客户端调用方法
- CXF的三种发布方式和客户端调用方法
- CXF的三种发布方式和客户端调用方法
- CXF的三种发布方式和客户端调用方法
- webservice接口常见问题1:客户端使用SOAP方式调用CXF服务时异常
- CXF的三种发布方式和客户端调用方法
- webservice客户端调用方式(cxf)
- spring boot整合cxf发布webservice服务和spring boot整合cxf客户端调用webservice服务
- 按照Web Service方式调用WCF服务的问题
- spring boot整合cxf发布webservice服务和cxf客户端调用
- CXF客户端代码生成与服务调用(二)
- WebService 创建客户端访问服务端面的三种方式
- 基于Web Service的客户端框架搭建一:C#使用Http Post方式传递Json数据字符串调用Web Service
- spring boot整合cxf发布webservice服务和cxf客户端调用
- JAX-WS和JAX-RPC方式调用Web Service的Java客户端
- cxfspring boot整合cxf发布webservice服务和cxf客户端调用