Axis 调用 WebService 接口

本贴最后更新于 271 天前,其中的信息可能已经事过景迁

前言

最近需要对接另一个系统提供的 WebService 接口,在网上查了很多种方法都不行,这里记录一下我使用的方法,仅供大家参考。注意我这里使用的是 Axis 而不是 Axis2,可能是提供的 WebService 接口版本太老了,我使用 Axis2 也无法调用。

实现

引入 Maven

<!-- Axis 调用 WebService 接口 Start -->
<dependency>
    <groupId>org.apache.axis</groupId>
    <artifactId>axis</artifactId>
    <version>1.4</version>
</dependency>

<dependency>
    <groupId>javax.xml.rpc</groupId>
    <artifactId>javax.xml.rpc-api</artifactId>
    <version>1.1.1</version>
</dependency>

<dependency>
    <groupId>org.apache.geronimo.bundles</groupId>
    <artifactId>commons-discovery</artifactId>
    <version>0.4_1</version>
</dependency>
<!-- Axis 调用 WebService 接口 End -->

三个包都必须引入,不然会报错。

代码

@Slf4j
public class WebServiceUtil {

    private final static String URL = "http://ip:port/WebService/WebServiceSOAP2.asmx";

    private final static String AUTH_KEY = "123";

    /**
     * 发送请求
     *
     * @param localPart 接口名
     * @param desc      接口描述
     * @param params    请求参数
     * @param rClass    响应实体
     * @return R
     */
    @SneakyThrows
    private static <Q, R> R request(String localPart, String desc, Q params, Class<R> rClass) {
        // 转换为xml
        String requestXml = XmlUtil.beanToXML(params);
        log.info("WebService-{}接口请求参数为:{}", desc, requestXml);

        Service service = new Service();
        Call call = (Call) service.createCall();
        call.setTimeout(30000);
        call.setTargetEndpointAddress(new URL(URL));
        call.setSOAPActionURI("http://tempuri.org/" + localPart);
        // 设置操作的名称
        call.setOperationName(new QName("http://tempuri.org/", localPart));
        // 设置返回的数据类型
        call.setReturnType(XMLType.XSD_STRING);
        // 设置参数
        call.addParameter(new QName("http://tempuri.org/", "authkey"), XMLType.XSD_STRING, ParameterMode.IN);
        call.addParameter(new QName("http://tempuri.org/", "Request_Xml"), XMLType.XSD_STRING, ParameterMode.IN);
        // 执行调用
        String responseXml = (String) call.invoke(new Object[]{AUTH_KEY, requestXml});
        // 解析
        log.info("HisWebService-{}接口请求成功,响应参数为:{}", desc, responseXml);
        return JSONUtil.xmlToJson(responseXml).getJSONObject("Response").toBean(rClass);
    }
}

出入参按照接口要求来传,代码仅供参考。

  • Axis
    1 引用
  • Web
    115 引用 • 431 回帖 • 8 关注
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3168 引用 • 8207 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...