zoukankan      html  css  js  c++  java
  • 完整的webservice接口调用过程

    查看调用方法

    调用地址:http://localhost:8080/WP_FOTON_FSOA/APP_FACTOR_SERVICES/Proxy_Services/TA_SAP/FACTOR_SYC_238_SendEarnestMoneyInfo_PS?wsdl

    根据接口的wsdl文档可以看到调用的接口方法(FACTOR_SYC_238_SendEarnestMoneyInfoService)以及反馈参数(getFACTOR_SYC_238_SendEarnestMoneyInfoResponse)里的SIGN,MESSAGE。

     查看调用格式

    可以用解析webservice的框架解析也可以使用外部工具,如SoapUI解析,如下(SoapUI示例);通过SoapUI即可查看调用接口的SOAP格式

     调用接口

    调用接口可通过wsimport编译,将接口的wsdl编译成本地实体类,然后调用实体类的方法即可,下面演示使用Post直接请求的方式。

    一、post请求方法

     1 package com.lwl.util;
     2 
     3 import sun.misc.BASE64Encoder;
     4 
     5 import java.io.*;
     6 import java.net.HttpURLConnection;
     7 import java.net.URL;
     8 import java.net.URLConnection;
     9 import java.nio.charset.StandardCharsets;
    10 
    11 /**
    12  * post请求
    13  *
    14  * @author liuwenlong
    15  * @create 2021-12-04 12:25:00
    16  */
    17 @SuppressWarnings("all")
    18 public class SendPost {
    19 
    20     /**
    21      * Post请求一个地址
    22      *
    23      * @param URL         请求地址
    24      * @param requestBody 请求的body
    25      * @param Authorization 账号密码
    26      * @return 返回调用结果
    27      */
    28     public String doPost(String URL, String requestBody,String Authorization) {
    29         OutputStreamWriter out = null;
    30         BufferedReader in = null;
    31         StringBuilder result = new StringBuilder();
    32         HttpURLConnection conn = null;
    33 
    34         try {
    35             java.net.URL url = new URL(URL);
    36             conn = (HttpURLConnection) url.openConnection();
    37             BASE64Encoder base = new BASE64Encoder();
    38             String encodedPassword = base.encode(Authorization.getBytes("UTF-8"));
    39             //System.out.println("加密后的密码:" + encodedPassword);
    40             //将加密的账号密码放到请求头里,这里注意Basic后面要加空格
    41             conn.setRequestProperty("Authorization", "Basic " + encodedPassword);
    42             conn.setRequestMethod("POST");
    43             //发送POST请求必须设置为true
    44             conn.setDoOutput(true);
    45             conn.setDoInput(true);
    46             //设置连接超时时间和读取超时时间
    47             conn.setConnectTimeout(3000);
    48             conn.setReadTimeout(3000);
    49             conn.setRequestProperty("Content-Type","text/xml;charset=UTF-8");
    50             //conn.setRequestProperty("Accept", "application/json");
    51             //获取输出流,写入请求的json或者xml报文
    52             out = new OutputStreamWriter(conn.getOutputStream(),"utf-8");
    53             //System.out.println(requestBody);
    54 
    55             out.write(requestBody); //获取请求的body,
    56             out.flush();
    57             out.close();
    58             //取得输入流,并使用Reader读取
    59             if (200 == conn.getResponseCode()) {
    60                 in = new BufferedReader(new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8));
    61                 String line;
    62                 while ((line = in.readLine()) != null) {
    63                     result.append(line);
    64                     //System.out.println(line);
    65                 }
    66             } else {
    67                 System.out.println("ResponseCode is an error code:" + conn.getResponseCode());
    68             }
    69         } catch (Exception e) {
    70             e.printStackTrace();
    71         } finally {
    72             try {
    73                 if (out != null) {
    74                     out.close();
    75                 }
    76                 if (in != null) {
    77                     in.close();
    78                 }
    79             } catch (IOException ioe) {
    80                 ioe.printStackTrace();
    81             }
    82         }
    83         return result.toString();
    84     }
    85 
    86 }

    二、组装报文,调用方法

     1 package com.restful.client.config.FFS;
     2 
     3 import com.lwl.util.SendPost;
     4 import org.dom4j.Document;
     5 import org.dom4j.DocumentException;
     6 import org.dom4j.DocumentHelper;
     7 import org.dom4j.Element;
     8 
     9 /**
    10  * @author liuwenlong
    11  * @create 2021-12-04 12:25:31
    12  */
    13 @SuppressWarnings("all")
    14 public class SYC_238 {
    15     public static void main(String[] args) {
    16         //请求地址
    17         String test_URL_SYC_238 = "http://localhost:8080/WP_FOTON_FSOA/APP_FACTOR_SERVICES/Proxy_Services/TA_SAP/FACTOR_SYC_238_SendEarnestMoneyInfo_PS?wsdl";
    18     
    19         SendPost sendPost = new SendPost();
    20         String username = "admin"; //账号
    21         String password = "admin111"; //密码
    22         String Authorization = username + ":" + password;
    23 
    24         String sendMessage = "请求报文放这里";
    25 
    26         String requestBody = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:fac=\"http://www.***.com.cn/FACTOR_SYC_238_SendEarnestMoneyInfo\">\n" +
    27                 "   <soapenv:Header/>\n" +
    28                 "   <soapenv:Body>\n" +
    29                 "      <fac:FACTOR_SYC_238_SendEarnestMoneyInfoService>\n" +
    30                 "         <fac:DATA><![CDATA[" + sendMessage + "]]></fac:DATA>\n" +
    31                 "      </fac:FACTOR_SYC_238_SendEarnestMoneyInfoService>\n" +
    32                 "   </soapenv:Body>\n" +
    33                 "</soapenv:Envelope>";
    34         System.out.println("requestBody\n" + requestBody);
    35         String responseBody = sendPost.doPost(test_URL_SYC_238, requestBody, Authorization);
    36         System.out.println("responseBody:\n" + responseBody);
    37 
    38     }
    39 }

    三、获取反馈,获取反馈可以直接根据wsdl里getFACTOR_SYC_238_SendEarnestMoneyInfoResponse方法,并取出WSDL文档里描述的SIGN,MESSAGE;

     1         Document doc = null;
     2         try {
     3             doc = DocumentHelper.parseText(responseBody.trim());
     4         } catch (
     5                 DocumentException e) {
     6             e.printStackTrace();
     7         }
     8         Element root = doc.getRootElement();// 指向根节点
     9         String message = root.element("Body").element("getFACTOR_SYC_238_SendEarnestMoneyInfoResponse").elementTextTrim("MESSAGE").trim();
    10         String sign = root.element("Body").element("getFACTOR_SYC_238_SendEarnestMoneyInfoResponse").elementTextTrim("SIGN").trim();
    11 
    12         System.out.println("\n反馈报文:" + message);
    13         System.out.println("标识:" + sign);
    14         String result = "";
    15         if ("0".equals(sign)) {
    16             result = "调用成功!";
    17         } else {
    18             result = "调用失败!";
    19         }
    20         System.out.println(result);

    原创文章,转载请说明出处,谢谢合作
  • 相关阅读:
    2015531 网络攻防 Exp1 PC平台逆向破解(5)M
    2017-2018-1 20155331 嵌入式C语言
    20155330 《网络对抗》 Exp9 web安全基础实践
    20155330 《网络对抗》 Exp8 Web基础
    20155330 《网络对抗》 Exp7 网络欺诈防范
    20155330 《网络对抗》 Exp6 信息搜集与漏洞扫描
    20155330 《网络对抗》 Exp5 MSF基础应用
    20155330 《网络攻防》 Exp4 恶意代码分析
    20155330 《网络攻防》 Exp3 免杀原理与实践
    20155330 《网络对抗》 Exp2 后门原理与实践
  • 原文地址:https://www.cnblogs.com/lwl80/p/15641574.html
Copyright © 2011-2022 走看看