以下是使用GlassFish wadl2java工具
生成的代码示例public com.sun.jersey.api.client.ClientResponse putXmlAsClientResponse(com.client.BedOrder input) {
UriBuilder localUriBuilder = _uriBuilder.clone();
com.sun.jersey.api.client.WebResource resource = _client.resource(localUriBuilder.buildFromMap(_templateAndMatrixParameterValues));
com.sun.jersey.api.client.WebResource.Builder resourceBuilder = resource.getRequestBuilder();
resourceBuilder = resourceBuilder.type("application/xml");
com.sun.jersey.api.client.ClientResponse response;
response = resourceBuilder.method("PUT", com.sun.jersey.api.client.ClientResponse.class, new JAXBElement(new QName("", "bedOrder"), com.client.BedOrder.class, input));
if (response.getStatus()>= 400) {
throw new OrderEntryFapi.WebApplicationExceptionMessage(javax.ws.rs.core.Response.status(response.getClientResponseStatus()).build());
}
return response.getEntity(com.sun.jersey.api.client.ClientResponse.class);
}
每当我使用生成的方法发布或放置方法时抛出UniformInterfaceException
。这样做的原因是每个方法都返回一个ClientResponse对象,该对象应该可以正常工作。但是,在getEntity
204 No Content Status code
而不是返回响应对象本身。
除了手动修改生成的代码,以便如果响应的状态代码202我返回response
而不是response.getEntity(com.sun.jersey.api.client.ClientResponse.class)
我该怎么办?
基本上我希望包含204的特殊情况的所有请求看起来像这样:
if (response.getStatus() == 204) {
return response;
}
答案 0 :(得分:1)
在你的WADL中,定义错误状态以及你期望这些类型的内容。
<wadl:response status="200 204">
<wadl:representation mediaType="application/xml"
element="xs:SuccessResponse" />
</wadl:response>
<wadl:response status="400 401 406 415">
<wadl:representation mediaType="application/xml"
element="xs:ErrorResponse" />
</wadl:response>
这会将生成的代码更改为:
switch (response.getStatus()) {
case 400 :
case 401 :
case 406 :
case 415 :
throw new ErrorResponseException(response, response.getEntity(ErrorResponse.class));
default:
if (!com.sun.jersey.api.client.ClientResponse.class.isAssignableFrom(returnType)) {
if (response.getStatus()>= 400) {
throw new OrderEntryFapi.WebApplicationExceptionMessage(Response.status(response.getClientResponseStatus()).build());
}
}
}