调用外围系统的webservice服务注意事项

注意:对方的WSDL是用的什么框架以及版本,一般webservices开发有三种CXF。。。AXIS。。。。AXIS2。。。

      在调用外围系统的webservice服务时候,一般来说对方会提供一个wsdl,然后我们要根据wsdl生成相应的类,通过这种方式,做到了跨语言的完美方案,但是也带来了一些复杂性。在java中我们一般使用jdk自带的wsimport工具或者其他三方系统的wsdl4j工具生成java版本的stub实现。

  • 使用jdk里面自带的wsimport工具,具体使用办法如下:

   在JDK的bin文件夹中,有一个wsimport.exe,这个工具依据wsdl文件生成相应的类文件,然后用这些类文件,就可以像调用本地的类一样调用WebService提供的方。该工具可以用于非Java的服务器,如:用C#编写的WebService,通过wsimport则生成Java的客户端实现。

   在命令提示符中使用如下命令:

   wsimport http://localhost:8080/Demo/services/MyService wsdl

   命令参数说明:

    -d:生成客户端执行类的class文件的存放目录

    -s:生成客户端执行类的源文件的存放目录

    -p:定义生成类的包名

    其他命令参数请参照:

    使用wsimport命令后,可以得到代码,然后可以将代码拷贝到工程里面,也可以将其编译,打包成jar。

  比如 javac com/xxx/*.java com/xxx/yyy/*.java

   jar cvf dest.jar com/

   这样我们就能得到一个dest.jar文件

   使用一下webservice的框架自带的一下wsdl4j生成,由于众所周知的原因,java的webservice的jar很多,经常由于版本和实现的不同,会出现一下莫名奇妙的问题,所以这个地方还是推荐使用你所使用的框架的wsdl4j工具生成相应的stub。

  

  • 使用第三方ws框架,以cxf为例:

   使用一下webservice的框架自带的一下wsdl4j生成,由于众所周知的原因,java的webservice的框架很多,经常由于版本和实现的不同,会出现一下莫名奇妙的问题,所以这个地方还是推荐使用你所使用的框架的wsdl4j工具生成相应的stub。

  

  1. 下载apache-cxf-2.5.11.zip并解压到D:\apache-cxf-2.5.11,下载地址:
  2. 在D:\apache-cxf-2.5.11\bin目录下面执行命令:wsdl2java  +URL(wsdl方法地址)
  3. 命令执行完成后在相关文件夹中会生成相应的代码,将代码全部引入接入系统,与wsimport是相同的

   使用过程中遇到的问题:

  • 在使用的过程中发现一个问题,由于jdk6最高只支持ws2.1规范版本,所以在jdk6下面生成的时候,要加上-frontend jaxws21

    wsdl2java -frontend jaxws21

  • 发现可以根据wsdl生成java类,java类中的注释有可能是中文,所以要加上encoding参数,例如:-encoding utf-8

   wsdl2java -ecoding utf-8

 

第三种,利用myeclipse生成webservices代码,可以查看本人转载的文章

利用Myeclipse自动生成webService客户端代码

 

备注:在生成数据后由于WSDL是用XML来的所以在填充数据的时候,时间类型要转化成XMLGregorianCalendar

我这里有现成的互转方法

 /** 
     * 将Date类转换为XMLGregorianCalendar 
     * @param date 
     * @return  
     */  
    public static XMLGregorianCalendar dateToXmlDate(Date date){  
            Calendar cal = Calendar.getInstance();  
            cal.setTime(date);  
            DatatypeFactory dtf = null;  
             try {  
                dtf = DatatypeFactory.newInstance();  
            } catch (DatatypeConfigurationException e) {  
            }  
            XMLGregorianCalendar dateType = dtf.newXMLGregorianCalendar();  
            dateType.setYear(cal.get(Calendar.YEAR));  
            //由于Calendar.MONTH取值范围为0~11,需要加1   
            dateType.setMonth(cal.get(Calendar.MONTH)+1);  
            dateType.setDay(cal.get(Calendar.DAY_OF_MONTH));  
            dateType.setHour(cal.get(Calendar.HOUR_OF_DAY));  
            dateType.setMinute(cal.get(Calendar.MINUTE));  
            dateType.setSecond(cal.get(Calendar.SECOND));  
            return dateType;  
        }   
  
    /** 
     * 将XMLGregorianCalendar转换为Date 
     * @param cal 
     * @return  
     */  
    public static Date xmlDate2Date(XMLGregorianCalendar cal){  
        return cal.toGregorianCalendar().getTime();  
    }


如果有子表数据

 /**
  * Gets the value of the avoidOrgs property.
  *
  * <p>
  * This accessor method returns a reference to the live list, not a snapshot. Therefore any
  * modification you make to the returned list will be present inside the JAXB object. This is why
  * there is not a <CODE>set</CODE> method for the avoidOrgs property.
  *
  * <p>
  * For example, to add a new item, do as follows:
  *
  * <pre>
  * getAvoidOrgs().add(newItem);
  * </pre>
  *
  *
  * <p>
  * Objects of the following type(s) are allowed in the list {@link ApplicationAvoidOrgInfo }
  *
  *
  */

最后要对方提供标准,按照接口规范来填数据,哪些必填什么的,就是细节注意事项

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值