`
jeooo.li
  • 浏览: 46251 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

利用CXF的wsdl2java来建立Web Service.

阅读更多

         刚开始接触的是Xfire,由于xfire几年没有维护了,兼容性不是很好,同时会自动在wsdl中产生一些垃圾的东西,特别是如果类中的字段用到了xfire字的泛型,则wsdl非常的庞大,并且客户端根据wsdl生成的代码也特别多.本来只要定义好了wsdl,就只需要把这个wsdl文档给用户生成客户端的,但是由于xfire的不兼容性,经常需要把xfire的web service运行后的wsdl拷贝出来给用户.

        所以,今天决定放弃xfire了,改用CFX。由于cfx是Apache的一个开源项目,在兼容性方面那是不比说的了。首先定义好一个wsdl文档,定义的时候就没有必要像在xfire那种考虑元素的类型、约束等。同一个wsdl文档用xfire生成服务端,再用别的工具如wsdl.exe生成客户端,如果没有好好的约束和设计好,客户端直接调用服务端是不行的,今天发现xfire的一个特点就是对于xsd的命名空间如果会自定更改为java中类的包路径,比如wsdl文档时这样的:

<xsd:schema  targetNamespace="http://services.sxit.com/cueapinterfaceforsi/">

则web 服务运行后的wsdl是:

<xsd:schema targetNamespace="http://cueapinterfaceforsi.services.sxit.com"/>.

这样就不能直接用原wsdl文件生成客户端与web服务交互了.当然,有的人会可以利用aegis.xml来映射,不过我没有用过,不知道行不行。但是在cfx下就不需要考虑这些问题了,直接定义好wsdl文档,利用别的工具生成的客户端都能正常访问web 服务。

        定义好了一个wsdl文档后,就可以利用cfx的wsdl2server工具来生成类接口和接口实现类,有的程序员做web服务的时候喜欢直接写接口、类以及相关的数据类,再创建web server。其实这样有点麻烦,光写代码就要写好久,有时还要注意什么命名空间、element的名称啊,如果事先写好了wsdl的话,直接利用工具生成服务端,那岂不是省了很多代码量 ,闲话少说,还是回去主题吧。

       首先在Apache网站上下载cfx包,解压缩到某路径,然后设置环境变量:

CXF_HOME=e:/java/apache-cxf-2.1.3,以及在path中增加 % CXF_HOME%/bin。然后就可以在控制台上输入:

wsdl2java -impl -server CueapInterfaceForSI.wsdl来生成接口类、实现类和其他的数据类了。-impl参数是要求生成实现类,如果没有这个参数,则仅仅生成接口和其他元素类。

      然后搭建cfx环境,在MyEclipse中新建一个Web Server Project.类型选择JAX-WS.项目创建成功后,把cfx文件夹中lib目录下所有的jar文件拷贝到工程的lib目下中。然后把利用wsdl2java工具生成的java代码拷贝到工程的src目录下.然后需要修改一个地方,就是在接口的实现类中把wsdlLocation = "file:CueapInterfaceForSI.wsdl"这个东东给删除,不然等会运行是会提示找不到这个wsdl文件.在web-inf目录下新建一个beans.xml文件,内容如下:
 <beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:jaxws="http://cxf.apache.org/jaxws" 
     xsi:schemaLocation=" 
 http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
 http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"> 
  
     <import resource="classpath:META-INF/cxf/cxf.xml" /> 
     <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" /> 
     <import resource="classpath:META-INF/cxf/cxf-servlet.xml" /> 
  
     <jaxws:endpoint  
       id="CueapInterfaceForSI"  
       implementor="com.sxit.services.cueapinterfaceforsi.CueapInterfaceForSIImpl"  
       address="/CueapInterfaceForSI" /> 
        
 </beans> 

 

然后配置web.xml:

<web-app version="2.5"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
   <context-param> 
         <param-name>contextConfigLocation</param-name> 
         <param-value>/WEB-INF/beans.xml</param-value> 
     </context-param> 
  
     <listener> 
         <listener-class> 
             org.springframework.web.context.ContextLoaderListener 
         </listener-class> 
     </listener> 
  
     <servlet> 
         <servlet-name>CXFServlet</servlet-name> 
         <servlet-class> 
             org.apache.cxf.transport.servlet.CXFServlet 
         </servlet-class> 
         <load-on-startup>1</load-on-startup> 
     </servlet> 
  
     <servlet-mapping> 
         <servlet-name>CXFServlet</servlet-name> 
         <url-pattern>/services/*</url-pattern> 
     </servlet-mapping> 
</web-app>

 

运行tomcat,在url中输入http://127.0.0.1:8080/bnetinterface/services/CueapInterfaceForSI?wsdl.查看到的wsdl内容就跟源wsdl文档的一样了,不用像在xfire下担心不一致了,也没有xfire那么复杂和庞大。

 

        利用.NET的wsdl工具根据源wsdl文档生成客户端,新建一个测试类,创建一个测试数据,就能直接调用服务端了。传送的数据和返回的数据都一致,再也不用担心参数值为null了。

 

 

分享到:
评论
2 楼 lynnlni 2010-08-06  
你连cxf和cfx都没分清楚……
1 楼 C_J 2009-12-02  
tks............

相关推荐

    CXF框架应用在Web项目中

    Ⅰ)调用CXF提供的wsdl2java工具,根据WSDL文档生成相应的Java代码(任何语言实现web service都要暴露WSDL文档); Ⅱ)找到wsdl2java所生成的类中一个继承了Service的类(该类的实例可当工厂使用); Ⅲ)调用...

    根据wsdl生成webservice服务端(3种方式)

    详细介绍3种方法根据wsdl逆向生成webservice服务端;有最原始的wsdl2java指令,还有通过soapUI工具以及通过myeclipse的web service project来生成。

    web service cxf获取第三方天气数据

    cxf获取第三方天气数据包中内含: MainTest.java, WeatherWS.wsdl,使用说明文档.txt

    apache-cxf-3.3.5

    Web Services Standards Support: CXF supports a variety of web service standards including SOAP, the Basic Profile, WSDL, WS-Addressing, WS-Policy, WS-ReliableMessaging, WS-Security, WS-SecurityPolicy,...

    cxf(jax-ws)+spring+hibernate整合包

    logging-1.1.1.jar,cxf-2.7.6.jar,cxf-manifest.jar,cxf-services-sts-core-2.7.6.jar,cxf-services-ws-discovery-api-2.7.6.jar,cxf-services-ws-discovery-service-2.7.6.jar,cxf-services-wsn-api-2.7.6.jar,cxf-...

    apache-cxf-3.1.15.zip

    CXF 生成Web Service Client(将WSDl 转化成 Java代码)

    用cxf开发webservice

    Apache CXF是一个开源的Service框架,它实现了JCP与Web Service中一些重要标准。CXF简化了构造,集成,面向服务架构(SOA)业务组件与技术的灵活复用。在CXF中,Service使用WSDL标准定义并能够使用各种不同的消息格式...

    CXF资料宝典大全

    里面很全的资料,包括wsdl文件结构分析,cxf简单示例,实战Web+Service+with+CXF,cxf_hellow等doc文档另外还有SpringCXF源码以及java-C#的demo

    使用Spring+CXF开发WebService.doc

    Apache CXF 提供方便的Spring整合方法,可以通过注解、Spring标签式配置来暴露...这些Annotation将描述Web Service的WSDL文档元素和Java源代码联系在一起。@SOAPBinding是一个绑定的annotation用来说明网络协议和格式。

    Java EE常用框架.xmind

    WSDL – WebService Description Language – Web服务描述语言。 SOAP-Simple Object Access Protocol(简单对象访问协议) SOA(Service-Oriented Architecture) :面向服务的架构 它是一种思想,...

    php的webservice的wsdl的XML无法显示问题的解决方法

    JAVA如何调用wsdl过程详解java WSDL接口webService实现方式PHP调用wsdl文件类型的接口代码分享解析利用wsdl.exe生成webservice代理类的详解在PHP中利用wsdl创建标准webservice的实现代码Java调用CXF WebService接口...

    Web Service 接口的发布与调用

    1.采用cxf集成Spring实现webservice接口的发布。...2.(调用一)用eclipse根据wsdl连接自动生成java代码实现接口的调用。 3.(调用二)用axis2实现接口调用。 4.开发环境:eclipse+jdk1.8+tomcat8.5

    cxf-spring-boot-starter:由Spring Boot和Apache CXF支持的企业和生产就绪的SOAP Web服务

    由Spring Boot和Apache CXF支持的企业和生产就绪的SOAP Web服务 功能包括: 使用WSDL / XSD中的JAX-B生成所有必要的Java类(使用补充的Maven插件 使用100%纯Java配置在Spring Context中启动Apache CXF 端点初始...

    soap-spring-boot-cxf:用于使用Spring Boot,Apache CXF和JAX-WS生成和测试SOAP-WSDL驱动的服务的示例项目

    使用JAX-WS RI和JAXB的Apache CXF和SpringBoot的SOAP-Webservices-仅注释,绝对没有XML 作为Example SOAP-Service,我做了一些研究,但是毕竟(或因为?)几乎所有教程都使用了众所周知的 ,它是最好的用例。 在...

    Android典型技术模块开发详解

    13.4.1 CXF框架的Web Service 13.4.2 Android端开发 13.5 Base64编解码 13.6 Http方式的SOAP调用 13.7 本章小结 第14章 AChartEngine 14.1 API介绍 14.1.1 渲染器 14.1.2 数据填充器 14.1.3 图表View 14.2 折线图 ...

Global site tag (gtag.js) - Google Analytics