call.invoke 传入xml 报错 前言不允许有内容
时间: 2024-03-21 16:43:17 浏览: 71
这个问题可能是因为你在传入的 XML 字符串中包含了前言部分,而 SOAP 协议的规范要求传输的 XML 消息不能包含前言部分。因此,如果你的 XML 字符串中包含了前言部分,就会导致 `call.invoke()` 方法抛出“前言不允许有内容”的异常。
解决这个问题的方法是,在传入的 XML 字符串中删除前言部分,只发送 SOAP 消息的内容。
例如,如果你要调用一个名为 `getWeather` 的 SOAP Web 服务,并向其传递以下 XML 消息:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:wea="http://www.webserviceX.NET">
<soapenv:Header/>
<soapenv:Body>
<wea:getWeather>
<wea:CityName>Beijing</wea:CityName>
<wea:CountryName>China</wea:CountryName>
</wea:getWeather>
</soapenv:Body>
</soapenv:Envelope>
```
则应该删除前言部分,只保留消息体,如下所示:
```xml
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:wea="http://www.webserviceX.NET">
<soapenv:Header/>
<soapenv:Body>
<wea:getWeather>
<wea:CityName>Beijing</wea:CityName>
<wea:CountryName>China</wea:CountryName>
</wea:getWeather>
</soapenv:Body>
</soapenv:Envelope>
```
然后将删除前言部分后的 XML 字符串传递给 `call.invoke()` 方法即可。
阅读全文