陈明轩这个名字的意思:利用CXF的wsdl2java来建立Web Service.

来源:百度文库 编辑:偶看新闻 时间:2024/06/12 12:17:49

 

         刚开始接触的是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文档时这样的:

则web 服务运行后的wsdl是:

.

这样就不能直接用原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文件,内容如下:
      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"> 
  
      
      
      
  
            id="CueapInterfaceForSI"  
       implementor="com.sxit.services.cueapinterfaceforsi.CueapInterfaceForSIImpl"  
       address="/CueapInterfaceForSI" /> 
        
 
 

 

然后配置web.xml:

    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">
    
         contextConfigLocation 
         /WEB-INF/beans.xml 
    
 
  
      
          
             org.springframework.web.context.ContextLoaderListener 
        
 
    
 
  
      
         CXFServlet 
          
             org.apache.cxf.transport.servlet.CXFServlet 
        
 
         1 
    
 
  
      
         CXFServlet 
         /services/* 
    
 

 

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

 

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

 

 

关于家庭网络的建立!台机笔记本利用陆游共享ADSL`?懂的来 .CXF的文件用什么打开?介绍一下这是什么格式的文件! 怎样利用网通的ADSL建立家庭局域网 怎样才可以利用自己电脑的空间建立网站! 怎么利用自己的电脑建立临时服务器 怎么利用linux建立多个不同用户权限的账户? 怎样利用红外线设备建立手机与电脑的连接? 企业利用ebxML建立电子商务的流程是? 怎样利用自己建立的一个网站合法地赚钱? 如何利用软件建立网上站点的商店?? 个人怎样利用虚拟空间建立自己的网站 请问ASP中利用ACCESS的时候用建立数据源吗?如何建立? 怎么样利用路由器建立局域网? 如何利用校园网建立局域网 怎样来利用网络来增长自己的知识 人和人是不是建立在互相平等的基础上的,都是互相利用的 利用网通的ADSL建立一个家庭局域网,需要什么型号的路由器?多少钱? 说明利用PowerBuilder6内置的数据库管理系统SybaseSQLAnywhere,建立一个图书管理数据库的步骤 如何利用frontpage在框架网页中建立由左框指向右框的书签 是利用别人的平台卖东西还是自己建立网站卖东西好? 利用现代信息技术手段而建立和发展起来的一种新型组织结构是 请问如何利用自己的机器作为服务器建立个人网站? 怎样利用DOS命令建立一个名字为空的文件夹? 如何利用给定的串与路由设备建立连接并读取流量信息?