您的位置:首页 > 其它

使用cxf调用.net的Webservice

2014-05-02 20:14 465 查看
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类(客户端)。



3、调用webservice

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

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