答案是,你的榜样是没有错的本身,而是有几个可能的陷阱。 您已将注释放在setter上,而不是getter。尽管用于@XmlAttribute的JavaDoc没有对此进行任何限制,但其他注释(例如@XmlID)特别允许注释器或注入器注释,但不能同时注释。
注意@XmlAttribute期望的属性,而不是元素。而且,由于它解析了一个属性,因此它不是一个复杂的类型。所以EGroup可能是一个枚举,也许?
我扩大你的榜样,并增加了一些断言,和它的作品“我的机器上”,利用最新的Java 6
@XmlRootElement
@XmlAccessorType(javax.xml.bind.annotation.XmlAccessType.PROPERTY)
public class E {
private EGroup groupDefinition;
public EGroup getGroupDefinition() {
return groupDefinition;
}
@XmlAttribute
public void setGroupDefinition (EGroup g) {
groupDefinition = g;
}
public enum EGroup {
SOME,
OTHERS,
THE_REST
}
public static void main(String[] args) throws JAXBException {
JAXBContext jc = JAXBContext.newInstance(E.class);
E eOne = new E();
eOne.setGroupDefinition(EGroup.SOME);
Marshaller m = jc.createMarshaller();
m.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
StringWriter writer = new StringWriter();
m.marshal(eOne, writer);
assert writer.toString().equals("<e groupDefinition=\"SOME\"/>");
E eTwo = (E) jc.createUnmarshaller().unmarshal(new StringReader(writer.toString()));
assert eOne.getGroupDefinition() == eTwo.getGroupDefinition();
}
}
请发表您试图解析XML。 – ekeren 2010-05-25 11:25:46