使用cxf调用.net的Webservice

java工程调用.net的webService方法有很多,比如axis、axis2、xfire等。而cxf是比较方便的一种方式。本文介绍使用cxf方式,其基本思路是使用cxf.jar包中wsdl2java工具生成客户端相应的java类,然后在java工程中操作生成客户端从而完成webservcie调用。

      1、引入cxf相应包(参考http://blog.sina.com.cn/s/blog_624a352c0100zawf.html)

下载:http://cxf.apache.org/,解压至目录

加上依赖的jar库,如:

commons-logging-1.1.jar

geronimo-activation_1.1_spec-1.0-M1.jar (or Sun's Activation jar)

geronimo-annotation_1.0_spec-1.1.jar (JSR 250)

geronimo-javamail_1.4_spec-1.0-M1.jar (or Sun's JavaMail jar)

geronimo-servlet_2.5_spec-1.1-M1.jar (or Sun's Servlet jar)

geronimo-ws-metadata_2.0_spec-1.1.1.jar (JSR 181)

jaxb-api-2.0.jar

jaxb-impl-2.0.5.jar

jaxws-api-2.0.jar

neethi-2.0.jar

saaj-api-1.3.jar

saaj-impl-1.3.jar

stax-api-1.0.1.jar

wsdl4j-1.6.1.jar

wstx-asl-3.2.1.jar

XmlSchema-1.2.jar

xml-resolver-1.2.jar

2、生成客户端

将webservice的WSDL另存为xml文件,如http://localhost:8080/MsgServcie/MsgServiceClass.asmx?WSDL另存为MsgService.xml。然后在解压的cxf包中的bin中执行如下命令,则在D:\WSDL中生成了包名为com.cnpc.pms.webservice.client.demo的java类(客户端)。

wsdl2java -p com.fenghui.webservice.langcao.hetong -d d:\java -verbose "d:\java\HTMgr_WebSrv.xml"

使用cxf调用.net的Webservice_第1张图片

3、调用webservice

在工程中,引入这些java类(客户端),并使用如下方法调用webservice

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package com.cnpc.test;
import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import com.cnpc.test.webservice.MsgServiceClassSoap;
public class TestWebService {
    public static void main(String[] args){
   
        JaxWsProxyFactoryBean  factory=new JaxWsProxyFactoryBean();        
        factory.getInInterceptors().add(new LoggingInInterceptor());
        factory.getOutInterceptors().add(new LoggingOutInterceptor());         
        factory.setServiceClass(MsgServiceClassSoap.class);
        factory.setAddress("http://localhost:8080/MsgService/MsgServiceClass.asmx?WSDL");
        MsgServiceClassSoap service=(MsgServiceClassSoap)factory.create();
           
        try{
            service.sendSMS(Long.parseLong("1380008000"), "短信java接口测试");
            service.sendEmail("jrn1012", "邮件测试", "邮件java接口测试");
        }
        catch(Exception e){
            System.out.print("异常信息:"+e.getMessage());
        }
    }
}
由此可见,使用cxf能轻松完成.net webService中调用。


  在实际的开发中,出于安全性考虑,部署的.net webService中采用window(NetworkCredential)认证方式。而直接用cxf方式调用时会有“未授权访问”的异常,不知道各位高手是如何解决该问题的。我是对.net webService使用进行二次封装(使用.net硬编码验证),然后部署二次封装的webservice,用cxf调用。同时,为了安全考虑在二次封装的webservice的每个方法中新增了一个参数userToken,这个参数可是做“调用许可”,即持有这个许可的客户端才能顺利执行webservice的方法。

你可能感兴趣的:(使用cxf调用.net的Webservice)