Red Hat Training

A Red Hat training course is available for Red Hat Fuse

6.2. SOAP 1.1 바인딩에 SOAP 헤더 추가

6.2.1. 개요

SOAP 헤더는 soap:header 요소를 기본 SOAP 1.1 바인딩에 추가하여 정의됩니다. soap:header 요소는 바인딩의 입력,출력fault 요소의 선택적 자식입니다. SOAP 헤더는 상위 메시지의 일부가 됩니다. SOAP 헤더는 메시지 및 메시지 부분을 지정하여 정의됩니다. 각 SOAP 헤더에는 하나의 메시지 부분만 포함할 수 있지만 필요한 만큼 SOAP 헤더를 삽입할 수 있습니다.

6.2.2. 구문

SOAP 헤더 정의의 구문은 예 6.3. “Header Syntax” 에 표시됩니다. soap:headermessage 속성은 헤더에 삽입되는 메시지의 정규화된 이름입니다. part 속성은 SOAP 헤더에 삽입된 메시지 부분의 이름입니다. SOAP 헤더는 항상 문서 스타일이므로 SOAP 헤더에 삽입된 WSDL 메시지 부분은 요소를 사용하여 정의해야 합니다. 메시지부분 속성을 함께 사용하면 SOAP 헤더에 삽입할 데이터를 완전히 설명합니다.

예 6.3. Header Syntax

<binding name="headwig">
  <soap:binding style="document"
                transport="http://schemas.xmlsoap.org/soap/http"/>
    <operation name="weave">
      <soap:operation soapAction="" style="document"/>
      <input name="grain">
        <soap:body ... />
        <soap:header message="QName" part="partName"/>
      </input>
...
</binding>

필수 메시지부분 속성 외에도 soap:header네임스페이스, 사용, encodingStyle 속성도 지원합니다. 이 속성은 soap:header 에 대해 동일한 기능을 합니다. soap:body.

6.2.3. 본문과 헤더 간 메시지 분할

SOAP 헤더에 삽입된 메시지 부분은 계약의 유효한 메시지 부분일 수 있습니다. SOAP 본문으로 사용되는 상위 메시지의 일부일 수도 있습니다. 동일한 메시지에서 정보를 두 번 보낼 가능성이 낮기 때문에 SOAP 바인딩은 SOAP 본문에 삽입되는 메시지 부분을 지정하기 위한 수단을 제공합니다.

soap:body 요소에는 공백으로 구분된 부분 이름 목록을 사용하는 선택적 속성인 파트가 있습니다. 일부 가 정의되면 나열된 메시지 부분만 SOAP 본문에 삽입됩니다. 그런 다음 나머지 부분을 SOAP 헤더에 삽입할 수 있습니다.

참고

상위 메시지의 일부를 사용하여 SOAP 헤더를 정의할 때 Apache CXF는 자동으로 SOAP 헤더를 채웁니다.

6.2.4. 예제

예 6.4. “SOAP 헤더와의 SOAP 1.1 바인딩” 예 6.1. “시스템 인터페이스 순서” 에 표시된 orderWidgets 서비스의 수정된 버전을 표시합니다. 각 주문에 요청 및 응답의 SOAP 헤더에 배치된 xsd:base64binary 값이 있도록 이 버전이 수정되었습니다. SOAP 헤더는 widgetKey 메시지의 keyVal 파트로 정의됩니다. 이 경우 입력 또는 출력 메시지의 일부가 아니기 때문에 애플리케이션 논리에 SOAP 헤더를 추가해야 합니다.

예 6.4. SOAP 헤더와의 SOAP 1.1 바인딩

<?xml version="1.0" encoding="UTF-8"?>
<definitions name="widgetOrderForm.wsdl"
    targetNamespace="http://widgetVendor.com/widgetOrderForm"
    xmlns="http://schemas.xmlsoap.org/wsdl/"
    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
    xmlns:tns="http://widgetVendor.com/widgetOrderForm"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xsd1="http://widgetVendor.com/types/widgetTypes"
    xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">

<types>
  <schema targetNamespace="http://widgetVendor.com/types/widgetTypes"
           xmlns="http://www.w3.org/2001/XMLSchema"
           xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
    <element name="keyElem" type="xsd:base64Binary"/>
  </schema>
</types>

<message name="widgetOrder">
  <part name="numOrdered" type="xsd:int"/>
</message>
<message name="widgetOrderBill">
  <part name="price" type="xsd:float"/>
</message>
<message name="badSize">
  <part name="numInventory" type="xsd:int"/>
</message>
<message name="widgetKey">
  <part name="keyVal" element="xsd1:keyElem"/>
</message>

<portType name="orderWidgets">
  <operation name="placeWidgetOrder">
    <input message="tns:widgetOrder" name="order"/>
    <output message="tns:widgetOrderBill" name="bill"/>
    <fault message="tns:badSize" name="sizeFault"/>
  </operation>
</portType>

<binding name="orderWidgetsBinding" type="tns:orderWidgets">
  <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
    <operation name="placeWidgetOrder">
      <soap:operation soapAction="" style="document"/>
      <input name="order">
        <soap:body use="literal"/>
        <soap:header message="tns:widgetKey" part="keyVal"/>
      </input>
      <output name="bill">
        <soap:body use="literal"/>
        <soap:header message="tns:widgetKey" part="keyVal"/>
      </output>
      <fault name="sizeFault">
        <soap:body use="literal"/>
      </fault>
  </operation>
</binding>
...
</definitions>

헤더 값이 입력 및 출력 메시지의 일부임을 예 6.4. “SOAP 헤더와의 SOAP 1.1 바인딩” 로 수정할 수도 있습니다.