您的位置:首页 > 其它

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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: