Jax-Ws解组错误

我遇到了Jax-Ws的问题,并且在网上搜索了一天之后我发现没有可行的解决方案。 我在当地的jboss eap7上运行我的Soap Ws。

我的wsdl的相关片段如下所示:

      

我的webservice看起来像这样:

 @WebService(name = "TravelTrackerWS") public interface TravelTrackerWSLocal { @WebMethod(operationName = "fillSimpleTravelingDays") public WsAnswer fillSimpleAndTravelingDays( @XmlElement(required = true, nillable = false) @WebParam(name = "SimpleAndTravelingDays") List days) throws InsufficientRightsException; 

}

如果我这样做的请求:

       Z0030UDK 2014-10-31 AU a   

我得到一个Unmarshalling错误,这是正确的,因为’a’是一个字符串而不是长。

     soap:Client Unmarshalling Error: For input string: "a"  

我现在的问题是。 如何捕获Unmarshalling错误,以便我可以抛出一般错误消息而不是解组错误。

我希望有人能帮助我

您可以使用ValidationEventHandler更改错误消息。

例如:

 import javax.xml.bind.ValidationEvent; import javax.xml.bind.helpers.DefaultValidationEventHandler; public class MyValidationEventHandler extends DefaultValidationEventHandler { @Override public boolean handleEvent(ValidationEvent event) { if (event.getSeverity() == ValidationEvent.WARNING) { return super.handleEvent(event); } else { throw new RuntimeException("My custom message"); } } } 

要配置端点以使用此处理程序,您可以添加一个将处理程序插入上下文的拦截器。

 public class ValidationInterceptor extends AbstractPhaseInterceptor { public ValidationInterceptor() { super(Phase.READ); } public void handleMessage(Message message) throws Fault { message.setContextualProperty("jaxb-validation-event-handler", new MyValidationEventHandler()); } } 

最后你的端点如下:

 @WebService(endpointInterface="org.jboss.test.schemavalidation.TestWS") @InInterceptors(classes = {ValidationInterceptor.class}) public class TestWSImpl implements TestWS{ public Integer sum(Integer a, Integer b) { return a + b; } } 

在JBoss 7中,您必须将依赖项添加到cxf:

         

您可以在以下url中看到完整的示例: https : //github.com/fedesierr/schemavalidation-ws