Java WSDL 服务调用入门分享

这篇博客详细介绍了如何使用Java调用WSDL服务,包括理解WSDL、使用CFX生成可调用代码、异常处理、数据转换及在Postman中调试。还分享了在服务网络断开时的处理策略和一些参考资料。
摘要由CSDN通过智能技术生成

Java WSDL 服务调用入门分享

第一次自己使用代码直接调用webservice。对于这种网上很难找资料,而且找到了不会用,会用但是会报错的代码。内心是非常痛苦的。要静下心来仔细学习webservice也是不可能的,因为非常赶。所以就把我终于学会调用webservice的关键过程写下

webservice说明

此为不专业的说明,仅做了解用。且代码都是从片段里面截取出来的,仅供思路参考,不能直接拿来用。

webservice应该就是想用于跨平台的交互方式,因为在它复杂的xml里面,规定了调用的方式,参数的对象(强类型)等等信息。而WSDL(Web Services Description Language)应该就是一种针对webservice更加详细的约定,因为WSDL描述了webservice的函数、参数、返回值等说明。

如何调用
  • 自己写调用代码,我不会,只能祈祷大家以后对接能少遇到webservice
  • 使用CFX生成。下面我讲一下如何使用cfx生成可以直接调用的代码,以及如何调用。
CFX生成可直接调用的代码1

思路如下:下载插件 -> 根据给出的xml生成对应的代码 -> 在代码里面找到main方法 -> 模仿main方法自己去调用 -> 封装让接口更加易用

  • 下载cfx的软件。http://mirrors.tuna.tsinghua.edu.cn/apache/cxf/3.3.3/apache-cxf-3.3.3.zip

  • 解压后,打开bin文件夹,找到我们需要运行的 wsdl2java

  • 在bin文件夹,打开CMD。输入命令:

    wsdl2java -p 这里填写你的包名 -d 这里填写你生成代码的位置 -client -encoding utf-8 -noAddressBinding  这里填写WSDL的地址
    

    你的包名:指的是接下来生成的文件会在XX.XX包下面。比如:我填写的是com.google,那么生成的文件结构如此:package com.google.test;

    代码的位置:指的是生成的文件会在XXX路径下面。比如:我填写的是C:\Users\shihu\Documents\wsdl,那么生成的文件就会在C:\Users\shihu\Documents\wsdl文件下。

    WSDL的地址:指的是你将要调用的wsdl的地址,一般就是返回一个xml文件。比如:我填写http://webservices.amazon.com/AWSECommerceService/AWSECommerceService.wsdl,那么就是根据该地址返回的xml文件去生成代码。这里我挑选了亚马逊的测试例子。这里有更多的例子,只需要将地址替换即可。

    所以,完整的命令可以如下:

wsdl2java -p com.google -d C:\Users\shihu\Documents\wsdl -client -encoding utf-8 -noAddressBinding http://webservices.amazon.com/AWSECommerceService/AWSECommerceService.wsdl


生成以后的目录结构如下非常多文件,但是别怕[下面会大致说明](#anchor1)<sup>注1</sup>:

```bash
C:.
└─com
    └─google
            Accessories.java  --dom实体
            Arguments.java    --dom实体
            AWSECommerceService.java  --webservice 的service
            AWSECommerceServicePortType.java --可以获取webservice入口的
            AWSECommerceServicePortType_AWSECommerceServicePortCA_Client.java --入口
            AWSECommerceServicePortType_AWSECommerceServicePortCN_Client.java --入口
            AWSECommerceServicePortType_AWSECommerceServicePortDE_Client.java --入口
            AWSECommerceServicePortType_AWSECommerceServicePortES_Client.java --入口
            ...
  • 导入并运行代码

    面对这些陌生的代码,我们该如何着手?很简单,找到入口(main方法)就可以。

    • main方法在**Endpoint_Client **结尾的文件里面;里面自动生成了所有服务端提供的方法。我们只需要调用一下main方法就可以帮我们调试所有的接口了。
    • 然后我们模仿main方法,自己将service实例化出来,就可以直接调用服务端接口了。

额外产物

将返回的数据转化为json

返回之后的是一个dom数据,那么我们如何把他转化为JSON对象呢?

返回的实体大致如下:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
    "username",
    "password"
})
@XmlRootElement(name = "login")
public class Login {
    @XmlElementRef(name = "username", namespace = "http://sys.ws.xxx.com", type = JAXBElement.class, required = false)
    protected JAXBElement<String> username;
    @XmlElementRef(name = "password", namespace = "http://sys.ws.xxx.com", type = JAXBElement.class, required = false)
    protected JAXBElement<String> password;
    ...

如果你和我情况类似,那么你可以使用以下方法转化为JSON。我封装了2部分,一个是只转化一个,另外一个是转化集合的。其实本质都是一样的。最主要的代码是final String json = mapper.writerWithDefaultPrettyP

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值