首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >手动分析MTOM消息

手动分析MTOM消息
EN

Stack Overflow用户
提问于 2016-05-26 08:33:11
回答 1查看 2.5K关注 0票数 1

下面的mtom响应作为字符串

代码语言:javascript
复制
--uuid:6b6fab3b-c481-4648-9eb5-8690096eb54d
Content-Type: application/xop+xml; charset=UTF-8; type="application/soap+xml";
Content-Transfer-Encoding: binary
Content-ID: <root.message@cxf.apache.org>

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"><soap:Body><ns2:receiveDocumentFileResponse xmlns:ns2="http://webservice.edefter.gib.gov.tr/"><return><fileName>GIB-XXXX-201512-KB-000000.zip</fileName><binaryData><xop:Include xmlns:xop="http://www.w3.org/2004/08/xop/include" href="cid:e5482268-b98e-443c-970a-af6edf52ea25-8729@cxf.apache.org"/></binaryData></return></ns2:receiveDocumentFileResponse></soap:Body></soap:Envelope>
--uuid:6b6fab3b-c481-4648-9eb5-8690096eb54d
Content-Type: application/octet-stream
Content-Transfer-Encoding: binary
Content-ID: <e5482268-b98e-443c-970a-af6edf52ea25-8729@cxf.apache.org>
Content-Disposition: attachment;name="GIB-XXXX-201512-KB-000000.zip"

/***********MTOM Content****************/
--uuid:6b6fab3b-c481-4648-9eb5-8690096eb54d--

我正在使用CXF单元测试代码来解析上述关于xop/mtom parse的内容。

附件总是空的,当执行itr.next();行时,我得到异常java.lang.IndexOutOfBoundsException:索引: 0,大小:0

代码语言:javascript
复制
        InputStream is = null;
        InputStream attIs = null;
        try {
            org.apache.cxf.message.Message cxfMessage = new MessageImpl();
            is = new ByteArrayInputStream(response.getBytes("UTF-8"));
            // FileInputStream fis = new FileInputStream(new File(
            // "D:/wss/gibreturn.txt"));
            // String ct = "multipart/related; type=\"application/xop+xml\"; "
            // + "start=\"<soap.xml@xfire.codehaus.org>\"; "
            // + "start-info=\"text/xml; charset=utf-8\"; "
            // + "boundary=\"----=_Part_4_701508.1145579811786\"";
            cxfMessage.setContent(InputStream.class, is);
            cxfMessage.put(org.apache.cxf.message.Message.CONTENT_TYPE,
                    "application/xop+xml; charset=UTF-8; type=\"application/soap+xml\";");

            AttachmentDeserializer deserializer = new AttachmentDeserializer(
                    cxfMessage);
            deserializer.initializeAttachments();

            InputStream attBody = cxfMessage.getContent(InputStream.class);

            System.out.println(deserializer.toString());
            Collection<org.apache.cxf.message.Attachment> atts = cxfMessage
                    .getAttachments();
            Iterator<org.apache.cxf.message.Attachment> itr = atts.iterator();
            org.apache.cxf.message.Attachment a = itr.next();
            attIs = a.getDataHandler().getInputStream();

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (is != null) {
                try {
                    is.close();
                } catch (Exception e) {

                }
            }
            if (attIs != null) {
                try {
                    is.close();
                } catch (Exception e) {

                }
            }
        }

谢谢你的问候

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-28 20:38:46

我用手动的mime解析来解决这个问题。

代码语言:javascript
复制
public byte[] mimeParser(InputStream isMtm) {
    ByteArrayOutputStream baos = null;
    try {
        MimeMultipart mp = new MimeMultipart(new ByteArrayDataSource(isMtm,
                ct));
        int count = mp.getCount();
        baos = new ByteArrayOutputStream();
        for (int i = 0; i < count; i++) {
            BodyPart bodyPart = mp.getBodyPart(i);
            if (!Part.ATTACHMENT
                    .equalsIgnoreCase(bodyPart.getDisposition())
                    && !StringUtils.isNotBlank(bodyPart.getFileName())) {
                continue; // dealing with attachments only
            }
            bodyPart.writeTo(baos);
        }

        byte[] attachment = baos.toByteArray();
        FileUtils.writeByteArrayToFile(new File("E:/wss/attachment.zip"), attachment);
        return attachment;
    } catch (Exception ex) {
        ex.printStackTrace();
    } finally {
        if (baos != null) {
            try {
                baos.close();
            } catch (Exception ex) {

            }
        }
    }
    return null;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37455584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档