WSDL의 정보를 기반으로 웹 서비스가 SOAP 1.1 또는 1.2를 사용하는지 확인할 수 있습니까?
답변:
SOAP 1.1은 http://schemas.xmlsoap.org/wsdl/soap/ 네임 스페이스를 사용합니다 .
SOAP 1.2는 네임 스페이스 http://schemas.xmlsoap.org/wsdl/soap12/를 사용합니다 .
wsdl은 같은 wsdl에서 soap 1.1 및 soap 1.2에서 동시에 작업을 정의 할 수 있습니다. 이는 soap 1.2 (예 : MTOM)를 필요로하는 새로운 기능을 지원하기 위해 wsdl을 발전시켜야하는 경우에 유용합니다.이 경우 새로운 서비스를 만들 필요가없고 원래 서비스 만 발전시킬 필요가 있습니다.
WSDL에서 Binding 섹션 을 보면 서비스가 soap 1.2를 사용하는 경우 SOAP 바인딩이 명시 적으로 언급되어 있음을 분명히 알 수 있습니다. 아래 샘플을 참조하십시오.
<binding name="EmployeeServiceImplPortBinding" type="tns:EmployeeServiceImpl">
<soap12:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
<operation name="findEmployeeById">
<soap12:operation soapAction=""/>
<input><soap12:body use="literal"/></input>
<output><soap12:body use="literal"/></output>
</operation><operation name="create">
<soap12:operation soapAction=""/>
<input><soap12:body use="literal"/></input>
<output><soap12:body use="literal"/></output>
</operation>
</binding>
웹 서비스가 SOAP 1.1을 사용하는 경우 바인딩 섹션 아래의 WSDL 파일에서 SOAP 버전을 명시 적으로 정의하지 않습니다. 아래 샘플을 참조하십시오.
<binding name="EmployeeServiceImplPortBinding" type="tns:EmployeeServiceImpl">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="rpc"/>
<operation name="findEmployeeById">
<soap:operation soapAction=""/>
<input><soap:body use="literal" namespace="http://jaxb.ws.jax.samples.chathurangaonline.com/"/></input>
<output><soap:body use="literal" namespace="http://jaxb.ws.jax.samples.chathurangaonline.com/"/></output>
</operation><operation name="create">
<soap:operation soapAction=""/>
<input><soap:body use="literal" namespace="http://jaxb.ws.jax.samples.chathurangaonline.com/"/></input>
<output><soap:body use="literal" namespace="http://jaxb.ws.jax.samples.chathurangaonline.com/"/></output>
</operation>
</binding>
SOAP 메시지의 SOAP 버전을 확인하는 방법은 무엇입니까?
그러나 이것은 웹 서비스가 사용하는 SOAP 버전을 결정하는 데 권장되는 방법은 아닙니다. SOAP 메시지의 버전은 다음 방법 중 하나를 사용하여 판별 할 수 있습니다.
1. SOAP 메시지의 네임 스페이스 확인
SOAP 1.1 namespace : http://schemas.xmlsoap.org/soap/envelope
SOAP 1.2 namespace : http://www.w3.org/2003/05/soap-envelope
2. SOAP 메시지의 전송 바인딩 정보 (http 헤더 정보) 확인
SOAP 1.1 : 컨텍스트 유형에 대한 사용자 텍스트 / xml
POST /MyService HTTP/1.1
Content-Type: text/xml; charset="utf-8"
Content-Length: xxx
SOAPAction: "urn:uuid:myaction"
SOAP 1.2 : 컨텍스트 유형에 대한 사용자 애플리케이션 / soap + xml
POST /MyService HTTP/1.1
Content-Type: application/soap+xml; charset="utf-8"
Content-Length: xxx
SOAPAction: "urn:uuid:myaction"
3. SOAP 오류 정보 사용
두 버전 간의 SOAP 오류 메시지 구조가 다릅니다.
soap
1.1 지칭 접두사이다 http://schemas.xmlsoap.org/wsdl/soap/
. soap12
1.2 지칭 접두사이다 http://schemas.xmlsoap.org/wsdl/soap12/
. 접두사 이름이 무엇이든 (짝수 foo
또는 bar
), 어떤 네임 스페이스가 해결되는지 살펴보십시오.
이 페이지를 찾았습니다
http://schemas.xmlsoap.org/wsdl/soap12/soap12WSDL.htm
Soap 1.2는 새 네임 스페이스 http://schemas.xmlsoap.org/wsdl/soap12/를 사용한다고 말합니다 .
이는 'WSDL 1.1 Binding extension for SOAP 1.1'에 있습니다.
예, 일반적으로 WSDL을 기반으로 지원되는 SOAP 버전을 확인할 수 있습니다.
데모 웹 서비스 WSDL을 살펴보십시오 . SOAP 1.2를 지원함을 나타내는 soap12 네임 스페이스에 대한 참조가 있습니다. 이것이 없으면 서비스가 SOAP 1.1 만 지원한다고 가정하면 안전 할 것입니다.
binding-element에서 이것이 SOAP 1.1 HTTP 바인딩에 대한 WSDL 1.1 바인딩임을 알려주는 전송 속성을 찾았습니다.
전의.
<wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>