java - 没有附件的 SOAPMessage writeTo

标签 java web-services jakarta-ee

我使用 SOAPMessage.writeTo(OutputStream)记录网络服务消息。一个问题是它也写附件。它占用空间并且二进制附件不可读。有什么方法可以记录没有附件的消息,例如 wrapper ?

一定有比这个更好的解决方案。

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: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

最佳答案

实际上有一种方法可能更清洁。

这是我的代码:

// 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了,它只对应Envelope部分。

关于java - 没有附件的 SOAPMessage writeTo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13397861/

相关文章:

java - Amazon Java SDK 与 Jersey 的 REST - 无法验证

c - 限制 Web 应用程序的请求大小

java - Hibernate 禁用查询缓存

java - 如何在java中获取文件内容?

java - 选择句子中的特定单词或短语

php - Arduino UNO、C3300 + PHP 网络服务挑战

python - 无法使用 SOAPpy 调用 Web 服务方法

java - 如何通过AJAX在ActiveMQ中设置TimeToLive参数?

java - 再次执行操作约 4 次时,尝试从结果集大小约为 12000 行填充列表,jvm 耗尽堆内存

java - 部署在 JBOSS 上的 EJB 端点