繁体   English   中英

当XML无法解析时,如何在JBoss EAP 5中捕获JAX-RS异常?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM