今天我遇到了一个奇怪的人,它是这样的:
我正在为我的网络服务QAing设置测试套件 用PHP5编写 - 利用班级SoapFault等。
我使用该类将错误消息返回给客户端。例如:
if (!$this->CheckHost(getenv('REMOTE_ADDR')))
{
return new SoapFault(S_CLIENT, S_STRING_IP, "", S_DETAIL_IP);
}
如果客户未经授权,则返回SoapFault ......
现在,如果我在soapUI 3.0.1中添加了一个Schema Compliance断言,它会告诉我 我,返回的消息不符合它的wsdl文件。
WSDL文件由我编写,并且在契约中不包含描述 实际的SoapFault类。那还需要吗?以为不是因为 无论如何,SoapFault都会在Soap 1.1中使用。
实际响应如下:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<SOAP-ENV:Fault>
<faultcode>SOAP-ENV:Client</faultcode>
<faultstring>ERR_102</faultstring>
<faultactor/>
<detail>IP error message</detail>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
soapUI错误消息是:
元素'detail'仅限元素 内容类型不能包含文本内容。
有没有人暗示我做错了什么?
TIA
ķ
答案 0 :(得分:1)
soap 1.1 xml架构(http://schemas.xmlsoap.org/soap/envelope/)将detail元素定义为
<xs:complexType name="detail"><xs:sequence>
<xs:any namespace="##any" minOccurs="0" maxOccurs="unbounded" processContents="lax" />
</xs:sequence>
<xs:anyAttribute namespace="##any" processContents="lax" />
</xs:complexType>
意味着它不能像你的错一样只包含文字。尝试将响应更改为
...
<detail><msg>IP error message</msg></detail>
...
希望这有帮助!
的问候,
/ OLE eviware.com