Webservice 服务请求参数xml 嵌套问题/CDATA嵌套

今天在对接某政府服务平台需要使用webservice服务进行对接,参考第三方提供的对接文档,截图如下:

<?xml version="1.0" encoding="UTF-8"?>
<ReqPacket xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
	<Header>
		<requestId>402881ed491324d1014913260a410001(调用方生成)</requestId>
		<from>xxxxx</from>
		<instruct> ProjectCodeService.project.get(调用的接口实例)</instruct>
	</Header>
	<Content>
	<![CDATA[
	<?xml version="1.0" encoding="UTF-8"?>
	<ProjectCodeServiceRequest>
		< formTemplateUID >参数 (对象ID)</ formTemplateUID >
		</ProjectCodeServiceRequest>
	]]>
	</Content>
</ReqPacket>

通过上述调用方参数传递的方式可以看出,这里涉及xml 嵌套/CDATA嵌套

第一步:使用SoapUI 模拟webservice 请求,按照文档要求,进行相关参数传递

 我将文档示列参数,一股脑全部拷贝至soapUI 模拟器中,点击请求得到如右截图的效果。

错误原因:没有正确处理xml 内容嵌套。

第二步:修改请求参数,处理xml内容嵌套/CDATA嵌套

 处理完XML/CDATA嵌套,但是右图还是提示相关错误信息。

造成的错误原因:格式不正确,通过在线xml 检测即可发现xml 文件存在的问题。

XML/CDATA嵌套原因:

在CDATA内部的所有内容都会被解析器忽略。一个 CDATA 部件以"<![CDATA[" 标记开始,以"]]>"标记结束。但是CDATA是不能够嵌套的。

因此CDATA嵌套导致的XML解析错误的问题,参考网上处理方式,解决这个问题只需要将"]]>"替换成"]]]]><![CDATA[>",替换后文本作为CDATA参数传入,将原CDATA识别为多个CDATA,自动连接后返回。

经过在线xml 检测,修改相关xml 文件,最终测试效果:

要向 WebService 发送 XML 格式的请求,需要使用以下步骤: 1. 构建 XML 请求消息体:根据 WebService 的接口文档,构建符合其要求的 XML 请求消息体。 2. 创建 HTTP 连接:使用 HttpClient 或 HttpURLConnection 等库创建 HTTP 连接,设置请求的 URL 和请求方法为 POST。 3. 设置请求头:设置 Content-Type 为 text/xml;charset=UTF-8,表示请求体为 XML 格式。 4. 发送请求:将请求消息体通过 HTTP 连接发送出去。 5. 接收响应:等待 WebService 的响应,解析响应消息体,获取返回的数据。 以下是一个 Java 实现的示例代码: ```java import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; public class WebServiceClient { public static void main(String[] args) throws Exception { // 构建 XML 请求消息体 String requestXml = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ser=\"http://example.com/service/\"><soapenv:Header/><soapenv:Body><ser:getData><arg0>123</arg0></ser:getData></soapenv:Body></soapenv:Envelope>"; // 创建 HTTP 连接 URL url = new URL("http://example.com/service"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("POST"); // 设置请求头 conn.setRequestProperty("Content-Type", "text/xml;charset=UTF-8"); // 发送请求 conn.setDoOutput(true); conn.getOutputStream().write(requestXml.getBytes("UTF-8")); // 接收响应 BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8")); String line; while ((line = reader.readLine()) != null) { System.out.println(line); } reader.close(); } } ``` 注意:以上代码仅作为示例,实际使用时需要根据具体的 WebService 接口文档进行相应的修改。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值