java - 具有多个属性的 Jax-ws Enum

标签 java jax-ws enumeration

我有一个类型类:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name="Record")
public class Record
{
    @XmlAttribute(name="status")
    private Status status  ;
}   

和枚举类:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(propOrder={"status","error"})
@XmlEnum
public enum Status 
{
    OK(0, "No error"),
    ERROR(1, "Some error") ;

    @XmlAttribute(name="status", required=true)
    private Integer status ;
    @XmlAttribute(name="error", required=true) 
    private String error ;

    private Status(Integer status, String error)
    {
        this.status=status ;
        this.error=error ;
    }

    @Override
    public String toString()
    {
        return "Status:" + this.status + " Error:" + this.error;
    }
}

我得到的结果是:记录状态=“确定” 但我想要: Record status="OK"error="No error"

我怎样才能实现这一目标?

最佳答案

这不会按照您期望的方式工作,因为 JAXB 获取枚举名称而不是使用 toString() 方法。但即使这样做了,它仍然不会产生你想要的输出。它将产生:

<record status="Status:0 Error:No error"/>

使用普通的 JAXB 无法自动将单个字段扩展为多个 XML 属性。 MOXy JAXB 实现确实允许您执行此操作,但我怀疑您正在使用此实现(有关详细信息,请参阅 this question。)

最简单的解决方案是添加另一个包含错误消息的属性。

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name="Record")
public class Record
{
    @XmlAttribute(name="status")
    private Status status  ;

    @XmlAttribute(name="error")
    private String getError(){
        return status.getError();
    }
}

public enum Status 
{
    OK(0, "No error"),
    ERROR(1, "Some error") ;

    private Integer status ;
    private String error ;

    private Status(Integer status, String error)
    {
        this.status=status ;
        this.error=error ;
    }

    public String getError(){
        return this.error;
    }
}

此外,您实际上不需要 Status 枚举上的任何 JAXB 注释。唯一需要的时候是如果您希望 XML 中打印的值与枚举值不同(例如您希望 OK 显示为 ok而是在 XML 中)。请参阅 @XmlEnum 和 @XmlEnumValue 注释 here .

关于java - 具有多个属性的 Jax-ws Enum,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18171740/

相关文章:

java - 使用 TablerowSorter 和 rowFilter 在数据库中搜索记录

objective-c - ObjC : Local variable seems to retain its value across function calls

java - 如何使用 forEach 或 forEachValue 方法

java - 反序列化包含 List<Object> 的 Jackson/Json 对象,其中列表类型是对象中的属性

java - Hibernate 和 NonUniqueObjectException

java - xtext:如何在 JVM 推断器中使用未知类型的泛型?

java - jaxws-rt 2.2.10 的依赖项不适用于 Eclipse Neon

java - Tomcat 服务器上的 JAX-WS

java SOAP 响应问题

python - 使用 Python SUDS 列出 SOAP 枚举的所有可能值