为什么这个 Enum 类没有 JAXB 编组?

问题描述 投票:0回答:1

我有一个使用 JAXB 和 MOXy 2.3.2 的 Java 8 应用程序,它可以很好地处理除最近引入的 Enum 之外的所有属性:

UserProfileExtensionGenderEnum.java
,这是编组到 XML 中的 JAXB 对象。

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name="root", namespace=ZGXMLHelper.ZWISCHENGAS_NS)
public class UserProfileExtension {
    @XmlElement(name="emailVerifyReminder2Sent", namespace=ZGXMLHelper.ZWISCHENGAS_NS)
    private boolean emailVerifyReminder2Sent = Boolean.FALSE;
    ...
    @XmlElement(name="gender", namespace=ZGXMLHelper.ZWISCHENGAS_NS)
    private UserProfileExtensionGenderEnum gender = UserProfileExtensionGenderEnum.NOTSET; 

}

枚举:

package com.zwischengas.model.jaxb;

import javax.xml.bind.annotation.XmlEnum;
import javax.xml.bind.annotation.XmlEnumValue;

@XmlEnum
public enum UserProfileExtensionGenderEnum {

    @XmlEnumValue("m")
    MALE, 
    @XmlEnumValue("f")
    FEMALE, 
    @XmlEnumValue("notset")
    NOTSET;
    
}

所有 JAXB 类都在同一个包中,并且在该包中有这个

package-into.java
:

@javax.xml.bind.annotation.XmlSchema( 
    namespace = "http://zwischengas.com/article/1.0/", 
    xmlns = {@javax.xml.bind.annotation.XmlNs(prefix = "z", namespaceURI ="http://zwischengas.com/article/1.0/"),@javax.xml.bind.annotation.XmlNs(prefix = "y", namespaceURI ="http://www.wyona.org/yanel/1.0")},  
    elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED) 
package com.zwischengas.model.jaxb; 

为了让这个枚举也被编组,还缺少什么?

java xml jaxb moxy
1个回答
0
投票

在由

jaxb-maven-plugin
生成的 Java enum 上,我通常在带有
@XmlType(name = "myAwesomeEnum")
注释的枚举上有一个
@XmlEnum
注释,如下例所示:

@XmlType(name = "myAwesomeEnum")
@XmlEnum
public enum MyAwesomeEnum {

    FIRST_ENUM("FIRST_ENUM"),
    SECOND_ENUM("SECOND_ENUM"),
    @XmlEnumValue("THIRD3_ENUM")
    THIRD_3_ENUM("THIRD3_ENUM")
}

@XmlEnumValue
仅当枚举名称与值不同时才需要(如第三个枚举名称)

我会尝试在您的枚举上添加

@XmlType(name = "userProfileExtensionGenderEnum")
,看看它是否可以解决您的问题。

© www.soinside.com 2019 - 2024. All rights reserved.