Java 当XML不可解析时,如何在JBoss EAP 5中捕获JAX-RS异常?
我有一个web服务应用程序(使用JAX-RS)运行在JBoss EAP 5上,前面是Apache。 XML被封送到的我的类如下所示: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
@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
}
}