[英]How to catch JAX-RS exceptions in JBoss EAP 5 when XML is unparsable?
我在JBoss EAP 5上运行了一个Web服务应用程序(使用JAX-RS),前面是Apache。 我的XML被封送的类如下所示:
@XmlRootElement(name = "newRequest")
public class NewRequest {
@XmlElement(required = false, name = "Guid")
public String guid;
@XmlElement(required = false, name = "AuthorizedBy")
public String authorizedBy;
}
以及处理请求的实际代码:
@Path("/newrequest")
public class NewResource {
private static final Logger logger = Logger.getLogger(NewResource.class);
@PUT
@Consumes({"application/xml", "application/json"})
@Produces({"application/xml", "application/json"})
public String processNewRequest(@HeaderParam("Authorization") String authorization, NewRequest request) {
...
}
...
}
我在Apache access_log中看到了请求:
10.1.4.55 - qa [26/Jun/2013:13:34:16 -0500] "PUT /rest/newrequest HTTP/1.1" 400 961 "-" "Apache-HttpClient/4.2.1 (java 1.5)" 135807 961
但JBoss日志中没有任何内容。 当我故意将XML中的某些内容拼写错误(使用JMeter发送请求;使用“ nwe”而不是“ new”)时产生了400错误。我有什么办法可以捕捉到此错误,并找出哪个元素是错误的元素我确实阅读过有关JAX-RS异常映射器的信息,但是以前从未使用过它们,并且不确定它们是否是解决此问题的正确方法。
是的,您应该使用ExceptionMapper
处理此ExceptionMapper
。
异常映射器很容易在JAX-RS中创建和配置。 您要做的就是实现javax.ws.rs.ext.ExceptionMapper<T>
接口,并使用@Provider
批注对类进行批注。
@Provider
public class ParseExceptionMapper extends implements ExceptionMapper<{Exception Being Thrown During Parse}>
{
@Override
public Response toResponse({Exception Being Thrown During Parse} exception)
{
//Create a response here.
}
}
编辑:
我假设您使用Resteasy作为您的JAX-RS实现,因为您只提到要在JBoss中进行部署。 并不是真的很重要,因为BadRequestException
在任何符合JAX-RS的实现中。
尝试为org.jboss.resteasy.spi.BadRequestException
创建ExceptionMapper实现。 这是Resteasy在遇到HTTP 400错误时引发的异常。
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.Provider;
import org.jboss.resteasy.spi.BadRequestException;
@Provider
public class BadRequestExceptionMapper implements ExceptionMapper<BadRequestException>
{
@Override
public Response toResponse(BadRequestException exception)
{
//Create Response Here
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.