Java请求第三方接口XML参数格式

本文介绍了如何在Java中处理第三方接口的XML请求和响应。首先,详细讲解了如何根据接口要求封装XML请求参数,然后阐述了发送HTTP请求到指定URL的方法。接着,讨论了如何解析接收到的XML响应数据,特别是从XML中提取JSON数据的技巧。最后,提到了两个实用工具类:sendMsgXml和getNodeValue,它们在处理XML交互过程中起到关键作用。
摘要由CSDN通过智能技术生成


第三方接口请求XML

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.example.org/Ec/">
	<SOAP-ENV:Body>
		<ns1:callService>			
			<paramsJson>{json}</paramsJson>
			<appToken>appToken</appToken>
			<appKey>appKey</appKey>
			<service>{service}</service>
		</ns1:callService>
	</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

封装请求参数

根据第三方接口提示进行拼接xml参数。

	/**
     * 获取请求的json的参数
     *
     * @param shipmentTmsDTO
     * @return String
     */
    private String getJsonShipmentTmsDTO(ShipmentTmsDTO shipmentTmsDTO) {
        String jsonShipmentTmsDTO = JsonTools.objectToJson(shipmentTmsDTO);
        String jsonShipmentTmsDtoParam = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
                "<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ns1=\"http://www.example.org/Ec/\">" +
                "<SOAP-ENV:Body>" +
                "<ns1:callService>" +
                "<paramsJson>" +
                jsonShipmentTmsDTO +
                "</paramsJson>" +
                "<appToken>******</appToken>" +
                "<appKey>******</appKey>" +
                "<service>createOrder</service> " +
                "</ns1:callService>" +
                "</SOAP-ENV:Body>" +
                "</SOAP-ENV:Envelope>";
        return jsonShipmentTmsDtoParam;
    }

发送请求

String shipmentTmsDtoString = getJsonShipmentTmsDTO(shipmentTmsDTO);
String returnMsg = HttpsUtils.sendMsgXml(PUSH_SHIPMENT_TO_TMS_URL, shipmentTmsDtoString);

PUSH_SHIPMENT_TO_TMS_URL 为推送的第三方接口URL

第三方接口响应XML

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.example.org/Ec/">
	<SOAP-ENV:Body>
		<ns1:callServiceResponse>			
		<response>{json}</response>
		</ns1:callServiceResponse>
	</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

解析第三方接口返回的XML数据

通过节点获取XML中的json数据

// String ————》XML
Document doc = XmlUtil.StringTOXml(returnMsg);
String nodePath = "/Envelope/Body/callServiceResponse/response";
// getNodeValue
String nodeValue = XmlUtil.getNodeValue(doc, nodePath);

工具类(sendMsgXml,getNodeValue)

	/**
     *
     * @param urlStr  接口地址
     * @param xmlInfo   xml格式参数数据
     * @return
     */
    public static String sendMsgXml(String urlStr, String xmlInfo) {
        StringBuffer buffer = new StringBuffer();
        try {
            URL url = new URL(urlStr);
            URLConnection con = url.openConnection();
            con.setDoOutput(true);
            OutputStreamWriter out = new OutputStreamWriter(con.getOutputStream(), "utf-8");
            out.write(xmlInfo);
            out.flush();
            out.close();
            BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(), "utf-8"));
            String line = "";
            for (line = br.readLine(); line != null; line = br.readLine()) {
                buffer.append(line);
            }
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return buffer+"";
    }
    
	/**
     *
     * @param document
     * @return 某个节点的值 前提是需要知道xml格式,知道需要取的节点相对根节点所在位置
     */
    public static String getNodeValue(Document document, String nodePaht) {
        XPathFactory xpfactory = XPathFactory.newInstance();
        XPath path = xpfactory.newXPath();
        String servInitrBrch = "";
        try {
            servInitrBrch = path.evaluate(nodePaht, document);
        } catch (XPathExpressionException e) {
            e.printStackTrace();
        }
        return servInitrBrch;
    }
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
使用Java进行第三方接口的写入可以通过以下步骤进行: 1. 导入所需的Java库和类。根据第三方接口提供的文档或说明,确定所需的库和类,并将其导入到Java项目中。 2. 建立与接口的连接。使用Java提供的网络编程功能,通过URL连接到第三方接口。可以使用`java.net.URL`类来创建URL对象,并使用`openConnection()`方法打开连接。 3. 设置请求参数。根据接口要求,设置请求参数。这可能包括请求方法(GET、POST、PUT等)、请求头、请求体等。可以使用`setRequestMethod()`方法设置请求方法,使用`setRequestProperty()`方法设置请求头,使用`setDoOutput(true)`方法启用输出流等。 4. 发送请求并获取响应。通过连接对象的输出流,将请求参数发送给接口。然后,通过连接对象的输入流,获取接口返回的响应数据。可以使用`getOutputStream()`方法获取输出流,并使用`write()`方法将数据写入输出流;同时,使用`getInputStream()`方法获取输入流,并使用`read()`方法读取输入流中的数据。 5. 解析和处理响应。根据接口返回的响应格式(例如JSON、XML等),使用相应的解析库对响应进行解析。然后,根据解析结果进行相应的处理和操作。 6. 关闭连接和释放资源。在完成请求和响应处理后,关闭连接并释放相关资源。可以使用`disconnect()`方法关闭连接。 需要注意的是,具体的实现步骤和代码可能因第三方接口的要求而有所不同。因此,根据具体的接口文档或说明,进行相应的调整和修改。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值