私は CXF 2.3.2 を使用しています。この REST サービスを作成しました。
インターフェース:
@WebMethod
@GET
@Path("/object/{id}")
@Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_XML})
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_XML})
public Response object(@PathParam("id") Long id);
実装:
@Override
public Response object(Long id) {
CompanyVO company = new CompanyVO();
company.setAddress("address");
company.setFantasyName("fantasy name");
company.setFiscalId("fiscalid");
company.setGroups("groups");
return Response.ok().type(MediaType.APPLICATION_XML).entity(company).build();
}
CXF REST クライアントを使用してそのサービスを利用し、Response 内のオブジェクト Entity を InputStream ではなく Java オブジェクトとして取得する必要があります。
ResponseReader クラスを使用して Java クラスをラップし、次のように最初の実装を行いました。
String operation = "/object/{id}";
ResponseReader reader = new ResponseReader();
reader.setEntityClass(CompanyVO.class);
WebClient client = WebClient.create(PATH, Collections.singletonList(reader));
client.path(operation, 12L);
client.accept(MediaType.APPLICATION_XML);
client.type(MediaType.APPLICATION_XML);
//the response's entity object should be this Class.
CompanyVO company = new CompanyVO();
Response response = client.get();
//i get the entity object as a InputStream, but i need a CompanyVO.
//i made this once, but i can't see the difference.
Object entity = response.getEntity();
たぶん、私がサービスを間違えたか、クライアントの設定が悪いのでしょう。あなたの助けが必要です、お願いします!
このサービスは、Spring 3.0.5 を使用して構成されています。
<jaxrs:server id="serviceAdvisorRestServer" address="/rest">
<jaxrs:serviceBeans>
<ref bean="fileService"/>
</jaxrs:serviceBeans>
<jaxrs:extensionMappings>
<entry key="json" value="application/json"/>
<entry key="xml" value="application/xml"/>
<entry key="html" value="text/html"/>
<entry key="pdf" value="application/pdf"></entry>
</jaxrs:extensionMappings>
ありがとう!