Estoy utilizando JAX WS para exponer un servicio web. Algunas de las operaciones de este servicio pueden generar excepciones. No son excepciones de servidor interno, sino más bien excepciones que dependen de los argumentos de entrada de la invocación de operación.JAX-WS - Mapa Excepciones a las fallas
Si especifico que mi operación arroja una excepción personalizada, así:
@WebService
@SOAPBinding(style = Style.RPC, use = Use.LITERAL)
public class MyServiceEndpointImpl implements MyServiceEndpoint {
@WebMethod
public void throwsException throws InvalidInputException;
}
termino con la siguiente StackTrace al ejecutar la aplicación:
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)
Adición @XmlRootEntity
-InvalidInputException
no lo hace resolver el problema.
Si esta no es la forma recomendada de informar fallas sobre los servicios web, ¿hay alguna otra manera mejor? ¿Mis excepciones deben heredar de RuntimeException
y confiar en el transporte para el manejo de errores (es decir, todo terminará envuelto en una excepción SOAPException)? Esperaba algo como Spring-WS 'SoapFaultAnnotationExceptionResolver
. ¿Hay algo similar disponible para JAX-WS?
Quizás debería tener en cuenta que la clase informa como faltante, com.mypackage.ws.services.jaxws.InvalidInputExceptionBean, de hecho no existe. Pero asumí que era natural, que debería generarse como los estados de excepción. – waxwing