2012-11-15 2 views
4

SOAPMessage.writeTo(OutputStream)을 사용하여 웹 서비스 메시지를 기록합니다. 문제는 첨부 파일을 씁니다. 공간을 많이 차지하며 이진 첨부 파일을 읽을 수 없습니다. 첨부 파일없이 메시지를 기록하는 방법이 있습니까? 예 : 래퍼?첨부 파일이없는 SOAPMessage writeTo

이보다 더 좋은 해결책이 있어야합니다.

ByteArrayOutputStream out = new ByteArrayOutputStream(); 
message.writeTo(out); 
StringBuilder builder = new StringBuilder(out.toString()); 

int indexOfAttachment = builder.indexOf("------="); 
if (indexOfAttachment != -1) { 
    return builder.substring(0, indexOfAttachment); 
} 

return builder.toString(); 

샘플 메시지

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"> 
    <S:Header /> 
    <S:Body> 
     <ns2:wsGetObjectByIDResponse 
      xmlns:ns2="http://xxx.com/" 
      xmlns:ns3="http://yyy.com/"> 
      <return> 
       <serviceResponse status="OK" />    
       <contentData formatName="jpeg_lres" 
        objectContent="cid:[email protected]" 
        objectName="Smlouva1.jpg" /> 
      </return> 
     </ns2:wsGetObjectByIDResponse> 
    </S:Body> 
</S:Envelope> 
------=_Part_9_-806948376.1352979403086 
Content-Type: image/jpeg 
Content-ID: <[email protected]> 
Content-Transfer-Encoding: binary 
����\x00JFIF\x00\x00�\x00�\x00\x00��\x00C\x00 
+0

그래, 일종의 슬픈 거기에 더 나은 방법은 없습니다 ... – Lyth

답변

2

사실이 방법은 실제로는 더 깨끗합니다. 이 봉투 부분에만 해당,

// Get the Envelope Source 
Source src = message.getSOAPPart().getContent() ; 

// Transform the Source into a StreamResult to get the XML 
Transformer transformer = TransformerFactory.newInstance().newTransformer(); 
transformer.setOutputProperty(OutputKeys.INDENT, "no"); 
StreamResult result = new StreamResult(new StringWriter()); 
transformer.transform(src, result); 
String xmlString = result.getWriter().toString(); 

그런 다음 당신이 xmlString을 기록 할 수 있습니다 :

여기 내 코드입니다.

0

당신은 답을 찾으려면이 링크를 사용할 수 있습니다. http://ws.apache.org/axiom/quickstart-samples.html. 최적화 된 바이너리 데이터를 인라이닝하지 않고 MTOM 메시지 로깅을 읽으십시오.

+0

이진 첨부 파일은 봉투를 따라 와서 내 편집 된 질문을 참조하십시오. – banterCZ

+0

AXIOM과 같은 라이브러리를 사용하여 SOAP 메시지를 작성하고 인쇄 할 수 있습니까? – andunslg

+0

바이너리 데이터를 자르고 싶습니다. 나는 더 나은 SOAPMessage API를 기대했다. – banterCZ

관련 문제