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


78

WSDL의 정보를 기반으로 웹 서비스가 SOAP 1.1 또는 1.2를 사용하는지 확인할 수 있습니까?

답변:


71

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을 발전시켜야하는 경우에 유용합니다.이 경우 새로운 서비스를 만들 필요가없고 원래 서비스 만 발전시킬 필요가 있습니다.


3
MTOM은 SOAP1.1 사용할 수 있습니다
GregD

40

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


18
답변의 첫 번째 부분은 몇 가지 추가 정보를 사용할 수 있습니다. "soap12"는 네임 스페이스 자체가 아니라 네임 스페이스 접두사입니다. "soap12"접두사가 무엇으로 해석되는지, 어떤 버전의 비누를 지정하는지 확인해야합니다. 누군가 soap12를 접두사로 사용할 수 있지만 soap11 네임 스페이스 URI를 가리킬 수 있습니다.
csadler

감사합니다.
vikingsteve

1
@csadler의 주석은 매우 중요하지만 거기에서도 정확한 네임 스페이스 값이 제공되지 않습니다. 여기 있어요. soap1.1 지칭 접두사이다 http://schemas.xmlsoap.org/wsdl/soap/. soap121.2 지칭 접두사이다 http://schemas.xmlsoap.org/wsdl/soap12/. 접두사 이름이 무엇이든 (짝수 foo또는 bar), 어떤 네임 스페이스가 해결되는지 살펴보십시오.
Wiktor Zychla


4

예, 일반적으로 WSDL을 기반으로 지원되는 SOAP 버전을 확인할 수 있습니다.

데모 웹 서비스 WSDL을 살펴보십시오 . SOAP 1.2를 지원함을 나타내는 soap12 네임 스페이스에 대한 참조가 있습니다. 이것이 없으면 서비스가 SOAP 1.1 만 지원한다고 가정하면 안전 할 것입니다.


soap12 네임 스페이스 참조는 좋은 지표입니다. 그러나 누락 된 경우에도 여전히 SOAP 1.2 웹 서비스 일 수 있습니다. en.wikipedia.org/wiki/Web_Services_Description_Language als 의 예제 WSDL 에는이 참조가 없지만 SOAP 1.2에 일반적인 다른 것을 포함 할 수 있습니까?
mjn 2009-04-10

2

binding-element에서 이것이 SOAP 1.1 HTTP 바인딩에 대한 WSDL 1.1 바인딩임을 알려주는 전송 속성을 찾았습니다.

전의.

<wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.