国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java 調(diào)用 WebService 、java調(diào)用Soap請求、Java對接soap接口

這篇具有很好參考價值的文章主要介紹了Java 調(diào)用 WebService 、java調(diào)用Soap請求、Java對接soap接口。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

工作第一次遇到對接soap接口,覺得有必要記錄一下,畢竟踩了不少坑,網(wǎng)上帖子很多但大都不全,也不可能完全滿足自己的需求,于是就有了下面的代碼:

除了只是借鑒,

注意事項:1.http://ip:port/xxx/xxx/soap?wsdl有些soap接口,對面是不需要穿?wsdl對接時要問出清

2. httpPost.setHeader("SOAPAction", SOAPAction); SOAPAction也要問下,或者查看接口文件,有些只要傳空字符串

3.拼接報文時要注意格式,/n一類的特殊符號不能有

4.xml解析式注意編號,編號可能存在編碼來回切換returnDatabase = convertToUTF8(returnDatabase);文章來源地址http://www.zghlxwxcb.cn/news/detail-755065.html

package com.ankang.hospital.utils;

import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.hc.client5.http.classic.methods.HttpPost;
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse;
import org.apache.hc.client5.http.impl.classic.HttpClientBuilder;
import org.apache.hc.core5.http.HttpEntity;
import org.apache.hc.core5.http.io.entity.EntityUtils;
import org.apache.hc.core5.http.io.entity.StringEntity;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.*;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Slf4j
public class HttpClientUtil {

    private static final Logger logger = LoggerFactory.getLogger(HttpClientUtil.class);

    /**
     * HttpClient 調(diào)用 WebService
     *
     * @param wsUrl   webService地址,格式:http://ip:port/xxx/xxx/soap?wsdl
     * @param StrDate 格式的入?yún)trDate=2023/08/02
     * @return
     */
    public static String callServiceHC(String wsUrl, String StrDate) {
        String xml = createSoapContent(StrDate);
        String returnDatabase = doPostSoap(wsUrl, xml, "");//urn:hl7-org:v3/ZDYFWTYRK

        // 強(qiáng)制將返回結(jié)果轉(zhuǎn)換為 UTF-8 編碼
        returnDatabase = convertToUTF8(returnDatabase);

        return returnDatabase;
    }

    /**
     * 強(qiáng)制轉(zhuǎn)換整utp-8
     * @param input
     * @return
     */
    public static String convertToUTF8(String input) {
        try {
            byte[] utf8Bytes = input.getBytes(StandardCharsets.UTF_8);
            return new String(utf8Bytes, StandardCharsets.UTF_8);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return input; // 返回原始字符串,如果轉(zhuǎn)換失敗
    }
    /**
     * 根據(jù)拼接 xml 字符串
     *
     * @param StrDate
     * @return
     */
    public static String createSoapContent(String StrDate) {
        log.info("開始拼接請求報文");
        //開始拼接請求報文
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:urn=\"urn:hl7-org:v3\">\n");
        stringBuilder.append("<soapenv:Header/>");
        stringBuilder.append("<soapenv:Body>");

        stringBuilder.append("<urn:ZDYFWTYRK>");
        stringBuilder.append("<urn:req>");
        //傳參action
        stringBuilder.append("<urn:action>");
        stringBuilder.append("Z1901");
        stringBuilder.append("</urn:action>");
        //傳參rdn
        stringBuilder.append("<urn:rdn>");
        stringBuilder.append("SSXWGYGXT");
        stringBuilder.append("</urn:rdn>");
        //傳參message
        stringBuilder.append("<urn:message><![CDATA[");
        stringBuilder.append("<Request>");
        stringBuilder.append("<operDate>");
        stringBuilder.append(StrDate);
        stringBuilder.append("</operDate>");
        stringBuilder.append("<hoscode>");
        stringBuilder.append("A001");
        stringBuilder.append("</hoscode>");
        stringBuilder.append("</Request>");
        stringBuilder.append("]]></urn:message>");

        stringBuilder.append("</urn:req>");
        stringBuilder.append("</urn:ZDYFWTYRK>");

        stringBuilder.append("</soapenv:Body>");
        stringBuilder.append("</soapenv:Envelope>");

        logger.debug("拼接后的參數(shù)\n" + stringBuilder.toString());

        return stringBuilder.toString();
    }

    /**
     * HTTPClient 調(diào)用 WebService
     *
     * @param url
     * @param soap
     * @param SOAPAction
     * @return
     */
    public static String doPostSoap(String url, String soap, String SOAPAction) {
        //請求體
        String retStr = "";
        // 創(chuàng)建HttpClientBuilder
        HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
        // HttpClient
        CloseableHttpClient closeableHttpClient = httpClientBuilder.build();
        HttpPost httpPost = new HttpPost(url);
        try {
            httpPost.setHeader("Content-Type", "text/xml;charset=UTF-8");
            httpPost.setHeader("SOAPAction", SOAPAction);
            StringEntity data = new StringEntity(soap, Charset.forName("UTF-8"));
            httpPost.setEntity(data);
            CloseableHttpResponse response = closeableHttpClient.execute(httpPost);
            HttpEntity httpEntity = response.getEntity();
            if (httpEntity != null) {
                // 打印響應(yīng)內(nèi)容
                retStr = EntityUtils.toString(httpEntity, "UTF-8");
            }
            // 釋放資源
            closeableHttpClient.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return retStr;
    }


    public static String analyzeResult(String xmlContent) {
        try {
            // 從 xmlContent 字符串解析 XML
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            factory.setNamespaceAware(true); // 啟用命名空間感知
            DocumentBuilder builder = factory.newDocumentBuilder();
            Document doc = builder.parse(new InputSource(new StringReader(xmlContent)));

            // 獲取根元素 (SOAP-ENV:Envelope)
            Element root = doc.getDocumentElement();

            // 獲取 SOAP-ENV:Body 元素
            Element body = null;
            NodeList bodyList = root.getElementsByTagName("SOAP-ENV:Body");
            if (bodyList.getLength() > 0) {
                body = (Element) bodyList.item(0);
            }

            // 獲取帶有 'urn:hl7-org:v3' 命名空間的 ZDYFWTYRKResponse 元素
            Element zdyfwtyrkResponse = (Element) body.getElementsByTagNameNS("urn:hl7-org:v3", "ZDYFWTYRKResponse").item(0);

            Element zdyfwtyrkResult = (Element) zdyfwtyrkResponse.getElementsByTagNameNS("urn:hl7-org:v3", "ZDYFWTYRKResult").item(0);

            // 獲取 ZDYFWTYRKResult 元素中的 CDATA 內(nèi)容(實際的結(jié)果數(shù)據(jù))
            String cdataContent = zdyfwtyrkResult.getTextContent();

            // 處理CDATA中的XML內(nèi)容
            Document cdataDoc = builder.parse(new InputSource(new StringReader(cdataContent)));

            // 將Document轉(zhuǎn)換為不帶BOM的字符串
            String cdataXmlString = convertDocumentToStringWithoutBOM(cdataDoc);

            logger.debug("cdataXmlString結(jié)果: " + cdataXmlString);
            return cdataXmlString;
        } catch (ParserConfigurationException e) {
            // 記錄異常信息到日志
            log.error("XML解析器配置錯誤: " + e.getMessage(), e);
        } catch (IOException e) {
            // 記錄 IOException 異常信息到日志
            log.error("發(fā)生 IO 異常: " + e.getMessage(), e);
        } catch (SAXException e) {
            // 記錄 SAXException 異常信息到日志
            log.error("SAX 解析異常: " + e.getMessage(), e);
        } catch (TransformerException e) {
            log.error("XML的轉(zhuǎn)換、解析和轉(zhuǎn)換錯誤: " + e.getMessage(), e);
        }

        return null;
    }

    /**
     * 將 DOM Document 轉(zhuǎn)換為 UTF-8 無 BOM 格式的字符串。
     *
     * @param doc 要轉(zhuǎn)換的 DOM Document。
     * @return 不帶 BOM 的 UTF-8 字符串表示的文檔。
     */
    private static String convertDocumentToStringWithoutBOM(Document doc) throws TransformerException, UnsupportedEncodingException {
        TransformerFactory transformerFactory = TransformerFactory.newInstance();
        Transformer transformer = transformerFactory.newTransformer();

        // 設(shè)置編碼為 UTF-8 且不帶 BOM
        transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
        transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); // 省略 XML 聲明
        transformer.setOutputProperty(OutputKeys.INDENT, "yes"); // 格式化輸出

        // 創(chuàng)建一個 ByteArrayOutputStream 來保存 XML 內(nèi)容
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        StreamResult result = new StreamResult(new OutputStreamWriter(outputStream, StandardCharsets.UTF_8));

        // 將 Document 轉(zhuǎn)換為不帶 BOM 的字符串
        transformer.transform(new DOMSource(doc), result);

        // 將 ByteArrayOutputStream 轉(zhuǎn)換為字符串
        return outputStream.toString("UTF-8");
    }

