我有一个使用 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;
为了让这个枚举也被编组,还缺少什么?
在由
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")
,看看它是否可以解决您的问题。