使用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的方法。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |