Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 具有多个属性的Jax-ws-Enum_Java_Jax Ws_Enumeration - Fatal编程技术网

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

Java 具有多个属性的Jax-ws-Enum,java,jax-ws,enumeration,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"}) @XmlEn

我有一个类型类:

@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;
    }
}
我得到的结果是:记录状态=“确定” 但我想要:记录状态=“确定”错误=“无错误”


我怎样才能做到这一点呢?

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

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

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

如果要序列化类型记录,并且希望它具有两个属性,则该记录中需要两个属性类型。它不会从定义为一个属性(具有一个属性名称)的单个类型序列化两个属性。本质上,您的记录类需要看起来更像您的状态类。哦,thx,最近我只使用字段附件类型,我忘了我可以在getter上放置元素:)
@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;
    }
}