1

我今天遇到一个奇怪的,它是这样的:

我正在为我的一个 Web 服务设置测试套件,它是用 PHP5 编写的 - 使用SoapFault类等​​。

我使用该类向客户端返回错误消息。例子:

if (!$this->CheckHost(getenv('REMOTE_ADDR')))
{
    return new SoapFault(S_CLIENT, S_STRING_IP, "", S_DETAIL_IP);
}

如果客户端未获得授权,则返回 SoapFault...

现在,如果我在soapUI 3.0.1中添加模式合规性断言,它会告诉我返回的消息不符合它的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 错误消息是:

具有纯元素内容类型的元素“详细信息”不能包含文本内容。

有没有人暗示我做错了什么?

蒂亚

ķ

4

1 回答 1

2

soap 1.1 xml 模式 ( http://schemas.xmlsoap.org/soap/envelope/ ) 将详细元素定义为

   <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

于 2010-02-16T20:27:32.177 回答