答案是,你的榜樣是沒有錯的本身,而是有幾個可能的陷阱。 您已將註釋放在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