使用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类(客户端)。

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

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的方法。

 

    

    

你可能感兴趣的:(.net,webservice,CXF,wsdl2java,window认证)