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);

    原创文章,转载请说明出处,谢谢合作
  • 相关阅读:
    Python入门基础知识点(基础数据类型之字典)
    Python入门基础知识点(基础数据类型之二)
    Python入门基础知识点(基础数据类型)
    Python入门基础知识点(循环语句和编码)
    Python入门基础知识点(基础语法介绍)
    接口继承
    类的继承
    类的组合
    静态属性、类方法、静态方法
    类与对象属性的操作
  • 原文地址:https://www.cnblogs.com/lwl80/p/15641574.html
Copyright © 2011-2022 走看看