私はJerseyClientAPIを次のように使用しています:-
User user = webRsrc.accept(MediaType.APPLICATION_XML).post(User.class, usr);
したがって、JAXB注釈付きクラスであるUserクラスのオブジェクトでの応答を期待しています。ただし、エラーxmlが発生することもあり、そのためにJAXBクラスErrorResponseを作成しました。
問題は、リクエストがUserではなくErrorResponseのオブジェクトを返す場合、どうすればそれを処理できるかということです。
私はこのように試しました-
ClientResponse response=null;
try {
response = webRsrc.accept(MediaType.APPLICATION_XML).post(ClientResponse.class,usr);
User usr = response.getEntity(User.class);
}catch(Exception exp)
{
ErrorResponse err = response.getEntity(ErrorResponse.class);
}
しかし、catchブロックでgetEntity()を使用しようとすると、次の例外がスローされます
[org.xml.sax.SAXParseException: Premature end of file.]
at com.sun.jersey.core.provider.jaxb.AbstractRootElementProvider.readFrom(AbstractRootElementProvider.java:107)
at com.sun.jersey.api.client.ClientResponse.getEntity(ClientResponse.java:532)
at com.sun.jersey.api.client.ClientResponse.getEntity(ClientResponse.java:491) .....
getEntity()を1回呼び出した後、inputstreamが使い果たされたようです。