soapui ツールを使用して multipart/mixed を使用するように構成された RESTful サービスをテストしようとしています。
@POST
@Path("requestXmlAndAttachment")
@Consumes({ "multipart/mixed" })
@Produces({ MediaType.APPLICATION_XML })
public ResponseTO processRequestXmlAndAttachment(final com.sun.jersey.multipart.MultiPart multiPartRequest) {
// application logic
}
SOAPUI 内で、REST リソースをセットアップし、2 つのパラメーターを追加しました。最初のファイルは要求 xml を指し、2 番目のファイルはデータを含みます (ドロップダウンからスタイル PLAIN を選択しました)。
File1 file:request.xml
File2 file:datafile.xls
SOAPUI リクエスト エディタ ウィンドウで、メディア タイプに multipart/mixed を選択しました。サーバーにリクエストを送信すると、リクエストにファイルが添付されていることがわかりません。サーバーログで確認できる内容は次のとおりです。
Feb 7, 2013 1:36:58 PM com.sun.jersey.api.container.filter.LoggingFilter filter
INFO: 56 * Server in-bound request
56> POST http://localhost:7001/myservice/requestXmlAndAttachment
56 > Accept-Encoding: gzip,deflate
56 > Content-Type: multipart/mixed
56 > Content-Length: 0
56 > Host: localhost:7001
56 > Connection: Keep-Alive
56 > User-Agent: Apache-HttpClient/4.1.1 (java 1.5)
56 >
ご覧のとおり、Content-Length は 0
です。Java Junit プログラムからこのサービスをテストできました。プログラムの一部を次に示します。
BodyPart bp1 = new BodyPart();
bp1.setEntity(requestXMLString);
bp1.setMediaType(MediaType.APPLICATION_XML_TYPE);
BodyPart bp2 = new BodyPart();
bp2.setContentDisposition(ContentDisposition.type("file").fileName("datafaile.xls").build ());
bp2.setEntity(binaryData1);
bp2.setMediaType(MediaType.APPLICATION_OCTET_STREAM_TYPE);
MultiPart multiPart = new MultiPart().bodyPart(bp1).bodyPart(bp2);
ClientConfig cc = new DefaultClientConfig();
cc.getClasses().add(MultiPartWriter.class);
Client client = Client.create(cc);
WebResource webResource = client.resource ("http://localhost:7001/myservice/requestXmlAndAttachment");
ClientResponse response = webResource.type(new MediaType("multipart", "mixed")).post(ClientResponse.class, multiPart);
また、SOAP UI リクエスト エディター ボックスでメディア タイプを multipart/formdata に変更しようとしましたが (実験のため)、Content-Length = 30654 であり、サーバー ログでファイル コンテンツが読み取られたことを確認できます。
リクエストに http ヘッダー (MIME バージョンなど) を追加することも試しましたが、違いはありませんでした。
SOAPUI を使用せずに単体テストを行うことはできますが、このテストを SOAPUI で動作させることをお勧めします。これは、同じサービスでさまざまなメソッドを実行する soapui で他の多くのテストをセットアップしているためです。
multipart/mixed with attachments をテストするために SOAP UI を使用する方法はありますか?
ご検討いただきありがとうございます。