PHP SoapFault не соответствует схеме WSDL в soapUI? - PullRequest
0 голосов
/ 16 февраля 2010

Сегодня я столкнулся со странным, он выглядит так:

Я устанавливаю тестовые наборы для 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 itговорит мне, что возвращенное сообщение не соответствует его 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

K

1 Ответ

1 голос
/ 16 февраля 2010

XML-схема soap 1.1 (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

...