gpt4 book ai didi

java - 如何扩展 wsimport 生成的带有 WebFault 注释的异常?

转载 作者:行者123 更新时间:2023-12-01 05:58:46 25 4
gpt4 key购买 nike

我正在根据现有的 WSDL 使用 Java 构建 Web 服务。 wsimport 工具已生成绑定(bind)到服务架构中的元素的所有 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
}

当我现在从应用程序中抛出 MyServiceFault 实例时,我希望这些错误能够在 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>

也就是说,我完全丢失了 failureInfo 元素。我的 SOAP 堆栈将 MyServiceFault 视为任何其他异常,而不是视为表示服务中的错误的异常。

我一开始以为是因为@WebFault注解没有被MyServiceFault继承,但是我在显式添加这个注解后再次尝试,没有成功。

知道我在这里做错了什么吗?

最佳答案

不管怎样,我都是这样实现的。

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>

关于java - 如何扩展 wsimport 生成的带有 WebFault 注释的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1920683/

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