CXF3.0.4客户端调用Web service来获取服务的三种方式

服务端的代码请看我的另一篇文章:点击打开链接


首先必须要有一个可用的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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值