Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当XML不可解析时,如何在JBoss EAP 5中捕获JAX-RS异常?_Java_Web Services_Jboss_Jax Rs_Jboss6.x - Fatal编程技术网

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

Java 当XML不可解析时,如何在JBoss EAP 5中捕获JAX-RS异常?,java,web-services,jboss,jax-rs,jboss6.x,Java,Web Services,Jboss,Jax Rs,Jboss6.x,我有一个web服务应用程序(使用JAX-RS)运行在JBoss EAP 5上,前面是Apache。 XML被封送到的我的类如下所示: @XmlRootElement(name = "newRequest") public class NewRequest { @XmlElement(required = false, name = "Guid") public String guid; @XmlElement(required = false, name = "Autho

我有一个web服务应用程序(使用JAX-RS)运行在JBoss EAP 5上,前面是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访问日志中看到请求:

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异常映射器的文章,但以前从未使用过它们,并且不确定它们是否是处理这个问题的正确方法。

是的,您应该使用
异常映射器
来处理这个异常

异常映射器很容易在JAX-RS中创建和配置。您所要做的就是实现
javax.ws.RS.ext.ExceptionMapper
接口,并用
@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.
    }
}

谢谢Greg,但这是我问题的一部分,没有抛出异常,或者至少我看不到异常……我使用的是log4j,jBoss日志中没有任何内容……我知道它不成功的唯一方法是Apache access.log中的400错误。我想JAX-RS代码(在.jar中)中发生了一些事情这一点我不知道。@Mike-我更新了上面的答案。请尝试创建一个异常映射程序来处理org.jboss.resteasy.spi.BadRequestException。上面的示例。
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
    }
}