メディア タイプが に設定されている jaxrs サービスへのリクエストを実行しようとしていますmultipart/form-data
。このリクエストには、エンティティのリスト (xml) と画像 (png、バイナリ) が含まれています。BalusC によるこのスレッドで説明されているように、私はリクエストを作成しました。
Wiresharkで検査した後、リクエストは問題ないように見えますが、IPヘッダーのチェックサムが間違っていることを除いて.
ここでの私の大きな問題は、サービス側でマルチパート リクエストを処理する方法です。apache.cxf、resteasy などのライブラリを含めたくありません。頼りたいのは jaxrs api だけです。
リクエストの 2 つの部分には と という名前が付いていますdeliveries
。signature
署名はバイナリとして送信された png 画像ファイルです。配信のリストはxmlから解析する必要があります(エンティティにはxmlrootelement
注釈などが含まれているため、この部分は個別に機能します)。私はこの方法でさまざまな部分を読み込もうとしましたが、これは本当に大穴でした。
@PUT
@Path("signOff")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public void signOffDeliveries(@FormParam("deliveries") List<Delivery> deliveries, @FormParam("signature")File signature) {
//do something with the signature(image) and the list of deliveries.
}
もちろん、これは機能しません。Websphere でリクエストを実行すると 404 http ステータス コードが返され、組み込みの openejb (統合テスト フレームワーク) に対してリクエストを実行すると 415 が返されます。注釈を削除するとFormParam
、リクエストは成功します。
jaxrs API のみを使用して、マルチパート リクエストのさまざまな部分を読み取るにはどうすればよいですか?
編集
わかりましたので、 to を変更し、次のようPUT
にparams に注釈をPOST
追加しました。@Encoding
@POST
@Path("signOff")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public void signOffDeliveries(
@Encoded @FormParam("deliveries") String deliveries,
@Encoded @FormParam("signature") File signature) {
}
Content-Type
xml をテキスト文字列として取得しましたが、ペイロードのこの部分の が に設定されていても、配信のリストに自動的に非整列化することはできませんapplication/xml
。もう 1 つの問題は、受信したファイルの長さが 0 であり、そこからバイトを読み取れないことです。
ここで重要な点が欠けていますか?