문제

나는 오늘 이상한 것을 발견했다. 그것은 다음과 같이 간다 :

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-File은 나에 의해 작성되었으며 실제 Soapfault 클래스에 대한 설명이 포함되어 있지 않습니다. 필요할까요? Soapfault가 Soap 1.1에서 spezified 되었기 때문에 생각하지 않습니다.

실제 응답은 다음과 같습니다.

<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 오류 메시지는 다음과 같습니다.

요소 전용 콘텐츠 유형의 요소 '세부 사항'에는 텍스트 내용이 없습니다.

누구든지 내가 잘못하고있는 일을 힌트가 있습니까?

티아

케이

도움이 되었습니까?

해결책

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top