【发布时间】:2011-01-05 02:04:48
【问题描述】:
我正在使用 JAX WS 来公开 WebService。该服务的某些操作可能会产生异常。不是内部服务器异常,而是依赖于操作调用的输入参数的异常。
如果我指定我的操作会引发自定义异常,如下所示:
@WebService
@SOAPBinding(style = Style.RPC, use = Use.LITERAL)
public class MyServiceEndpointImpl implements MyServiceEndpoint {
@WebMethod
public void throwsException throws InvalidInputException;
}
在运行应用程序时,我最终得到以下堆栈跟踪:
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)
将@XmlRootEntity 添加到InvalidInputException 并不能解决问题。
如果这不是通过 Web 服务报告故障的推荐方法,那么还有更好的方法吗?我的异常是否应该从RuntimeException 继承并依赖传输来处理错误(即,所有内容最终都将包装在 SOAPException 中)?我希望有像 Spring-WS'SoapFaultAnnotationExceptionResolver 这样的东西。 JAX-WS 是否有类似的东西可用?
【问题讨论】:
-
也许我应该注意到它报告为丢失的类 com.mypackage.ws.services.jaxws.InvalidInputExceptionBean 确实不存在。但我认为这是很自然的,它应该像异常状态一样生成。
标签: java web-services jax-ws