通过mule esb转发多部分请求

时间:2015-01-13 17:58:13

标签: xml mule esb multipartform-data endpoint

我正在使用http出站端点来调用需要处理在多部分请求中发送到mule的文件的单独服务。这是一个例子

<http:outbound-endpoint connector-ref="serviceConnector"
                address="http://${serviceHost}:${servicePort}/upload"
                method="POST"
                responseTimeout="${endpointTimeout}"
                mimeType="multipart/form-data">

我遇到的问题是,当调用此服务时,我收到一个FileUploadException,说请求是拒绝的,因为没有找到多部分边界。

我一直在试验这个问题并查看不同的问题,但似乎没有一个问题可以解决这个问题。

Mule ESB and "multipart/form-data"

Mule http:outbound-endpoint + multipart/form-data

https://www.mulesoft.org/jira/browse/MULE-6917

我也试过像这个问题中解释的那样更改连接器:Send file to Mule inbound-endpoint但没有运气。

有什么想法吗?

由于

2 个答案:

答案 0 :(得分:1)

最后,通过创建一个自定义处理器解决了传入请求,将其拆分为多个部分并手动读取部分输入流的字节并将读取的字节设置为附加到消息的数据源,解决了这个问题。代码:

 InputStream in = message.getPayload( InputStream.class );
 MultiPartInputStream multiIn = new MultiPartInputStream( in, contentType, null );
try
    {
        Collection<Part> parts = multiIn.getParts();

        for ( Part part : parts )
        {
           if ( part instanceof MultiPart )
                {
                    is = part.getInputStream();
                    ByteArrayOutputStream buffer = new ByteArrayOutputStream();
                    byte[] isByteArray = new byte[1024];
                    int numberRead;
                    while ( (numberRead = is.read( isByteArray ) ) != -1 ){
                        buffer.write(isByteArray, 0, numberRead);
                    }
                    byte[] bytesRead = buffer.toByteArray();
                    DataHandler attachment = new DataHandler(new ByteArrayDataSource( bytesRead, "application/octet-stream")); 
                    message.addOutboundAttachment( part.getName(), attachment );
                }
         }
   }...handle exceptions etc...

希望这有助于某人!

答案 1 :(得分:0)

你没有足够的流量来确定缺少什么,但乍一看,我说你没有在出境时设置boundary属性请求Content-Type标题。

阅读以下内容以更好地了解multipart/form-data请求的工作方式:http://chxo.com/be2/20050724_93bf.html