关于wsdl2java命令生成客户端及动态创建客户端


写本文目的只有一个:总结做笔记,以便日后方便查阅,都是个人经验,希望对大家有帮助。

如有不对的地方请各位指出,多多包涵,别拍砖哦。


1、网上关于使用wsdl2java生成CXF客户端的例子已经很多了,大家随便一搜就有大堆了,然后你看着看着慢慢就会发现,

很多都是Ctrl+C和Ctrl+V,重点不突出,所以我只说关键要点,不作详细代码解释(度娘,谷哥可以帮到你)。

其实要使用wsdl2java自动生成代码,关键就是要配好环境变量,然后就是输入wsdl2java的那条生成代码的命令。环境变

量没配好,什么自动生成的就无从谈起。


     CXF下载链接:http://cxf.apache.org/download.html

     使用apache-cxf-2.7为例,下面的“x:\apache-cxf-2.7”为你从官网下载的cxf包解压的目录。

     以下这些包是需要导入的,不然就报有ClassNotFoundException等等错误。

     ①配置CLASSPATH

     x:\apache-cxf-2.7\lib


     ②
配置PATH

       x:\apache-cxf-2.7\bin


      ③新建一个环境变量

       名:CXF_HOME

       值:x:\apache-cxf-2.7


环境变量配好后,就是通过CMD输入命令: 

wsdl2java -p com.wsx.xxx -d d:\src -all  http://xxx.demox.com/xxx?wsdl



http://xxx.demox.com/xxx?wsdl 这个URL对应的就是wsdl文件访问地址


参数说明:

-p 也就是package 对应java中的包

-d 输入目录,生成.java文件会在该目录,会自动添加-p参数配置的包路径,“src”这个文件夹要先创建好

-client 生成客户端测试web service的代码.
-server 生成服务器启动web  service的代码.
-impl 生成web service的实现代码.
-all 生成上面-client -server -impl -ant 对应的所有文件.


2、JaxWsProxyFactoryBean动态调用
        //创建动态工厂
         JaxWsDynamicClientFactory dynamicClient = JaxWsDynamicClientFactory.newInstance();  
        // 设置WebService地址
        Client client = dynamicClient.createClient("http://xxx.demox.com/xxx?wsdl");  
        try{
            //这样就执行了“query”这个方法,传入的参数分别为参数一,参数二。
            //至于要执行什么方法,传入什么参数类型,传多少个参数,得看你服务器的接口是怎么定义的。
            Object[] rspArr = client.invoke("query", 参数一, 参数二); 

            //一:如果你服务端返回的是个单一的String类型,而不是对象类型,可以这样:
            //String str = rspArr[0]; 

            //二:如果你的WebServcie服务端返回的是一个对象类型,则需要再解析:
            //这里“getProductName”是我WebService服务端返回一个Bean里的一个get的方法
            //最后得到的是产品名称
            Method prductNameMethod = rspArr[0].getClass().getMethod("getProductName");
            Object prductNameObj = prductNameMethod.invoke(rspArr[0]); 
            String productName = (String)prductNameObj;
        }catch(Exception e){
             e.printStrackTrace;
        }


个人总结:

      使用wsdl2java生成CXF的客户端代码全面,但是如果服务端接口有变动的话,则需要重新生成,维护有点麻烦。而本人

更趋向使用动态调用,和wsdl2java的自动生成相比,文件数量及代码量会少很多且更灵活。事情没有绝对,哪种方法好,就

见仁见智了,不管黑猫白猫,抓到老鼠就是好猫。

      需要一提的是,若你要使用动态调用的话,包名一定并且必须要和服务器端接口所在的包名一致,包名不一致的话,如果

是String,int等类型还好,但是如果是List,Map等复杂类型的时候会报错,是解析不了的。

        

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值