包装JAXBElement实例的String

时间:2014-12-22 14:48:56

标签: java xml jaxb

我有以下代码,

JAXBContext jc = JAXBContext.newInstance(TestResults.class);
Marshaller m = jc.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
OutputStream os = new FileOutputStream( "nosferatu.xml" );
TestResults tr = new TestResults();
tr.setUuid(new JAXBElement<String>(new QName("uuid"),String.class, "uuidcontent"));
//ObjectFactory objectFactory = new ObjectFactory();
m.marshal(new JAXBElement<TestResults>(new QName("uri","local"),TestResults.class,new TestResults()), System.out);

我试图将 Java String Class 包装为jaxb element,因为如果我不这样做的话  

unable to marshal type “java.lang.String”错误。

但是当我尝试将java.lang.string包裹在jaxb element中时,我收到以下错误

The method setUuid(String) in the type TestResults is not applicable for the arguments (JAXBElement<String>)

setUuid方法如下所示

public void setUuid(java.lang.String value) {
    this.uuid = value;
}

如何将String包裹为jaxb element,而不会抛出此错误?

1 个答案:

答案 0 :(得分:1)

当作为根对象编组时,需要将String的实例包装在JAXBElement中以提供根元素信息(与没有@XmlRootElement注释的任何类相同。 / p>

当作为字段或属性值编组时,包含元素通常从包含字段/属性派生,因此默认情况下不需要JAXBElement