SOAPMessage writeTo without attachment

可紊 提交于 2021-01-27 06:14:05

问题


I use SOAPMessage.writeTo(OutputStream) to log web service messages. A problem is that it also writes attachments. It is space consuming and the binary attachments are not readable . Is there any way how to log the message without attachments, e.g. a wrapper?

There must be a better solution than this one.

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();

A sample message

<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:e677f02c-002a-4c2c-8fd9-a3acdba5ad11@example.jaxws.sun.com"
                    objectName="Smlouva1.jpg" />
            </return>
        </ns2:wsGetObjectByIDResponse>
    </S:Body>
</S:Envelope>
------=_Part_9_-806948376.1352979403086
Content-Type: image/jpeg
Content-ID: <e677f02c-002a-4c2c-8fd9-a3acdba5ad11@example.jaxws.sun.com>
Content-Transfer-Encoding: binary
����\x00JFIF\x00\x00�\x00�\x00\x00��\x00C\x00

回答1:


There's actually a way to do this that is probably cleaner.

Here's my code :

// 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();

Then you can log the xmlString, it corresponds to the Envelope part only.




回答2:


You can use this link to find your answer. http://ws.apache.org/axiom/quickstart-samples.html. Read the section Logging MTOM messages without inlining optimized binary data



来源:https://stackoverflow.com/questions/13397861/soapmessage-writeto-without-attachment

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!