手动解析MTOM消息

我将mtom响应作为字符串

--uuid:6b6fab3b-c481-4648-9eb5-8690096eb54d Content-Type: application/xop+xml; charset=UTF-8; type="application/soap+xml"; Content-Transfer-Encoding: binary Content-ID:  GIB-XXXX-201512-KB-000000.zip --uuid:6b6fab3b-c481-4648-9eb5-8690096eb54d Content-Type: application/octet-stream Content-Transfer-Encoding: binary Content-ID:  Content-Disposition: attachment;name="GIB-XXXX-201512-KB-000000.zip" /***********MTOM Content****************/ --uuid:6b6fab3b-c481-4648-9eb5-8690096eb54d-- 

我正在使用CXFunit testing代码来解析有关xop / mtom解析的上述内容

附件始终为null并且在执行itr.next()时; 一行,我得到exceptionjava.lang.IndexOutOfBoundsException:索引:0,大小:0

  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=\"\"; " // + "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 atts = cxfMessage .getAttachments(); Iterator 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) { } } } 

谢谢你的问候

我用手动mime解析解决了它

 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; }