8장. 첨부 파일과 함께 SOAP를 사용하여 바이너리 데이터 전송
초록
SOAP 첨부 파일은 SOAP 메시지의 일부로 바이너리 데이터를 전송하는 메커니즘을 제공합니다. 첨부 파일과 함께 SOAP를 사용하려면 SOAP 메시지를 MIME 다중 파트 메시지로 정의해야 합니다.
8.1. 개요
SOAP 메시지는 일반적으로 바이너리 데이터를 포함하지 않습니다. 그러나 W3C SOAP 1.1 사양을 사용하면 MIME 다중 파트/관련 메시지를 사용하여 SOAP 메시지에서 바이너리 데이터를 보낼 수 있습니다. 이 기술을 첨부 파일과 함께 SOAP을 사용합니다. SOAP 첨부 파일은 첨부파일을 사용하여 W3C의 SOAP 메시지에 정의되어 있습니다.
8.2. 네임스페이스
MIME 다중 파트/ 관련 메시지를 정의하는 데 사용되는 WSDL 확장 기능은 네임스페이스 http://schemas.xmlsoap.org/wsdl/mime/ 에 정의되어 있습니다.
다음 설명에서는 이 네임스페이스가 mime
이 앞에 있다고 가정합니다. 이를 설정하는 WSDL 정의
요소의 항목은 예 8.1. “계약의 MIME 네임스페이스 사양” 에 표시됩니다.
예 8.1. 계약의 MIME 네임스페이스 사양
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
8.3. 메시지 바인딩 변경
기본 SOAP 바인딩에서 입력
,출력
및 오류
요소의 첫 번째 하위 요소는 데이터를 나타내는 SOAP 메시지의 본문을 설명하는 soap:body
요소입니다. 첨부 파일과 함께 SOAP를 사용하면 soap:body
요소가 mime:multipartRelated
요소로 교체됩니다.
WSDL은 오류
메시지에 대한 mime:multipartRelated
사용을 지원하지 않습니다.
mime:multipartRelated
요소는 Apache CXF에 메시지 본문이 바이너리 데이터를 포함하는 다중 부분 메시지임을 알립니다. 요소의 내용은 메시지 및 해당 콘텐츠의 부분을 정의합니다. MIME:multipartRelated
요소에는 메시지의 개별 부분을 설명하는 하나 이상의 mime:part
요소가 포함되어 있습니다.
첫 번째 mime:part
요소에는 일반적으로 기본 SOAP 바인딩에 표시되는 soap:body
요소가 포함되어야 합니다. 나머지 mime:part
요소는 메시지에서 전송되는 첨부 파일을 정의합니다.
8.4. MIME 다중 부분 메시지 설명
MIME 다중 파트 메시지는 여러 mime:part
요소를 포함하는 mime:multipartRelated
요소를 사용하여 설명합니다. MIME 다중 파트 메시지를 완전히 설명하려면 다음을 수행해야 합니다.
-
MIME 다중 부분으로 보내는
입력
또는출력
메시지 내에mime:mulipartRelated
요소를 enclosing 메시지의 첫 번째 하위 요소로 추가합니다. -
mime:part
하위 요소를mime:multipartRelated
요소에 추가하고name
속성을 고유한 문자열로 설정합니다. soap:body
요소를mime:part
요소의 자식으로 추가하고 해당 속성을 적절하게 설정합니다.참고계약에 기본 SOAP 바인딩이 있는 경우 기본 바인딩에서 MIME multipart 메시지로 해당 메시지의
soap:body
요소를 복사할 수 있습니다.-
다른
mime:part
하위 요소를mime:multipartReleated
요소에 추가하고name
속성을 고유한 문자열로 설정합니다. mime:content
하위 요소를mime:part
요소에 추가하여 메시지의 이 부분의 내용을 설명합니다.MIME 메시지의 내용을 완전히 설명하기 위해
mime:content
요소에는 다음과 같은 속성이 있습니다.표 8.1. MIME:content 속성 속성 description + 바인딩에 배치되는 MIME 다중
파트
메시지의 콘텐츠로 사용되는 상위 메시지 정의에서 WSDL 메시지 파트의 이름을 지정합니다.+
이 메시지 부분에 있는 데이터의 MIME 유형입니다. MIME 유형은 구문 유형
/
하위 유형을 사용하여 type 및sub type 으로 정의됩니다.+
image/jpeg
및text/plain
과 같은 사전 정의된 MIME 유형이 많이 있습니다. MIME 유형은 IANA(Internet Assigned Numbers Authority)에 의해 유지 관리되며, MIME(Multipurpose Internet Mail Extensions)에 자세히 설명되어 있습니다. one: Internet Message Bodies 및 Multipurpose Internet Mail Extensions (MIME) Part two: 미디어 유형.+
- 추가 MIME 부분의 경우 [i303819] 및 [i303821] 단계를 반복합니다.
8.5. 예제
예 8.2. “첨부파일과 함께 SOAP를 사용한 계약” 에서는 JPEG 형식으로 X-ray를 저장하는 서비스를 정의하는 WSDL 조각을 보여줍니다. 이미지 데이터인 xRay
는 xsd:base64binary
로 저장되며 MIME multipart 메시지의 두 번째 파트인 imageData
에 포장되어 있습니다. 입력 메시지의 나머지 두 부분인 patientName
및 patientNumber
는 SOAP 본문의 일부로 MIME 다중 파트 이미지의 첫 번째 부분으로 전송됩니다.
예 8.2. 첨부파일과 함께 SOAP를 사용한 계약
<?xml version="1.0" encoding="UTF-8"?> <definitions name="XrayStorage" targetNamespace="http://mediStor.org/x-rays" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://mediStor.org/x-rays" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <message name="storRequest"> <part name="patientName" type="xsd:string"/> <part name="patientNumber" type="xsd:int"/> <part name="xRay" type="xsd:base64Binary"/> </message> <message name="storResponse"> <part name="success" type="xsd:boolean"/> </message> <portType name="xRayStorage"> <operation name="store"> <input message="tns:storRequest" name="storRequest"/> <output message="tns:storResponse" name="storResponse"/> </operation> </portType> <binding name="xRayStorageBinding" type="tns:xRayStorage"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="store"> <soap:operation soapAction="" style="document"/> <input name="storRequest"> <mime:multipartRelated> <mime:part name="bodyPart"> <soap:body use="literal"/> </mime:part> <mime:part name="imageData"> <mime:content part="xRay" type="image/jpeg"/> </mime:part> </mime:multipartRelated> </input> <output name="storResponse"> <soap:body use="literal"/> </output> </operation> </binding> <service name="xRayStorageService"> <port binding="tns:xRayStorageBinding" name="xRayStoragePort"> <soap:address location="http://localhost:9000"/> </port> </service> </definitions>