使用CXF生成Web Service会生成Exception Exception类

时间:2011-11-28 16:01:00

标签: web-services wsdl cxf wsdl2java

我们有一个Web服务实现,它会抛出自定义SecurityException

public class SecurityException extends Exception {

然后使用maven插件java2ws将服务转换为wsdl。生成的.wsdl文件包含

  <xs:element name="SecurityException" type="tns:SecurityException"/>
  <xs:complexType name="SecurityException">
  ...
  <wsdl:message name="SecurityException">
    <wsdl:part name="SecurityException" element="tns:SecurityException">
    </wsdl:part>
  </wsdl:message>

现在,如果我在.wsdl文件上运行wsdl2java,我会收到 SecurityException 文件:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "SecurityException")
public class SecurityException {


}

SecurityException_Exception 文件:

@WebFault(name = "SecurityException", targetNamespace = "http://service...../")
public class SecurityException_Exception extends Exception {


private ....SecurityException securityException;

public SecurityException_Exception() {
    super();
}

public SecurityException_Exception(String message) {
    super(message);
}

public SecurityException_Exception(String message, Throwable cause) {
    super(message, cause);
}

public SecurityException_Exception(String message, ....SecurityException securityException) {
    super(message);
    this.securityException = securityException;
}

public SecurityException_Exception(String message, ....SecurityException securityException, Throwable cause) {
    super(message, cause);
    this.securityException = securityException;
}

public ....SecurityException getFaultInfo() {
    return this.securityException;
}
}

如何避免不必要的课程?为什么它甚至产生了?为什么不能重新创建旧类呢?

SecurityException extends Exception

(我们正在使用cxf 2.5版,因此我发现googleing的超级类的&lt; 2.3错误似乎不适用)

2 个答案:

答案 0 :(得分:1)

想出来..显然你无法避免帮助类,因为在Web服务中使用时必须包装Exceptions,因为它们不可序列化。

答案 1 :(得分:0)

我正在使用内置maven的jAXB(jaxws-maven-plugin / wsimport目标),但我遇到了同样的问题。 (它生成了BusinessException和BusinessException_Exception)。

我的解决方法是将异常放在另一个命名空间中。所以现在我有两个BusinessException文件,在两个不同的文件夹中生成,一个是另一个以其他参数为例的异常。编译好,没有Exception_Exception丑陋。