JAX-WS – Eccezioni delle mappe ai guasti

Sto usando JAX WS per esporre un WebService. Alcune delle operazioni di questo servizio possono generare eccezioni. Non eccezioni del server interno, ma piuttosto eccezioni che dipendono dagli argomenti di input del richiamo dell’operazione.

Se si specifica che la mia operazione genera un’eccezione personalizzata, in questo modo:

@WebService @SOAPBinding(style = Style.RPC, use = Use.LITERAL) public class MyServiceEndpointImpl implements MyServiceEndpoint { @WebMethod public void throwsException throws InvalidInputException; } 

Finisco con il seguente stacktrace durante l’esecuzione dell’applicazione:

  com.sun.xml.ws.model.RuntimeModelerException: runtime modeler error: Wrapper class com.mypackage.ws.services.jaxws.InvalidInputExceptionBean is not found. Have you run APT to generate them? at com.sun.xml.ws.model.RuntimeModeler.getClass(RuntimeModeler.java:285) at com.sun.xml.ws.model.RuntimeModeler.processExceptions(RuntimeModeler.java:1006) at com.sun.xml.ws.model.RuntimeModeler.processRpcMethod(RuntimeModeler.java:969) at com.sun.xml.ws.model.RuntimeModeler.processMethod(RuntimeModeler.java:546) at com.sun.xml.ws.model.RuntimeModeler.processClass(RuntimeModeler.java:370) at com.sun.xml.ws.model.RuntimeModeler.buildRuntimeModel(RuntimeModeler.java:256) at com.sun.xml.ws.server.EndpointFactory.createSEIModel(EndpointFactory.java:322) at com.sun.xml.ws.server.EndpointFactory.createEndpoint(EndpointFactory.java:188) at com.sun.xml.ws.api.server.WSEndpoint.create(WSEndpoint.java:467) at org.jvnet.jax_ws_commons.spring.SpringService.getObject(SpringService.java:333) at org.jvnet.jax_ws_commons.spring.SpringService.getObject(SpringService.java:45) at org.springframework.beans.factory.support.FactoryBeanRegistrySupport$1.run(FactoryBeanRegistrySupport.java:121) 

L’aggiunta di @XmlRootEntity a InvalidInputException non risolve il problema.

Se questo non è il modo consigliato di segnalare i guasti sui servizi web, allora c’è un modo migliore? Le mie eccezioni dovrebbero ereditare da RuntimeException e fare affidamento sul trasporto per la gestione degli errori (ad esempio, tutto verrà archiviato in una SOAPException)? Speravo in qualcosa come il SoapFaultAnnotationExceptionResolver Spring-WS. C’è qualcosa di simile a tutti disponibile per JAX-WS?