【发布时间】:2013-02-27 18:54:08
【问题描述】:
我正在使用 JAX-WS 创建一个 Web 服务(我正在使用 Java 到 WSDL 方法创建它)。
我无法让我的异常按我的要求工作。
我创建了以下异常类:
@WebFault
public class MyWebServiceException extends SOAPFaultException {
private static final long serialVersionUID = 8234753208722614057L;
protected MyWebServiceException(SOAPFault fault) {
super(fault);
}
protected MyWebServiceException(SOAPFault fault, Throwable throwable) {
this(fault);
super.setStackTrace(throwable.getStackTrace());
}
}
这允许我在我的 SOAP 响应中包含以下内容:
<faultcode>E0010</faultcode>
<faultstring>Invalid Report</faultstring>
<detail>
<ns2:exception class="com.example.web.common.exceptions.MyWebServiceException" note="To disable this feature, set com.sun.xml.ws.fault.SOAPFaultBuilder.disableCaptureStackTrace system property to false" xmlns:ns2="http://jax-ws.dev.java.net/">
<message>Invalid Report</message>
<ns2:stackTrace>
<ns2:frame class="com.example.web.common.exceptions.ExceptionHandler" file="ExceptionHandler.java" line="34" method="getWebException"/>
但是,因为我的异常是扩展 RuntimeException 的 SOAPFaultException,所以它没有被添加到 WSDL,所以当服务的用户生成他们的客户端存根时,不包括异常。
有谁知道如何创建这个异常来给我预期的输出(即包括故障代码和故障字符串),但也出现在 WSDL 中(我猜它需要是一个检查异常)
我搜索了如此高和低以想出我已经拥有的东西!
【问题讨论】:
-
什么是 JAX-WS 运行时?
-
您使用哪个 JAX-WS 实现来构建?
-
wsimport -version JAX-WS RI 2.1.6 in JDK 6 -
我做了类似的解决方案。我对我们所有的服务操作都抛出了一个检查异常,因此我将一个 SOAP 错误元素映射到每个操作。我的异常是一个检查异常,因此当我从我的 WSDL 生成 java 客户端时,它会在代码中定义。如果您真的想引用故障代码和字符串,您可能必须定义一个新类型来定义您的故障代码和故障字符串,并在您的 WSDL 中引用它。
标签: java exception-handling jax-ws