为什么附件方法不适用于Mule中的多部分消息?

时间:2014-04-08 12:40:08

标签: java mule attachment multipart

对于我正在处理的项目,我必须处理带附件的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

1 个答案:

答案 0 :(得分:0)

  

当将附件与其关联消息一起接收到流中时,它被视为入站属性

http://www.mulesoft.org/documentation/display/current/Attachment+Transformer+Reference

因此,您应该使用getInboundAttachmentNames打印附件名称。

更新:

找到this Jira ticket。它仍然没有得到解决,这表明附件方法不适用于Multipart / Related。