7.2. SOAP 1.2 메시지에 헤더 추가
7.2.1. 개요
SOAP 메시지 헤더는 soap12:header
요소를 SOAP 1.2 메시지에 추가하여 정의됩니다. soap12:header
요소는 바인딩의 입력
,출력
및 fault
요소의 선택적 자식입니다. SOAP 헤더는 상위 메시지의 일부가 됩니다. SOAP 헤더는 메시지 및 메시지 부분을 지정하여 정의됩니다. 각 SOAP 헤더는 하나의 메시지 부분만 포함할 수 있지만 필요한 만큼의 헤더를 삽입할 수 있습니다.
7.2.2. 구문
SOAP 헤더 정의의 구문은 예 7.3. “Header Syntax” 에 표시됩니다.
예 7.3. Header Syntax
<binding name="headwig"> <soap12:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="weave"> <soap12:operation soapAction="" style="documment"/> <input name="grain"> <soap12:body ... /> <soap12:header message="QName" part="partName" use="literal|encoded" encodingStyle="encodingURI" namespace="namespaceURI" /> </input> ... </binding>
soap12:header
요소의 속성은 표 7.1. “soap12:header
특성s” 에 설명되어 있습니다.
속성 | 설명 |
---|---|
헤더에 삽입되는 메시지의 정규화된 이름을 지정하는 필수 속성입니다. | |
SOAP 헤더에 삽입된 메시지 부분의 이름을 지정하는 필수 속성입니다. | |
인코딩 규칙을 사용하여 메시지 파트를 인코딩할지 여부를 지정합니다. | |
메시지를 구성하는 데 사용되는 인코딩 규칙을 지정합니다. | |
|
7.2.3. 본문과 헤더 간 메시지 분할
SOAP 헤더에 삽입된 메시지 부분은 계약의 유효한 메시지 부분일 수 있습니다. SOAP 본문으로 사용되는 상위 메시지의 일부일 수도 있습니다. 동일한 메시지에서 정보를 두 번 보낼 가능성이 낮기 때문에 SOAP 1.2 바인딩은 SOAP 본문에 삽입되는 메시지 부분을 지정할 수 있는 수단을 제공합니다.
soap12:body
요소에는 공백으로 구분된 부분
이름 목록을 사용하는 선택적 속성인 파트가 있습니다. 부분
도 정의되면 나열된 메시지 부분만 SOAP 1.2 메시지의 본문에 삽입됩니다. 그런 다음 나머지 부분을 메시지의 헤더에 삽입할 수 있습니다.
상위 메시지의 일부를 사용하여 SOAP 헤더를 정의할 때 Apache CXF는 자동으로 SOAP 헤더를 채웁니다.
7.2.4. 예제
예 7.4. “SOAP 1.2 Binding with a SOAP Header” 예 7.1. “시스템 인터페이스 순서” 에 표시된 orderWidgets
서비스의 수정된 버전을 표시합니다. 이 버전은 각 주문에 요청 헤더와 응답에 xsd:base64binary
값이 배치되도록 수정되었습니다. 헤더는 widgetKey
메시지의 keyVal
파트로 정의됩니다. 이 경우 입력 또는 출력 메시지의 일부가 아니기 때문에 헤더를 생성하는 애플리케이션 논리를 추가합니다.
예 7.4. SOAP 1.2 Binding with a SOAP Header
<?xml version="1.0" encoding="UTF-8"?> <definitions name="widgetOrderForm.wsdl" targetNamespace="http://widgetVendor.com/widgetOrderForm" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" 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"> <soap12:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="placeWidgetOrder"> <soap12:operation soapAction="" style="document"/> <input name="order"> <soap12:body use="literal"/> <soap12:header message="tns:widgetKey" part="keyVal"/> </input> <output name="bill"> <soap12:body use="literal"/> <soap12:header message="tns:widgetKey" part="keyVal"/> </output> <fault name="sizeFault"> <soap12:body use="literal"/> </fault> </operation> </binding> ... </definitions>
예 7.4. “SOAP 1.2 Binding with a SOAP Header” 에 표시된 대로 헤더 값이 입력 및 출력 메시지의 일부임을 알 수 있습니다. 예 7.5. “SOAP Header을 사용한 orderWidgets에 대한 SOAP 1.2 Binding” 이 경우 keyVal
은 입력 및 출력 메시지의 일부입니다. soap12:body
요소에서 parts
속성이 keyVal
을 본문에 삽입하지 않도록 지정합니다. 그러나 헤더에 삽입됩니다.
예 7.5. SOAP Header을 사용한 orderWidgets에 대한 SOAP 1.2 Binding
<?xml version="1.0" encoding="UTF-8"?> <definitions name="widgetOrderForm.wsdl" targetNamespace="http://widgetVendor.com/widgetOrderForm" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" 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"/> <part name="keyVal" element="xsd1:keyElem"/> </message> <message name="widgetOrderBill"> <part name="price" type="xsd:float"/> <part name="keyVal" element="xsd1:keyElem"/> </message> <message name="badSize"> <part name="numInventory" type="xsd:int"/> </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"> <soap12:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="placeWidgetOrder"> <soap12:operation soapAction="" style="document"/> <input name="order"> <soap12:body use="literal" parts="numOrdered"/> <soap12:header message="tns:widgetOrder" part="keyVal"/> </input> <output name="bill"> <soap12:body use="literal" parts="bill"/> <soap12:header message="tns:widgetOrderBill" part="keyVal"/> </output> <fault name="sizeFault"> <soap12:body use="literal"/> </fault> </operation> </binding> ... </definitions>