PHP SoapFault不兼容soapUI中的WSDL Schema?

时间:2010-02-16 15:07:58

标签: php web-services wsdl soapui

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

我正在为我的网络服务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

ķ

1 个答案:

答案 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