JavaとGlassfishを使用してRESTfulWebサービスを開発しています。WebサービスはJSONを消費します。他のjaxbBeanのネストされた配列とともに、いくつかの単純なフィールドを持つJAXBBeanを作成しました。以下に関連するコードを含めました。
Beanに単純なフィールドのみを入力すると、Webサービスは着信Beanを受け入れ、それを処理して適切に返します。
サブBeanのネストされた配列を追加すると、サーバーからステータス400が返されます... getterメソッドに注釈を付ける方法が、サーバーに渡されるときにBean全体に影響を与える可能性があるのではないかと心配しています。
Beanをサーバーにプッシュするために使用しているテスターのコードも追加しました
問題のWebサービスのメソッドシグネチャは次のとおりです。
@POST
@Path( "test1" )
@Consumes( MediaType.APPLICATION_JSON )
public Response createRecord( JAXB_ExampleBean track )
これがトップレベルのBeanです。
@XmlRootElement( name = "example" )
@XmlType( propOrder = { "id", "idCreator", "title", "revList" } )
public class JAXB_ExampleBean
{
private long id = 0;
private long idCreator;
private String title;
private ArrayList<JAXB_ExampleRevBean> revList;
@XmlElementWrapper( name = "exampleList" )
@XmlElement( name = "exampleRevision" )
public ArrayList<JAXB_ExampleRevBean> getRevList()
{
return revList;
}
// other getters/setters omitted for brevity no additional annotations on them
}
ネストされたBeanは次のとおりです。
@XmlRootElement( name = "exampleRevision" )
@XmlType( propOrder = { "id", "idExample", "idAuthor", "revOrder" } )
public class JAXB_ExampleRevBean
{
private long id = 0;
private long idExample;
private long idAuthor;
private int revOrder;
// getters/setters omitted for brevity no additional annotations on them
}
テスターコードは次のとおりです。
WebResource webResource = client.resource( "http://example.com/resources/meta/test1" );
JAXB_ExampleBean beanToUpload = buildExampleBeanToSend();
ClientResponse response = webResource.type( "application/json" ).post( ClientResponse.class, beanToUpload );
if( response.getStatus() != 201 )
throw new RuntimeException( "Failed : HTTP error code : " + response.getStatus() );