私が知りたいのは、MTOM/XOP SOAPレスポンスを解析する簡単な方法があることです。 問題は、単純なHTTPを使用してSOAPメッセージとjavax.xmlを送信して応答を解析することです。しかし、いくつかのサービスはmulipart /関連で私に応答し、それを解析するためにはるかに複雑なロジックが必要です(パフォーマンスの問題)。 MTOM/XOP SOAPレスポンスを解析するためにapache cxf、apache axiom、その他のライブラリをどうにか利用することができますか?Javaを使用してXOP/MTOM SOAP応答を解析する方法は?
答えて
These unit testsは、CXFを使用してMTOMメッセージから添付ファイルを抽出する方法を示しています。私は、このリンクは、将来的に存在しない場合には試験の一つインライン化されます:あなたのケースでは
private MessageImpl msg;
@Before
public void setUp() throws Exception {
msg = new MessageImpl();
Exchange exchange = new ExchangeImpl();
msg.setExchange(exchange);
}
@Test
public void testDeserializerMtom() throws Exception {
InputStream is = getClass().getResourceAsStream("mimedata");
String ct = "multipart/related; type=\"application/xop+xml\"; "
+ "start=\"<[email protected]>\"; "
+ "start-info=\"text/xml; charset=utf-8\"; "
+ "boundary=\"----=_Part_4_701508.1145579811786\"";
msg.put(Message.CONTENT_TYPE, ct);
msg.setContent(InputStream.class, is);
AttachmentDeserializer deserializer = new AttachmentDeserializer(msg);
deserializer.initializeAttachments();
InputStream attBody = msg.getContent(InputStream.class);
assertTrue(attBody != is);
assertTrue(attBody instanceof DelegatingInputStream);
Collection<Attachment> atts = msg.getAttachments();
assertNotNull(atts);
Iterator<Attachment> itr = atts.iterator();
assertTrue(itr.hasNext());
Attachment a = itr.next();
assertNotNull(a);
InputStream attIs = a.getDataHandler().getInputStream();
// check the cached output stream
ByteArrayOutputStream out = new ByteArrayOutputStream();
IOUtils.copy(attBody, out);
assertTrue(out.toString().startsWith("<env:Envelope"));
// try streaming a character off the wire
assertTrue(attIs.read() == '/');
assertTrue(attIs.read() == '9');
}
は、ct
はレスポンスのコンテンツタイプヘッダから来ます。 "mimedata"
が応答の内容になります。 (また、MTOMの要求を作成する)
私は同じようにしました。ちょうど共有する時間がありません。ご回答ありがとうございます! –
Daniel様、 質問に関連するコンテンツタイプについて教えてください。http://stackoverflow.com/questions/37455584/manually-parse-mtom-message –
CXF、標準javax.mail.internet.MimeMultipartクラスを使用する必要はありませんが仕事をして、それは非常に使いやすいです。
ここでMTOM応答の部分を復号するための非常に簡単なサンプル:
MimeMultipart mp = new MimeMultipart(new ByteArrayDataSource(data, contentType));
int count = mp.getCount();
for (int i = 0; i < count; i++) {
BodyPart bp = mp.getBodyPart(i);
bp.saveFile(filepath + "_" + i);
}
私は同じ問題を持っていたし、あなたが答えを見つけるか@Nicolasアルバート通り
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;
}
- 1. JavaのSOAP応答メッセージからデータを解析する方法
- 2. JavaでXPathを使用して内部参照を使用してSOAP応答を解析する方法
- 3. SOAP応答を解析するNSXMLParser
- 4. DataSetへのSOAP応答の解析
- 5. JavaオブジェクトへのTermVectorComponent応答を解析する方法は?
- 6. Jacksonを使用してJSON配列の応答を解析する方法は?
- 7. PHPとSimpleXMLを使用して名前空間でSOAP XML応答を解析する方法
- 8. AndroidアプリケーションにSOAPリクエストからJSONファイルに応答を解析する方法
- 9. WCFサービスを使用してSOAP応答を実装する方法
- 10. SimpleXMLとxpathによるZimbra SOAP応答の解析
- 11. Blackberry/J2MEでJSON応答を解析する方法は?
- 12. SimpleXMLでSOAP応答を解析できません
- 13. JavaでのJSON応答の解析
- 14. gsonを使ってFreebaseのトピックapiの応答を解析する方法
- 15. Groovy HTTPBuilder SOAP応答が適切に解析されない
- 16. AngularJS:302の応答を解析する方法
- 17. Recurly rubyクライアントからの応答を解析する方法
- 18. jsonの応答を解析する方法android
- 19. 複数のオブジェクトを使用したJSON応答の解析
- 20. HTML応答を解析する - iPhone App
- 21. 空のSOAP応答 - JBoss 4.2、Jaxb2、Java 1.6を使用
- 22. DNS応答の解析
- 23. 解析アトム応答(カレンダーAPI)
- 24. XMLTABLEを使用してSOAPのCDATAセクションを解析する
- 25. Simple XMLを使用してSOAPレスポンスを解析するPHP
- 26. 解析JSON応答問題
- 27. SIM900 ATコマンド応答解析
- 28. アフィリエートAPI応答の解析
- 29. JSONの解析応答
- 30. Javaを使用して部分的なJSON応答を返す方法は?
を解決しましたか? –