java - 在 JAX WS web服务上,如何引发自定义错误?

  显示原文与译文双语对照的内容
0 0

你怎么把一个自定义soap错误在JAX WSWeb服务? 如何指定 faultCode, faultStringdetailsoap错误? 有可能设置的值。 detail为bean,而不是。 String?

请注意,我是使用code first的方式开发。

时间:原作者:2个回答

0 0

使用 @WebFault注释。

可以看到良好范例 Using SOAP Faults并Exceptions在Java JAX WSWeb服务艾本Hewitt上Java

你将看到示例:

@WebFault(name="CheckVerifyFault",
    targetNamespace="http://www.example.com")
public class CheckVerifyFault extends Exception {
    /**
     * Java type that goes as soapenv:Fault detail element.
     */
    private CheckFaultBean faultInfo;
    public CheckVerifyFault(String message, CheckFaultBean faultInfo) {
        super(message);
        this.faultInfo = faultInfo;
    }
    public CheckVerifyFault(String message, CheckFaultBean faultInfo, 
           Throwable cause) {
        super(message, cause);
        this.faultInfo = faultInfo;
    }
    public CheckFaultBean getFaultInfo() {
        return faultInfo;
    }
}

UPDATE

另一种方法是声明 典型 异常在 throws子句。

e .g 。 假设以下是我异常类:

package pkg.ex;
public class FooException extends Exception {
    public FooException(String message, Throwable cause) {
        super(message, cause);
    }
}

和下一个类是服务实现。

package pkg.ws;
import javax.jws.WebService;
import pkg.ex.FooException;
@WebService(serviceName = "FooSvc")
public class FooService {
    public String sayHello(String name) throws FooException {
        if (name.isEmpty()) {
            Throwable t = new IllegalArgumentException("Empty name");
            throw new FooException("There is one error", t);
        }
        return "Hello, " + name;
    }
}

如果我的请求是:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
                  xmlns:ws="http://ws.pkg/">
   <soapenv:Header/>
   <soapenv:Body>
      <ws:sayHello>
         <arg0>Peter</arg0>
      </ws:sayHello>
   </soapenv:Body>
</soapenv:Envelope>

没有问题:

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
   <S:Body>
      <ns2:sayHelloResponse xmlns:ns2="http://ws.pkg/">
         <return>Hello, Peter</return>
      </ns2:sayHelloResponse>
   </S:Body>
</S:Envelope>

可是-

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
                  xmlns:ws="http://ws.pkg/">
   <soapenv:Header/>
   <soapenv:Body>
      <ws:sayHello>
         <arg0></arg0>
      </ws:sayHello>
   </soapenv:Body>
</soapenv:Envelope>

然后。。。

<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>There is one error</faultstring>
         <detail>
            <ns2:FooException xmlns:ns2="http://ws.pkg/">
               <message>There is one error</message>
            </ns2:FooException>
         </detail>
      </S:Fault>
   </S:Body>
</S:Envelope>
原作者:
...