gpt4 book ai didi

java - JAX-WS Soap 故障未出现在 WSDL 中

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:22:40 28 4
gpt4 key购买 nike

我正在使用 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"/>

但是,因为我的异常是扩展 RuntimeExceptionSOAPFaultException,所以它没有被添加到 WSDL,所以当服务的用户生成他们的客户端时,异常会 stub 不包括在内。

有谁知道如何创建这个异常来给我预期的输出(即包括故障代码和故障字符串)但也出现在 WSDL 中(我想它需要是一个检查的异常)

我到处搜索,想出我已经拥有的东西!

最佳答案

如果您声明您的 WebMethod 抛出 MyWebServiceException,它将出现在 WSDL 上。

但您可能不应该弄乱 SOAPFault 代码。如果您创建业务异常并抛出它,您可以在客户端中获取错误代码,而不会弄乱 soap 内部结构。

您的网络方法看起来像:

@WebMethod
public String sayHello(@WebParam String name, @WebParam String thing) throws MyException
{
// TODO Auto-generated method stub
if ("err".equals(name))
throw new MyException("E0010","Report not found");
return null;
}

您的业务异常:

public class MyException extends Exception {

private static final long serialVersionUID = -923394585528818428L;
public MyException(String errorCode,String errorMessage)
{
this.errorCode = errorCode;
this.errorMessage = errorMessage;
}

public String getErrorCode() {
return errorCode;
}
public void setErrorCode(String errorCode) {
this.errorCode = errorCode;
}
public String getErrorMessage() {
return errorMessage;
}
public void setErrorMessage(String errorMessage) {
this.errorMessage = errorMessage;
}
String errorCode;
String errorMessage;

}

返回一个异常将是:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<soap:Fault>
<faultcode>soap:Server</faultcode>
<faultstring>Fault occurred while processing.</faultstring>
<detail>
<ns1:MyException xmlns:ns1="http://ws/">
<errorMessage xmlns:ns2="http://ws/">Report not found</errorMessage>
<errorCode xmlns:ns2="http://ws/">E0010</errorCode>
</ns1:MyException>
</detail>
</soap:Fault>
</soap:Body>
</soap:Envelope>

您还可以添加堆栈跟踪,但最好登录服务器,如果需要,可以使用 GUUID 与客户端错误相关联。

关于java - JAX-WS Soap 故障未出现在 WSDL 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15358204/

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