10장. XML 문서 사용
초록
순수한 XML 페이로드 형식은 services에서 직접 XML 문서를 사용하여 데이터 교환을 허용하여 Cryostat 바인딩에 대한 대안을 제공합니다.
10.1. XML 바인딩 네임스페이스
XML 형식 바인딩을 설명하는 데 사용되는 확장은 네임스페이스 http://cxf.apache.org/bindings/xformat 에 정의됩니다. Apache CXF 툴에서는 접두사 xformat
을 사용하여 XML 바인딩 확장 기능을 나타냅니다. 계약에 다음 행을 추가합니다.
xmlns:xformat="http://cxf.apache.org/bindings/xformat"
10.2. 수동 편집
인터페이스를 순수 XML 페이로드 형식에 매핑하려면 다음을 수행합니다.
- XML 바인딩을 정의하는 확장을 포함하도록 네임스페이스 선언을 추가합니다. “XML 바인딩 네임스페이스”을 참조하십시오.
-
표준 WSDL
바인딩
요소를 계약에 추가하여 XML 바인딩을 유지하고, 바인딩에 고유한이름을
지정하고, 바인딩된 인터페이스를 나타내는 WSDLportType
요소의 이름을 지정합니다. -
xformat:binding
하위 요소를바인딩
요소에 추가하여 메시지가 Cryostat 없이 순수 XML 문서로 처리되고 있는지 확인합니다. -
선택적으로
xformat:binding
요소의rootNode
특성을 유효한 QName으로 설정합니다.rootNode
속성의 영향에 대한 자세한 내용은 “유선에 XML 메시지” 을 참조하십시오. -
바인딩된 인터페이스에 정의된 각 작업에 대해 표준 WSDL
작업
요소를 추가하여 작업 메시지에 대한 바인딩 정보를 유지합니다. 바인딩에 추가된 각 작업에 대해
입력
,출력
및fault
하위 요소를 추가하여 작업에서 사용하는 메시지를 나타냅니다.이러한 요소는 논리 작업의 인터페이스 정의에 정의된 메시지에 해당합니다.
-
선택적으로 유효한
rootNode
특성을 사용하여 바인딩 수준에서rootNode
설정된 rootNode 값을 재정의하는 데 필요한 경우 추가된입력
,출력
및fault
요소에xformat:body
요소를 추가합니다.
메시지 중 하나라도 포함되어 있지 않은 경우(예: void를 반환하는 작업의 출력 메시지)에 대해 rootNode
특성을 설정하여wire에 기록된 메시지가 유효하지만 빈 XML 문서인지 확인해야 합니다.
10.3. 유선에 XML 메시지
인터페이스의 메시지가 XML 문서로 전달되도록 지정하는 경우 message가wire에 기록될 때 유효한 XML 문서를 형성하도록 주의해야 합니다. 또한 XML 문서를 수신하는 비 Apache CXF 참가자가 Apache CXF에서 생성한 메시지를 이해할 수 있도록 해야 합니다.
두 문제를 모두 해결하는 간단한 방법은 글로벌 xformat:binding
요소 또는 개별 메시지의 xformat:body
요소에서 선택적 rootNode
특성을 사용하는 것입니다. rootNode
속성은 Apache CXF에서 생성한 XML 문서의 루트 노드 역할을 하는 요소의 QName을 지정합니다. rootNode
속성이 설정되지 않은 경우 Apache CXF는 doc 스타일 메시지를 사용할 때 메시지 부분의 root 요소 또는 rpc 스타일 메시지를 사용할 때 메시지 부분 이름을 root 요소로 사용하는 요소를 사용합니다.
예를 들어 rootNode
속성이 예 10.1. “유효한 XML 바인딩 메시지” 에 정의된 메시지를 설정하지 않으면 root 요소 lineNumber
를 사용하여 XML 문서가 생성됩니다.
예 10.1. 유효한 XML 바인딩 메시지
<type ... > ... <element name="operatorID" type="xsd:int"/> ... </types> <message name="operator"> <part name="lineNumber" element="ns1:operatorID"/> </message>
한 부분이 있는 메시지의 경우 Apache CXF는 rootNode
속성이 설정되지 않은 경우에도 항상 유효한 XML 문서를 생성합니다. 그러나 예 10.2. “잘못된 XML 바인딩 메시지” 의 메시지는 유효하지 않은 XML 문서를 생성합니다.
예 10.2. 잘못된 XML 바인딩 메시지
<types> ... <element name="pairName" type="xsd:string"/> <element name="entryNum" type="xsd:int"/> ... </types> <message name="matildas"> <part name="dancing" element="ns1:pairName"/> <part name="number" element="ns1:entryNum"/> </message>
XML 바인딩에 지정된 rootNode
속성이 없으면 Apache CXF는 예 10.2. “잘못된 XML 바인딩 메시지” 에 정의된 메시지에 대한 예 10.3. “잘못된 XML 문서” 과 유사한 XML 문서를 생성합니다. 생성된 XML 문서는 pairName
및 entryNum
이라는 두 개의 루트 요소가 있기 때문에 유효하지 않습니다.
예 10.3. 잘못된 XML 문서
<pairName> Fred&Linda </pairName> <entryNum> 123 </entryNum>
rootNode
속성을 설정하면 예 10.4. “rootNode가 설정된 XML 바인딩” Apache CXF에 표시된 대로 지정된 root 요소에서 요소를 래핑합니다. 이 예에서 rootNode
속성은 전체 바인딩에 대해 정의되며 루트 요소의 이름을 렌터로 지정합니다.
예 10.4. rootNode가 설정된 XML 바인딩
<portType name="danceParty"> <operation name="register"> <input message="tns:matildas" name="contestant"/> </operation> </portType> <binding name="matildaXMLBinding" type="tns:dancingMatildas"> <xmlformat:binding rootNode="entrants"/> <operation name="register"> <input name="contestant"/> <output name="entered"/> </binding>
입력 메시지에서 생성된 XML 문서는 예 10.5. “rootNode 특성을 사용하여 생성된 XML 문서” 과 유사합니다. XML 문서에는 이제 하나의 root 요소만 있습니다.
예 10.5. rootNode 특성을 사용하여 생성된 XML 문서
<entrants> <pairName> Fred&Linda <entryNum> 123 </entryNum> </entrants>
10.4. 바인딩의 rootNode 속성 설정 덮어쓰기
각 개별 메시지에 대해 rootNode
특성을 설정하거나 메시지 바인딩 내의 xformat:body
요소를 사용하여 특정 메시지의 전역 설정을 덮어쓸 수도 있습니다. 예를 들어, 예 10.4. “rootNode가 설정된 XML 바인딩” 에 정의된 출력 메시지가 입력 메시지와 다른 루트 요소를 갖도록 하려면 예 10.6. “xformat:body
사용” 에 표시된 대로 바인딩의 root 요소를 덮어쓸 수 있습니다.
예 10.6. xformat:body
사용
<binding name="matildaXMLBinding" type="tns:dancingMatildas"> <xmlformat:binding rootNode="entrants"/> <operation name="register"> <input name="contestant"/> <output name="entered"> <xformat:body rootNode="entryStatus" /> </output> </operation> </binding>