    public static List<Map<String, String>> resultMap1(String soapResponse) {
        // 從soapResponse中提取JSON部分
        int startIndex = soapResponse.indexOf("<list>");
        int endIndex = soapResponse.indexOf("</list>");
        String jsonPart = soapResponse.substring(startIndex + "<list>".length(), endIndex);
        // 將JSON轉(zhuǎn)換為Map
        ObjectMapper objectMapper = new ObjectMapper();
        try {
            Map<String, Object> resultMap = objectMapper.readValue(soapResponse, new TypeReference<Map<String, Object>>() {
            });
            ;
            List<Map<String, Object>> resultJsonList = (List<Map<String, Object>>) resultMap.get("resultJson");
            // 轉(zhuǎn)換為 List<Map<String, String>>
            List<Map<String, String>> resultList = new ArrayList();
            for (Map<String, Object> item : resultJsonList) {
                Map<String, String> newMap = new HashMap();
                for (Map.Entry<String, Object> entry : item.entrySet()) {
                    String key = entry.getKey();
                    String value = entry.getValue().toString();
                    newMap.put(key, value);
                }
                // 添加resultCode和resultMsg到轉(zhuǎn)換后的結(jié)果
                newMap.put("resultCode", resultMap.get("resultCode").toString());
                newMap.put("resultMsg", resultMap.get("resultMsg").toString());
                resultList.add(newMap);
            }

            // 輸出轉(zhuǎn)換后的結(jié)果
            for (Map<String, String> item : resultList) {
                System.out.println("resultCode: " + item.get("resultCode"));
                System.out.println("resultMsg: " + item.get("resultMsg"));
                System.out.println("patientName: " + item.get("patientName"));
                System.out.println("opername: " + item.get("opername"));
                System.out.println("operdate: " + item.get("operdate"));
                System.out.println("doctor: " + item.get("doctor"));
            }
            return resultList;
        } catch (IOException e) {
            // 異常處理
            e.printStackTrace();
        }
        return null;
    }

    public static List<Map<String, String>> resultMap(String soapResponse) {
        // 從soapResponse中提取JSON部分
        int startIndex = soapResponse.indexOf("<list>");
        int endIndex = soapResponse.indexOf("</list>");
        String jsonPart = soapResponse.substring(startIndex + "<list>".length(), endIndex);
        // 將JSON轉(zhuǎn)換為Map
        ObjectMapper objectMapper = new ObjectMapper();
        try {
            Map<String, Object> resultMap = objectMapper.readValue(jsonPart, new TypeReference<Map<String, Object>>() {
            });
            List<Map<String, Object>> resultJsonList = (List<Map<String, Object>>) resultMap.get("resultJson");
            // 轉(zhuǎn)換為 List<Map<String, String>>
            List<Map<String, String>> resultList = new ArrayList();
            for (Map<String, Object> item : resultJsonList) {
                Map<String, String> newMap = new HashMap();
                for (Map.Entry<String, Object> entry : item.entrySet()) {
                    String key = entry.getKey();
                    String value = entry.getValue().toString();
                    newMap.put(key, value);
                }
                resultList.add(newMap);
            }

            return resultList;
        } catch (IOException e) {
            // 異常處理
            e.printStackTrace();
        }
        return null;
    }


}

