JAXB具有具有相同根的类属性
问题描述:
我对JAXB相当陌生,遇到了一个我似乎无法修复的问题。JAXB具有具有相同根的类属性
如果我有一个简单的XML文件如下。
<Root>
<Test>TestStuff</Test>
</Root>
我想创建一个类来处理“根”和另一个以进行“测试”。我通常知道你不会这样做,但对于这个例子,这里是我创建的类;
@XmlRootElement
class MyElement {
private String test;
@XmlElement(name="Test")
public String getTest() { return test; }
public void setTest(String test) { this.test = test; }
}
@XmlRootElement(name="Root")
class Root {
private MyElement myElement;
public MyElement getMyElement() { return myElement; }
public void setMyElement(MyElement myElement) { this.myElement = myElement; }
}
当我运行下面的代码时,myElement总是为null。
@Test
public void testJAXB() throws Exception {
InputStream xmlInputStream = new FileInputStream(new File(".\\files\\test1.xml"));
JAXBContext context = JAXBContext.newInstance(Root.class, MyElement.class);
Unmarshaller um = context.createUnmarshaller();
Root root = (Root) um.unmarshal(xmlInputStream);
Assert.assertTrue(root.getMyElement().getTest().equals("TestStuff"));
}
有人能指出我在这方面的正确的方向? 谢谢。
答
你可以做以下的利用@XmlElement
和@XmlValue
:
根
@XmlRootElement(name="Root")
class Root {
private MyElement myElement;
@XmlElement(name="Test")
public MyElement getMyElement() { return myElement; }
public void setMyElement(MyElement myElement) { this.myElement = myElement; }
}
MyElement
class MyElement {
private String test;
@XmlValue
public String getTest() { return test; }
public void setTest(String test) { this.test = test; }
}
更多信息
UPDATE
如果您正在使用EclipseLink MOXy(我是技术主管)作为JAXB供应者,你可以使用@XmlPath(".")
扩展映射这种使用案件。
根
import javax.xml.bind.annotation.*;
import org.eclipse.persistence.oxm.annotations.XmlPath;
@XmlRootElement(name="Root")
class Root {
private MyElement myElement;
@XmlPath(".")
public MyElement getMyElement() { return myElement; }
public void setMyElement(MyElement myElement) { this.myElement = myElement; }
}
MyElement
class MyElement {
private String test;
@XmlElement(name="Test")
public String getTest() { return test; }
public void setTest(String test) { this.test = test; }
}
更多信息
嗨,谢谢你。不幸的是,MyElement类最终需要包含几个元素。比如我可能需要元素添加到MyElement类: TestStuff 随机文本 –
user1197930
2012-02-08 20:06:57
对不起 - 而不是单一类应该被称为MyElements。 – user1197930 2012-02-08 20:16:07
@ user1197930 - 我已经更新了我的答案,以及如何使用EclipseLink JAXB(MOXy)中的“@ XmlPath”扩展完成此操作。 – 2012-02-08 20:29:55