Java jersey webservices中使用JAXB的xml语法无效
我正在使用jersey web服务,它将POST请求作为xml使用,并将响应作为xml生成。 我正在使用JAXB将xml封送/解组到JavaBean中。这里的“TestCall”是一个存储请求中指定的所有属性的类,但如果请求中的XML格式不正确(即缺少结束标记),我需要在响应XML中返回错误代码。那么如何处理这些情况呢 这是我的密码:Java jersey webservices中使用JAXB的xml语法无效,java,xml,web-services,rest,jaxb,Java,Xml,Web Services,Rest,Jaxb,我正在使用jersey web服务,它将POST请求作为xml使用,并将响应作为xml生成。 我正在使用JAXB将xml封送/解组到JavaBean中。这里的“TestCall”是一个存储请求中指定的所有属性的类,但如果请求中的XML格式不正确(即缺少结束标记),我需要在响应XML中返回错误代码。那么如何处理这些情况呢 这是我的密码: @POST @Consumes(MediaType.APPLICATION_XML) @Produces(MediaType.APPLICATION_XML)
@POST
@Consumes(MediaType.APPLICATION_XML)
@Produces(MediaType.APPLICATION_XML)
@Path("/testCall")
@Override
public TestCallOutput postCall(TestCall testCall)
return myService.acceptCallData(testCall);
}
我使用以下两个类封送xml:
import javax.xml.bind.annotation.XmlRegistry;
@XmlRegistry
public class ObjectFactory {
/**
* Create a new ObjectFactory that can be used to create new instances of schema
*
*/
public ObjectFactory() {
}
/**
* Create an instance of {@link TestCall }
*
*/
public Ivrcall createTestcall() {
return new Testcall();
}
}
及
我需要返回xml格式的响应,如下所示:
错误
0001
无效的XML文档
堆栈应通过向客户端返回500个错误来为您处理此问题。你不需要做任何工作
编辑:如果您坚持要实现这一点(如果我是您,我会推回,除非您需要符合现有接口),您应该添加JAX-WS处理程序(
javax.xml.WS.handler.handler
)并重写handleFault
,以检查JAX-WS在无法解组传入消息时引发的特定异常。然后在处理程序中创建响应XML。显示用于解组可能具有无效XML语法的XML的代码。我已在实际查询中提供了代码。我需要像这样返回响应-错误0001无效XML文档也在寻找答案。客户端将收到的不是500个错误代码,而是400个错误请求
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
})
@XmlRootElement(name = "testcall")
public class TestCall {
/** The method. */
@XmlElement(required = true)
protected String method;
/** The dateref. */
@XmlElement(required = true)
protected String dateref;
/** The timeref. */
@XmlElement(required = true)
protected String timeref;
/** Getters and Setters of elements
... */
}