对于我正在处理的项目,我必须处理带附件的xml消息,所谓的多部分消息如下:http://www.w3.org/TR/2000/NOTE-SOAP-attachments-20001211
我的目标是删除附件,只留下xml作为有效负载。
我一直在研究类MuleMessage和DefaultMuleMessage中与附件相关的方法,但我无法使其工作。我希望有人可以告诉我如何让这些方法起作用。
当我从SoapUI发送带有附件的消息时,我可以使用getPayloadForLogging()记录消息,并看到它是一个包含多个Mime边界的多部分消息,如下所示:
------=_Part_9_4557707.1396945202422
Content-Type: text/xml; charset=UTF-8
Content-Transfer-Encoding: 8bit
Content-ID: <rootpart@soapui.org>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://microsoft.com/webservices/">
<soapenv:Header/>
<soapenv:Body>
</soapenv:Body>
</soapenv:Envelope>
------=_Part_9_4557707.1396945202422
Content-Type: image/x-png
Content-Transfer-Encoding: binary
Content-ID: <soapui32.png>
Content-Disposition: attachment; name="soapui32.png"
PNG
xxxxxxx
------=_Part_9_4557707.1396945202422--
我创建了一个自定义变换器:
@Override
public Object transformMessage(MuleMessage message, String outputEncoding)
throws TransformerException {
DefaultMuleMessage newMessage = new DefaultMuleMessage(message);
logger.info("attachments: " + newMessage.getInboundAttachmentNames().toString());
return newMessage;
}
当我通过它传递上述多部分消息时,我从getInboundAttachmentNames()获得一个空集。
当我尝试removeOutboundAttachment(“*”)时,它不会删除附件。
当我尝试使用以下方法创建带附件的邮件时
String payload = TestUtilities.readFile("testdata/test1.xml");
DefaultMuleMessage msg = new DefaultMuleMessage(payload, muleContext);
msg.addOutboundAttachment("plaatje", new File("testdata/test1.png"), "image/png");
MuleMessage reply = client.send("vm://test_01", msg, 5000);
它会创建一条消息,但它没有附件。它不是一个多部分的消息。
我是否错误地使用多部分邮件的附件方法?我做错了吗?
谢谢, 的Jeroen
答案 0 :(得分:0)
当将附件与其关联消息一起接收到流中时,它被视为入站属性
http://www.mulesoft.org/documentation/display/current/Attachment+Transformer+Reference
因此,您应该使用getInboundAttachmentNames
打印附件名称。
更新:
找到this Jira ticket。它仍然没有得到解决,这表明附件方法不适用于Multipart / Related。