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

 

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

 

    

    

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值