gpt4 book ai didi

web-services - 使用 JAXB 和 JAXWS 注释将枚举属性编码到 XML

转载 作者:行者123 更新时间:2023-12-04 12:59:35 27 4
gpt4 key购买 nike

假设我们有以下 Java 1.5 枚举:

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;

@XmlAccessorType(XmlAccessType.FIELD)
public enum ReturnCode {
OK(0,"Ok"),
ERROR_VALIDATION(1,"Validation Error"),
ERROR_TRANSPORT(2, "Transport Error"),
ERROR_CASE_01(101, "Business situation #01"),
ERROR_CASE_02(102, "Business situation #02"),
ERROR_CASE_03(103, "Business situation #03");

@XmlElement(nillable=false, required=true)
private Integer code = 0;

@XmlElement(nillable=false, required=true)
private String message = null;

private ReturnCode(Integer code, String message) {
this.code = code;
this.message = message;
}

public Integer getCode() {
return code;
}

public String getMessage() {
return message;
}
}

我正在使用 Apache CXF 和生成的 WSDL,正如预期的那样,将上述枚举转换为限制:

<xsd:simpleType name="ReturnCode">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="OK"/>
<xsd:enumeration value="ERROR_VALIDATION"/>
<xsd:enumeration value="ERROR_TRANSPORT"/>
<xsd:enumeration value="ERROR_CASE_01"/>
<xsd:enumeration value="ERROR_CASE_02"/>
<xsd:enumeration value="ERROR_CASE_03"/>
</xsd:restriction>
</xsd:simpleType>

到目前为止一切都很好,这是一个理想的功能。我自己记得在 Apache CXF 之前(在我使用 XFire 的时候)之前一直在与这种结构作斗争。

但是,这里不是这种情况。我想产生不同的结果。我希望将枚举转换为复杂类型,并且在编码包含此枚举实例的对象时将属性代码和消息都转换为 XML 元素。我只希望它不像枚举。我知道如果我使用普通类而不是枚举,我可以做到这一点。但是,我非常希望将其保留为枚举,因此我在代码的 java 部分中将其保持类型安全。

如果生成的 WSDL 仍然对可能的值有限制,那将是完美的场景。然而,我可以没有它。这里的主要内容是将其保留为 Java 1.5 枚举,同时仍将 ReturnCode 编码(并生成 WSDL)作为复杂类型,其中代码和消息作为其元素。

我试图通过在枚举源代码中放置给定的 JAXWS 注释来暗示这一点。仅通过这些(或其他一些)注释是否有可能以某种方式完成?还是我必须编写自定义编码器/解码器和 WSDL 生成器?

非常感谢你!

最好的祝福,

菲利佩·费达尔托

最佳答案

在您的 java 服务器代码中使用枚举并在您的服务接口(interface)中转换为复杂类型。

例子:

@WebMethod
public ComplexType GetInfo(){
ReturnCode response;
response = ReturnCode.OK;
ComplexType wsResponse;
wsResponse = response.toComplexType()
return wsResponse;
}

@WebMethod
public void PutInfo(ComplexType input){
ReturnCode request = ReturnCode.fromComplexType(input);
//more code
}

关于web-services - 使用 JAXB 和 JAXWS 注释将枚举属性编码到 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7966506/

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