Java 客户端调用 WebService 接口的一种方式

这篇具有很好参考价值的文章主要介绍了Java 客户端调用 WebService 接口的一种方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. SoapUI 测试 WebService 接口

  通过SoapUI创建一个SOAP Project;
  项目名称自定义,WSDL地址维护WebService接口地址。点击OK即可

java调用webservice接口的soap的result,[Java] Java Web,java,soapui,webservice

  项目创建完成后,展开WebService项,可以看到具体的接口,打开接口下的Request,右侧面板Form标签下可以清晰的看到请求入参,点击Submit请求按钮可以看到Overview标签下的响应结果。
java调用webservice接口的soap的result,[Java] Java Web,java,soapui,webservice
  XML标签下的请求报文和响应报文

<!-- 请求报文 -->
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://webservice.qyythpt.jzkj.com">
   <soapenv:Header/>
   <soapenv:Body>
      <web:sendMessage>
         <!--Optional:-->
         
      <xmlStr>123456</xmlStr></web:sendMessage>
   </soapenv:Body>
</soapenv:Envelope>

<!-- 响应报文 -->
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <ns2:sendMessageResponse xmlns:ns2="http://webservice.qyythpt.jzkj.com">
         <String><![CDATA[<resident>1695087972825</resident>
<rescode>0</rescode>
<resmsg>数据处理错误!</resmsg>]]></String>
      </ns2:sendMessageResponse>
   </soap:Body>
</soap:Envelope>

2. Java 访问 WebService 接口

  WebService 调用有多种方式,此处以 HttpURLConnection 调用为例。
  接口请求封装,仅需要传入接口需要的入参和接口地址。
  接口响应结果,解析成Map对象返回。如下所示

