Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何扩展用WebFault注释的wsimport生成的异常?_Java_Soap_Annotations_Jbossws - Fatal编程技术网

Java 如何扩展用WebFault注释的wsimport生成的异常?

Java 如何扩展用WebFault注释的wsimport生成的异常?,java,soap,annotations,jbossws,Java,Soap,Annotations,Jbossws,我正在用Java从现有的WSDL构建一个web服务。wsimport工具已生成绑定到服务模式中元素的所有Java类。特别是,故障声明生成以下类: @javax.xml.ws.WebFault(name = "Fault", targetNamespace = "http://my.company.com/service-1") public class ServiceFault extends java.lang.Exception { // constructors and faulI

我正在用Java从现有的WSDL构建一个web服务。
wsimport
工具已生成绑定到服务模式中元素的所有Java类。特别是,故障声明生成以下类:

@javax.xml.ws.WebFault(name = "Fault", targetNamespace = "http://my.company.com/service-1")
public class ServiceFault extends java.lang.Exception {
    // constructors and faulInfo getter
}
现在我想扩展这个类,以便添加更多行为:

public class MyServiceFault extends ServiceFault {
    // some behavior
}
现在,当我从应用程序中抛出
myservicecfault
的实例时,我希望这些错误能够在SOAP应答中正确地序列化为XML。但我得到的是这样的东西:

<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
  <env:Header/>
  <env:Body>
    <env:Fault>
      <faultcode>env:Server</faultcode>
      <faultstring>Some fault string.</faultstring>
    </env:Fault>
  </env:Body>
</env:Envelope>

环境:服务器
一些断层带。
也就是说,我完全缺少faultInfo元素。我的SOAP堆栈将
MyServiceFault
视为任何其他异常,而不是表示服务故障的异常

首先,我认为这是因为
@WebFault
注释没有被
myservicecfault
继承,但在明确添加此注释后,我再次尝试,但没有成功


你知道我做错了什么吗?

无论如何,我是这样实现的

import javax.xml.ws.WebFault;

@WebFault(name = "SomeException")
public class SomeException extends Exception {

    private FaultBean faultInfo;

    public SomeException(String message, FaultBean faultInfo) {
        super(message);
        this.faultInfo = faultInfo;
    }

    public SomeException(String message, FaultBean faultInfo,
            Throwable cause) {
        super(message, cause);
        this.faultInfo = faultInfo;
    }

    public FaultBean getFaultInfo() {
        return faultInfo;
    }
}
这会产生如下结果:

<?xml version="1.0" ?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
  <S:Body>
    <S:Fault xmlns:ns4="http://www.w3.org/2003/05/soap-envelope">
      <faultcode>S:Server</faultcode>
      <faultstring>SomeErrorString</faultstring>
      <detail>
        <ns2:SomeException xmlns:ns2="http://namespace/">
          <message>SomeErrorMessage</message>
        </ns2:SomeException>
      </detail>
    </S:Fault>
  </S:Body>
</S:Envelope>

S:服务器
SomeErrorString
一些错误消息