XMLPOSTリクエストに関しては正常に機能しているAPIがあります。XMLはPost本文で受信され、それに応じて処理されます。これがメソッドのヘッダーです
@POST
@Path ("{"+num+"}/"+STATUS+"."+XML)
@Consumes (MediaType.APPLICATION_XML)
@Produces (MediaType.APPLICATION_XML)
public Response getStatusXML (@PathParam(num) String num,
JAXBElement<OrderStatusRequestType> jaxbOrderStatusRequestType,
@Context UriInfo requestUriInfo,
@Context SecurityContext securityContext){
OrderStatusRequestType orderStatusRequestType = jaxbOrderStatusRequestType.getValue();
return processRequest (num, XML, orderStatusRequestType, securityContext);
}
このWSは、このPOST本体で呼び出されます
<orderStatusRequest>
<vendor>32658</vendor>
<key>232X1</key>
</orderStatusRequest>
そのためのXMLスキーマがあり、この要求は要件に従って正常に機能しています。jaxbObjectを取得し、orderStatusRequestも取得します。ただし、json Webサービスを呼び出そうとすると、nullが発生しますorderStatusRequest
。jsonを消費する別の方法があります。
@POST
@Path ("{"+num+"}/"+STATUS+"."+JSON)
@Consumes (MediaType.APPLICATION_JSON)
@Produces (MediaType.APPLICATION_JSON)
public Response getStatusJSON(@PathParam(num) String num,
JAXBElement<OrderStatusRequestType> jaxbOrderStatusRequestType,
@Context UriInfo requestUriInfo,
@Context SecurityContext securityContext){
OrderStatusRequestType orderStatusRequestType= jaxbOrderStatusRequestType.getValue();
return processRequest (num, JSON, orderStatusRequestType, securityContext);
}
ポストリクエストで次のjsonを送信しています
{"orderStatusRequest":{"vendor":"32658","key":"232X1"}}
jaxbElementでnullオブジェクトを取得します..理由がわかりません。便宜上、これが私のXMLスキーマです
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:complexType name="orderStatusRequestType">
<xs:sequence>
<xs:element name="vendor" type="xs:string" minOccurs="1" maxOccurs="1"/>
<xs:element name="key" type="xs:string" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
<xs:element name="orderStatusRequest" type="orderStatusRequestType"/>
</xs:schema>
クライアントを作成してJSONリクエストを送信しました
ClientResponse clientResponse = service.path("api")
.path("v1")
.path("personal")
.path("orders")
.path(num)
.path("status.json").accept(MediaType.APPLICATION_JSON).post(ClientResponse.class, jaxbOst);
そしてそれは私にエラーステータス415を与えました、すなわちコンテンツタイプはサポートされていません。ただし、2つの変更だけで、つまりstatus.xml
、正常にMediaType.APPLICATION_XML
動作します。
アップデート2:Fiddlerを使用すると、JSONでWebサービスにアクセスできます。しかし、Jerseyは入力POST本文を特定のオブジェクトにマーチしていません。vendor
とkey
フィールドでnullを取得しています。
更新3Fiddler
からJSONを使用できます。JSONは{"vendor":"32658","key":"232X1"}
です。以前、別のオブジェクトの下にラップしていました。しかし、 JerseyClientを使用してリクエストを送信することはできません。私が推測しているのは、XML
投稿しようとしたときにJAXBオブジェクトが提供しているということです。objectFactory.createOderRequestStatus
を使用するときに、XMLではなくJSONに変換されることを確認するにはどうすればよいですか?