gpt4 book ai didi

java - 使用 JAX-WS Maven 插件 (wsimport) 检查 Web 服务中的异常层次结构

转载 作者:搜寻专家 更新时间:2023-10-31 08:04:17 25 4
gpt4 key购买 nike

我正在做一个项目,我们希望使用已检查的异常来通知用户(例如)错误的输入或采取的错误操作。此类异常应具有层次结构,例如:

public abstract class BusinessException extends java.lang.Exception {...}
public class InvalidInputException extends BusinessException {...}
public class InvalidActionException extends BusinessException {...}

我们使用 Maven 从 WSDL/XSD(契约优先方法)生成 java 代码,jaxws-maven-plugin , 目标 wsimport .

我已经尝试学习这个 ( http://www.ibm.com/developerworks/xml/library/ws-tip-jaxrpc.html ) 教程(它适用于 jax-rpc,但似乎也适用于 jax-ws)。我写了

<definitions ...>

<message name="empty"/>
<message name="ExceptionMessage">
<part name="fault" element="ows:ValidationException"/>
</message>

<portType name="TestWebService">
<operation name="throwException">
<input message="tns:empty"/>
<output message="tns:empty"/>
<fault name="fault" message="tns:ExceptionMessage"/>
</operation>
</portType>

<binding name="TestWebServicePortBinding"
type="tns:TestWebService">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http"
style="document"/>


<operation name="throwException">
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
<fault name="fault">
<soap:fault name="fault" use="literal"/>
</fault>
</operation>
</binding>

...
</definitions>

在 ows: 命名空间中定义类型

<xs:complexType name="BusinessException" abstract="true">
<xs:sequence>
<xs:element name="code" type="xs:int"/>
</xs:sequence>
</xs:complexType>

<xs:complexType name="InvalidInputException">
<xs:complexContent>
<xs:extension base="tns:BusinessException">
<xs:sequence>
<xs:element name="validationMessage" type="xs:string"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>

<xs:complexType name="InvalidActionException">
<xs:complexContent>
<xs:extension base="tns:BusinessException">
<xs:sequence>
<xs:element name="actionName" type="xs:string"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>

<xs:element name="ValidationException" type="tns:InvalidInputException"/>

当我运行 mvn clean package ,我得到以下内容(删除了 getter、setter、ctors 和注释):

public interface TestWebService {
@WebMethod
public void throwException() throws ExceptionMessage;
}

public class ExceptionMessage extends Exception {
private InvalidInputException faultInfo;
(...)
}

public abstract class BusinessException implements Serializable {
protected int code;
(...)
}

public class InvalidActionException extends BusinessException implements Serializable {
protected String actionName;
(...)
}

public class InvalidInputException extends BusinessException implements Serializable {
protected String validationMessage;
(...)
}

这不是我想要的,因为有一个异常(exception),它可以容纳不同的 faultInto数据。有没有一种方法可以完全在 XSD/WSDL 中创建如上所述的异常层次结构?作为ExceptionMessage类直接从 <message> 生成标签,我找不到在那里创建父/子的方法。

最佳答案

您能否将 WSDL 操作更改为...

<portType name="TestWebService">
<operation name="throwException">
<input message="tns:empty"/>
<output message="tns:empty"/>
<fault name="fault" message="tns:BusinessException"/>
</operation>
</portType>

关于java - 使用 JAX-WS Maven 插件 (wsimport) 检查 Web 服务中的异常层次结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4897298/

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