PHP SoapFault не соответствует схеме WSDL в SoapUI?
-
20-09-2019 - |
Вопрос
Сегодня я наткнулся на странную статью, она звучит примерно так:
Я настраиваю наборы тестов для управления моим веб-сервисом, который написан на PHP5 с использованием класса Ошибка в мыле среди прочих.
Я использую этот класс для возврата сообщения об ошибке клиентам.Пример:
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 выглядит следующим образом:
Элемент "detail", содержащий только элемент тип контента не может содержать текстовое содержимое.
У кого-нибудь есть намек на то, что я делаю не так?
тиа
K
Решение
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>
...
Надеюсь, это поможет!
с уважением,
/Оле eviware.com