到了這里,關(guān)于Java 調(diào)用 WebService 、java調(diào)用Soap請求、Java對接soap接口的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 理解WebService SOAP、Restful、HTTP(post、get)請求

    Webservice 兩種實現(xiàn)方式(SOAP、Restful)跟HTTP(post/get) 直接請求各個優(yōu)缺點,以及如何判斷選擇使用哪一種。 HTTP-GET和HTTP-POST是 標(biāo)準(zhǔn)協(xié)議 ,他們使用HTTP( 超文本傳輸協(xié)議 )謂詞對參數(shù)進(jìn)行編碼并將參數(shù)作為名稱/值對傳遞,還使用關(guān)聯(lián)的請求語義。每個協(xié)議都包含一系列H

    2024年02月07日
    瀏覽(18)
  • FreeBASIC通過Delphi7 DLL調(diào)用MS SOAP使用VB6 Webservice

    FreeBASIC通過Delphi7 DLL調(diào)用MS SOAP使用VB6 Webservice

    前幾篇筆記習(xí)練了IIS soapis30配置、VB6 webservice創(chuàng)建、Delphi7和VB6 webservice訪問: VB6 COM webservice發(fā)布,VB.NET和Delphi 7 對webservice訪問,及MS Soap Toolkit 3.0在IIS上的ISAPI配置_Mongnewer的博客-CSDN博客 本篇筆記重點編寫 Delphi7 DLL 對MS soap3 進(jìn)行封裝,讓FreeBASIC通過Delphi7的DLL封裝,訪問IIS上的

    2024年02月09日
    瀏覽(22)
  • 第六十五天 API安全-接口安全&WebPack&REST&SOAP&WSDL&WebService

    第六十五天 API安全-接口安全&WebPack&REST&SOAP&WSDL&WebService

    1.HTTP類接口-測評 2.RPC類接口-測評 3.Web Service類-測評 參考鏈接:https://www.jianshu.com/p/e48db27d7c70 內(nèi)容點: SOAP(Simple Object Access Protocol)簡單對象訪問協(xié)議是交換數(shù)據(jù)的一種協(xié)議規(guī)范, 是一種輕量的、簡單的、基于XML(標(biāo)準(zhǔn)通用標(biāo)記語言下的一個子集)的協(xié)議,它被設(shè)計 成在WEB上

    2024年02月22日
    瀏覽(26)
  • 接口漏洞-WebService-wsdl+SOAP-Swagger+HTTP-WebPack

    接口漏洞-WebService-wsdl+SOAP-Swagger+HTTP-WebPack

    什么是接口? ?????? 接口就是位于復(fù)雜系統(tǒng)之上并且能簡化你的任務(wù),它就像一個中間人讓你不需要了解詳細(xì)的所有細(xì)節(jié)。像谷歌搜索系統(tǒng),它提供了搜索接口,簡化了你的搜索任務(wù)。再像用戶登錄頁面,我們只需要調(diào)用我們的登錄接口,我們就可以達(dá)到登錄系統(tǒng)的目的

    2024年02月07日
    瀏覽(22)
  • .NetCore調(diào)用Soap接口

    添加服務(wù)引用的方式無法滿足我請求Soap接口,所以寫了個Soap幫助類,使用HttpClient的方式請求接口。 提示:以下是本篇文章正文內(nèi)容,下面案例可供參考 一條 SOAP 消息就是一個普通的 XML 文檔,包含下列元素: 必需的 Envelope 元素,可把此 XML 文檔標(biāo)識為一條 SOAP 消息 可選的

    2024年02月04日
    瀏覽(15)
  • java請求SAP系統(tǒng),發(fā)起soap的xml報文,實體類轉(zhuǎn)換,idea自動生成教程

    java請求SAP系統(tǒng),發(fā)起soap的xml報文,實體類轉(zhuǎn)換,idea自動生成教程

    1、將接口的網(wǎng)頁地址,右鍵保存,然后修改文件后綴為wsdl文件 2、idea全局搜索 wsdl,找到自動轉(zhuǎn)換javabean插件: 3、點擊后,選擇下載改完后綴的文件(選擇): ? ? ?4、將無用的class文件刪除掉 5、請求sap的地址為:最下邊有兩個地址,http和https的,請求地址為http的,后綴改一

    2024年02月12日
    瀏覽(24)
  • Webservice--HTTP,SOAP協(xié)議區(qū)別

    1.HTTP,SOAP協(xié)議區(qū)別及聯(lián)系 HTTP(Hypertext Transfer Protocol)和SOAP(Simple Object Access Protocol)是 WebService 技術(shù)中的兩個不同協(xié)議,以下區(qū)別和聯(lián)系: 區(qū)別: 技術(shù)目標(biāo): HTTP 是一種用于在客戶端和服務(wù)器之間傳輸超文本的協(xié)議 ,它主要用于 Web 頁面的傳輸和訪問;而 SOAP 是一種用于

    2024年02月02日
    瀏覽(24)
  • 基于SpringBoot 的SOAP WebService實現(xiàn)(二)

    基于SpringBoot 的SOAP WebService實現(xiàn)(二)

    成功啟動springboot應(yīng)用后,使用postman新建POST請求,地址: http://localhost:8080/soap/userManagement ?正文body選擇raw,XML格式。 headers填入如下鍵值對: ?其中xlms字段是 WSDL中的namespace字段。 ? 發(fā)送請求,返回了一個User類 。 至此,webservice SOAP服務(wù)發(fā)布測試成功。 新建客戶端模塊,m

    2024年02月09日
    瀏覽(21)
  • java對接webservice接口的四種方式

    java對接webservice接口的四種方式

    這兩天一直在做外系統(tǒng)對接,對方的接口是webservice的形式,調(diào)用起來有些蛋疼,于是在這里記錄一下我嘗試過的調(diào)用WebService的三種方式。 方式一:以HttpURLConnection的方式調(diào)用 方式二:使用apache-cxf生成java類調(diào)用 下載apache-cxf并配置環(huán)境變量(參照J(rèn)AVA環(huán)境變量配置),配置成

    2024年02月09日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包