gpt4 book ai didi

java - JAX-WS - 将异常映射到故障

转载 作者:IT老高 更新时间:2023-10-28 21:14:48 25 4
gpt4 key购买 nike

我正在使用 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 是否有类似的东西可用?

最佳答案

您是否尝试使用 @WebFault 注释您的异常? ?另外,你是否实现了 getFaultInfo()

编辑:我意识到我的回答可能不够详细。正如 this thread 中提醒的那样(例如):

The JAX-WS 2.0 specification demands that the exception annotated with @WebFault must have two constructors and one method [getter to obtain the fault information]:

WrapperException(String message, FaultBean faultInfo)
WrapperException(String message, FaultBean faultInfo, Throwable cause)
FaultBean getFaultInfo()

The WrapperException is replaced by the name of the exception, and FaultBean is replaced by the class name that implements the fault bean. The fault bean is a Java bean that contains the information of the fault and is used by the Web service client to know the cause for the fault.

这在 JAX-WS 规范的第 2.5 节故障中有详细说明。你的异常(exception)符合这个吗?可以发一下代码吗?


OP 是对的。根据规范 2.1,第 3.7 节服务特定异常,不需要使用 @WebFault 注释,JAX-WS 可以为与第 2.5 节中描述的模式不匹配的异常动态生成包装器 bean (只需为您希望出现在故障中的信息提供一个 setter/getter )。对于与第 2.5 节中描述的模式匹配的异常(即具有 getFaultInfo 方法和 @WebFault 注释的异常),FaultBean 用作将异常映射到 XML Schema 时输入到 JAXB。

所以上面建议的解决方案(匹配第 2.5 节中描述的模式)只是一种解决方法。包装器 bean 的生成应该只适用于其他异常。而且我不知道为什么这里会失败。

关于java - JAX-WS - 将异常映射到故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2064447/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com