/**
     * WebService推送报文封装请求推送
     * WebService 接口地址为 http://{ip}:{port}/services/TraderService?wsdl
     * @param webServicePushUrl 此处 webServicePushUrl 为 http://{ip}:{port}/services/TraderService 
     * @param xmlStr 接口入参
     * @return
     */
    private Map<String, Object> webServicePush(String webServicePushUrl, String xmlStr) {
        Map<String, Object> resultMap = new HashMap<>(2);
        resultMap.put("code", "0");
        resultMap.put("msg", "推送失败!");

        InputStream is = null;
        InputStreamReader isr = null;
        BufferedReader br = null;
        OutputStream os = null;
        try {
            //第一步:创建服务地址,不是WSDL地址
            URL url = new URL(webServicePushUrl);
            //2:打开到服务地址的一个连接
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            //3:设置连接参数
            //3.1设置发送方式:POST必须大写
            connection.setRequestMethod("POST");
            //3.2设置数据格式:Content-type
            connection.setRequestProperty("content-type", "text/xml;charset=utf-8");
            //3.3设置输入输出,新创建的connection默认是没有读写权限的,
            connection.setDoInput(true);
            connection.setDoOutput(true);
            //4:组织SOAP协议数据,发送给服务端;报文参考SoapUI测试工具的XML请求报文
            String soapXML = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:web=\"http://webservice.qyythpt.jzkj.com\">" +
                    "<soapenv:Header/>" +
                    "<soapenv:Body>" +
                    "<web:sendMessage>" +
                    "<xmlStr><![CDATA[" +
                    xmlStr +
                    "]]></xmlStr></web:sendMessage>" +
                    "</soapenv:Body>" +
                    "</soapenv:Envelope>";
            logger.warn("[WebService]:推送请求{}", soapXML);
            os = connection.getOutputStream();
            os.write(soapXML.getBytes());
            //5:接收服务端的响应
            int responseCode = connection.getResponseCode();
            if(200 == responseCode){//表示服务端响应成功
                is = connection.getInputStream();
                isr = new InputStreamReader(is);
                br = new BufferedReader(isr);

                StringBuilder sb = new StringBuilder();
                String temp = null;
                while(null != (temp = br.readLine())){
                    sb.append(temp);
                }
                logger.warn("[WebService]:推送结果{}", sb);
                Map<String, Map> bodyMap = XmlUtils.xmlTOMap(sb.toString());
                Map<String, Map> sendMessageResponseMap = bodyMap.get("Body");
                Map<String, String> resultStringMap = sendMessageResponseMap.get("sendMessageResponse");
                String stringXML = resultStringMap.get("String");
                stringXML = "<root>" + stringXML + "</root>";
                Map<String, String> stringMap = XmlUtils.xmlTOMap(stringXML);
                // String -> <resident>1694505193442</resident><rescode>1</rescode><resmsg>ok</resmsg>
                // String -> <resident>1678862927956</resident><rescode>0</rescode><resmsg>数据处理错误!</resmsg>
                // 0失败,1成功
                resultMap.put("code", stringMap.get("rescode"));
                resultMap.put("msg", stringMap.get("resmsg"));
            }
        } catch (Exception e) {
            logger.error("[WebService]推送异常", e);
        } finally {
            if (null != is) {
                try {
                    is.close();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
            if (null != isr) {
                try {
                    isr.close();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
            if (null != br) {
                try {
                    br.close();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
            if (null != os) {
                try {
                    os.close();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
        }
        return resultMap;
    }

更多请求方式可参考文档调用webservice服务方式总结
Powered By niaonao文章来源地址https://www.toymoban.com/news/detail-802458.html

到了这里,关于Java 客户端调用 WebService 接口的一种方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java客户端调用elasticsearch进行深度分页查询 (search_after)

    前言 这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。 作者:神的孩子都在歌唱 具体的Search_after解释,可以看我这篇文章 elasticsearch 深度分页查询 Search_after(图文教程) 参考:https://blog.csdn.net/qq_44056652/article/details/126341810 作者:神的孩子

    2024年03月22日
    浏览(39)
  • java静默打印PDF(可实现生产环境下服务器写入PDF模板,然后调用客户端打印机打印)

    需求 写这个的原因主要是因为当时项目中的打印功能是用户打印标签时,每次点击打印是通过把PDF文件下载到客户端浏览器,然后需要通过浏览器去点击打印机实现打印,就非常麻烦,每次都步骤非常复杂,而且每次参数都要重新设置。于是就想着怎么通过java实现自己调用

    2024年02月13日
    浏览(34)
  • WebService 客户端增加Header头、并且指定命名空间、添加拦截器(日志拦截器,自定义拦截器)、soap:Envelope 添加命名空间

    1.增加Header头 生成XML结果如下 2.添加拦截器 3.soap:Envelope 添加命名空间 生成XML结果如下

    2024年02月10日
    浏览(37)
  • JAVA调用Bartender进行标签打印(可本地用打印机客户端进行测试打印,【云上的项目】可通过WebSocket进行通讯进行打印)

    用Java编写一个打印标签客户端  点击运行启动会打开首页  可以点击预览打印  点击打印可测试成功     打印机结果  前端用的是thymeleaf 代码片段 后端代码  页面上预览图片和真实打印机打出来的不一致是正常的因为这是测试打印(测试本地电脑是否符合使用打印机客户

    2024年02月15日
    浏览(39)
  • 客户端Unexpected end of file from server 和 服务端nginx 408 的一种解决方法

    https://www.jiweichengzhu.com/article/81044c11caf54753aeed94ef8fad1070 https://blog.csdn.net/chenz_yang/article/details/77238532 终端设备(Debian系统、戴尔服务器)通过HTTPS向云端上报数据时,有的数据如设备心跳能上报,有的数据如服务器配置信息上报时报错: Unexpected end of file from server “Unexpected en

    2024年02月15日
    浏览(50)
  • Http远程调用(feign客户端通过POST传递FORM格式数据)

    目录       feign实现http远程调用(正文)       解决方案: 在正式讲解HTTP远程调用时,我们先来了解一下缺省方法的定义。 写在前面: 缺省参数可传可不传,可以传多个但他们必须是相同的类型 每个方法中缺省参数只能定义一个,并且只能在参数的最后定义; 缺省参

    2023年04月08日
    浏览(30)
  • Spring 教程—REST 客户端详解(WebClient 、RestTemplate、HTTP 接口)

    Spring框架为调用REST端点提供了以下选择: WebClient - 非阻塞、响应式客户端和 fluent API。 RestTemplate - 带有模板方法API的同步客户端。 HTTP 接口 - 注解式接口,并生成动态代理实现。 WebClient  是一个非阻塞的、响应式的客户端,用于执行HTTP请求。它在5.0中引入,提供了  Re

    2024年02月07日
    浏览(33)
  • 【Kafka源码走读】Admin接口的客户端与服务端的连接流程

    注:本文对应的kafka的源码的版本是trunk分支。写这篇文章的主要目的是当作自己阅读源码之后的笔记,写的有点凌乱,还望大佬们海涵,多谢! 最近在写一个Web版的kafka客户端工具,然后查看Kafka官网,发现想要与Server端建立连接,只需要执行 方法即可,但其内部是如何工作

    2024年02月16日
    浏览(34)
  • Redis的Java客户端-Java客户端以及SpringDataRedis的介绍与使用

    Spring Data Redis底层支持同时兼容Jedis和Lettuce两种不同的Redis客户端,可以根据需要任意选择使用其中的一种。这样既可以保留现有代码使用的Jedis方式,也可以通过使用基于Netty的高性能Lettuce客户端,提升应用的性能和吞吐量。 Jedis是一个传统的Java Redis客户端,使用BIO进行So

    2024年02月08日
    浏览(35)
  • java调用webService接口

    1、需求: 由于业务需求对接一个比较老的平台使用到了webService接口,这里记录一下调用方法。 一般有三种方式调用webService接口, 1.1、以HttpURLConnection的方式调用 1.2、使用apache-cxf生成java类调用 1.3、使用AXIS调用WebService 我这边主要是使用的是,第三种,使用AXIS调用WebServi

    2024年02月05日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包