2012-04-01 2 views
4

SOAP 메시지로 이진 데이터를 처리하는 방법을 조사했습니다. 클라이언트와 서비스를 모두 개발하고 있으므로 어느 프레임 워크를 선택할 지 선택할 수 있습니다. 유일한 제약 조건은 서비스 끝이 이미 설계되었으며 Spring-WS를 기반으로한다는 것입니다. SOAP 메시지 (base64Binary 인)에서 64 기수로 인라인 첨부 파일을 보내는SOAP로 이진 데이터 처리

  • :

    이 구글에서 보면, 그것은 세 가지 옵션이있는 것처럼 보인다.

  • SOAP 메시지 외부에서 첨부 파일을 보내는 중입니다. 예 : 첨부 파일 (SWA)에 대한 참조와 함께
  • 메시지 외부에 첨부 파일을 보내지 만 메시지 (MTOM)에 포함 된 것처럼 보이게합니다.

질문

  • 그들이 첨부 파일이 SOAP 메시지의 외부에있는 것을 말할 때 정확히 무엇을 의미합니까? 나는 아마도 첨부 파일이 다른 TCP 패키지로 보내 졌다고 생각하지만 내가 틀렸다고 생각하니?

  • 위의 옵션 중 Spring Framework의 Spring-WS 프레임 워크에서 가장 잘 작동하는 옵션은 무엇입니까?

  • 위의 옵션 중 어느 것이 전송 중에 2 진 콘텐츠를 인코딩하는지 명확하지 않습니다. 여기에 설명 된 바이너리 MIME은 무엇입니까? http://www.crosschecknet.com/intro_to_mtom.php? 전송 중에 바이너리 데이터가 여전히 텍스트로 변환 되었습니까?

  • SWA를 사용할 때 데이터의 형식은 무엇입니까?

+0

캔트 당신에게 완전한 대답을하지만,이 링크는 도움이 될 것입니다 : HTTP : //wso2.org/library/1148합니다. 색깔있는 도표를 부분적으로 아래로보십시오. 비누 텍스트가 하나의 파트로 나타나며 "Id"로 이진 파트를 참조하는 MIME 다중 파트 메시지입니다. 바이너리의 base64 인코딩은 필요하지 않습니다. 이 방법은 상당히 널리 퍼져 있으며 HTTP 표준이기 때문에 soap조차도 없다. – davidfrancis

+0

... Cont ... 또는 웹 서비스마다 다르므로 프레임 워크가 지원하지 않으면 놀랄 것이다. GL HTH – davidfrancis

+0

mtom은 mime multi 부분 메시지로 기본 64 enc 데이터를 투명하게 변환하는 것처럼 보이므로 테마를 변형 한 것입니다! – davidfrancis

답변

4

그들은 첨부 파일이 외부 SOAP 메시지라고 말할 때, 정확히 무엇을 의미합니까? 나는 아마도 첨부 파일이 다른 TCP 패키지로 보내 졌다고 생각하지만 내가 틀렸다고 생각하니?

첫 번째 옵션과 달리 첨부 파일은 실제 SOAP 메시지 페이로드가 아니며 대신 SOAP 문서 내에서 참조됩니다. MTOM과 SWA의 차이는 참조 된 파일의 위치입니다. MTOM의 경우 응답에 포함되지만 SWA에서는 예를 들어 웹에서 리소스에 대한 링크를 얻을 수 있습니다.

MTOM

Content-type: multipart/related; 
type="application/xop+xml"; 
start-info="text/xml" 

--uuid:c73c9ce8-6e02-40ce-9f68-064e18843428 
Content-Type: application/xop+xml;charset=utf-8;type="text/xml" 
Content-Transfer-Encoding: binary 

<?xml version="1.0" ?> 
    <S:Envelope xmlns:S="..."> 
    <S:Body> 
     <ns2:downloadImageResponse xmlns:ns2="..."> 
     <return> 
      <xop:Include xmlns:xop="http://www.w3.org/2004/08/xop/include" 
     href="cid:[email protected]"> 
      </xop:Include> 
     </return> 
     </ns2:downloadImageResponse> 
    </S:Body> 
    </S:Envelope> 
--uuid:c73c9ce8-6e02-40ce-9f68-064e18843428 
Content-Id: <[email protected]> 
Content-Type: image/png 
Content-Transfer-Encoding: binary 

SWA (단지 참조)

Content-Type: application/xml;charset=utf-8; 

<?xml version="1.0" ?> 
    <S:Envelope xmlns:S="..."> 
    <S:Body> 
     <ns2:downloadImageResponse xmlns:ns2="..."> 
     <return> 
      https://server.com/downloadImagehere.png 
     </return> 
     </ns2:downloadImageResponse> 
    </S:Body> 
    </S:Envelope> 

인라인 (유형 XOP + XML 하나 개 답변 모두)이 3 최소 예가 아래와

Content-Type: application/xml;charset=utf-8; <?xml version="1.0" ?> <S:Envelope xmlns:S="..."> <S:Body> <ns2:downloadImageResponse xmlns:ns2="..."> <return> YTM0NZomIz...potentiallyLargeBase64encodedFileGoesInHere...I2OTsmIzM0NTueYQ== </return> </ns2:downloadImageResponse> </S:Body> </S:Envelope> 

위의 옵션 중 Spring Framework의 Spring-WS 프레임 워크에서 가장 잘 작동하는 것이 무엇입니까?

이들은 모두 지원되며 사용할 케이스는 사용 케이스에 따라 조금씩 다릅니다. 필자의 연구에 따르면 MTOM이 사실상의 표준으로 보인다. 나에게 따르면 큰 또는 여러 파일 첨부 파일이있는 경우 특히 유용합니다. 논리적 구성 요소에 메시지를 분할하기 때문에 이진 데이터를 효율적으로 처리 할 수있는 더 많은 옵션을 파서에 제공 할 수 있습니다.

그러나 작은 데이터의 경우 표준 SOAP 프로토콜의 일부이며 메시지에 직접 포함 된 인코딩 된 바이트 배열을 직접 사용하므로 리소스를 포함하기 위해 이동해야합니다. 이식성/호환성이 중요한 경우 선택할 수있는 방법이 될 수 있습니다.

분명히 독자가 직접 참조를 처리해야합니다. 원하는 참조가 될 수도 있고 그렇지 않을 수도 있습니다.

위의 옵션 중 어느 것이 전송 중에 2 진 콘텐츠를 인코딩하는지 명확하지 않습니다. 여기에 설명 된 바이너리 MIME은 무엇입니까? http://www.crosschecknet.com/intro_to_mtom.php? 전송 중에 바이너리 데이터가 여전히 텍스트로 변환 되었습니까?

MTOM과 인라인은 모두 파일을 Base64 인코딩 된 문자열로 인코딩합니다. 외부 링크의 경우 관련이 없습니다.

SWA를 사용할 때 데이터 형식은 무엇입니까?

Base64encoded 바이트 배열