7.2. Cryostat 1.2 메시지에 헤더 추가
7.2.1. 개요
Cryostat 메시지 헤더는 soap12:header
요소를 Cryostat 1.2 메시지에 추가하여 정의됩니다. soap12:header
요소는 바인딩의 입력
,출력
및 fault
요소의 선택적 자식입니다. Cryostat 헤더는 상위 메시지의 일부가 됩니다. Cryostat 헤더는 메시지와 메시지 부분을 지정하여 정의됩니다. 각 Cryostat 헤더는 하나의 메시지 부분만 포함할 수 있지만 필요에 따라 헤더를 많이 삽입할 수 있습니다.
7.2.2. 구문
Cryostat 헤더를 정의하는 구문은 예 7.3. “Cryostat 헤더 구문” 에 표시됩니다.
예 7.3. Cryostat 헤더 구문
<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
속성” 에 설명되어 있습니다.
속성 | 설명 |
---|---|
헤더에 삽입되는 부분이 사용되는 메시지의 정규화된 이름을 지정하는 필수 속성입니다. | |
Cryostat 헤더에 삽입된 메시지 부분의 이름을 지정하는 필수 속성입니다. | |
인코딩 규칙을 사용하여 메시지 부분을 인코딩할지 여부를 지정합니다. | |
메시지를 구성하는 데 사용되는 인코딩 규칙을 지정합니다. | |
|
7.2.3. 본문과 헤더 간에 메시지 분할
message part가 contract의 유효한 메시지 부분이 될 수 있습니다. 이 필드는 parent 메시지의 일부일 수도 있으며, 이 메시지는 Cryostat 본문으로 사용됩니다. 동일한 메시지에서 정보를 두 번 보내지 않을 수 있기 때문에 Cryostat 1.2 바인딩은 Cryostat 본문에 삽입되는 메시지 부분을 지정하는 수단을 제공합니다.
soap12:body
요소에는 공백으로 구분된 부분 목록을 사용하는 선택적 특성인 parts
가 있습니다. 부분이
정의되면 나열된 메시지 부분만 Cryostat 1.2 메시지의 본문에 삽입됩니다. 그런 다음 나머지 부분을 메시지의 헤더에 삽입할 수 있습니다.
상위 메시지의 일부를 사용하여 Cryostat 헤더를 정의하면 Apache CXF가 자동으로 Cryostat 헤더에 채워집니다.
7.2.4. 예
예 7.4. “Cryostat 1.2 Binding with a Cryostat Header” 예 7.1. “시스템 인터페이스 순서 지정” 에 표시된 orderWidgets
서비스의 수정된 버전을 표시합니다. 이 버전은 각 주문에 요청 헤더와 응답에 xsd:base64binary
값이 할당되도록 수정되었습니다. 헤더는 widgetKey
메시지의 keyVal
부분으로 정의됩니다. 이 경우 입력 또는 출력 메시지의 일부가 아니므로 헤더를 생성하기 위해 애플리케이션 논리를 추가해야 합니다.
예 7.4. Cryostat 1.2 Binding with a Cryostat 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. “Cryostat 1.2 Binding with a Cryostat Header” 에 표시된 대로 헤더 값이 입력 및 출력 메시지의 일부가 되도록 예 7.5. “Cryostat 1.2 Binding for orderWidgets with a Cryostat Header” 를 수정할 수 있습니다. 이 경우 keyVal
은 입력 및 출력 메시지의 일부입니다. soap12:body
요소에서 parts
속성은 keyVal
을 본문에 삽입하지 않도록 지정합니다. 그러나 헤더에 삽입됩니다.
예 7.5. Cryostat 1.2 Binding for orderWidgets with a Cryostat 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"/> <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>