[web-services] WSDL이 웹 서비스의 SOAP 버전 (1.1 또는 1.2)을 나타낼 수 있습니까?

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 오류 메시지 구조가 다릅니다.


답변

이 페이지를 찾았습니다

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"/>


답변