例如,我有Java类(JAXB):
Test test = new Test();
test.set....
//fill test object
............
现在我需要将此对象转换为org.w3c.dom.Element
现在我有转换器可以转换为byte[]
:
public <T> byte[] marshal(T value) {
try {
StringWriter sw = new StringWriter();
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(value,sw);
return sw.toString().getBytes();
} catch (JAXBException e) {
throw new RuntimeException(e.getMessage());
}
}
我的问题是:如何将test
或byte[]
转换为to org.w3c.dom.Element
?
编辑:
在评论中回答我为什么需要它的问题
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAnyElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
import org.w3c.dom.Element;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"any"
})
@XmlRootElement(name = "MessagePrimaryContent")
public class MessagePrimaryContent {
@XmlAnyElement
protected Element any;
public Element getAny() {
return any;
}
public void setAny(Element value) {
this.any = value;
}
}
我需要将我的对象设置为setAny
方法。这样的协议和格式。我没有发明
答案 0 :(得分:1)
首先,我将使用@XmlAnyElement Element any
而不是@XmlAnyElement(lax = true) Object any
。然后,您只需将test
分配给any
,然后让JAXB封送它。看到这个答案:
因此,您可以避免将预编组为DOM。
现在,您的问题。
您基本上想将test
对象编组为DOM元素。最简单的方法是编组到DOMResult
,然后从那里获取元素。
类似的东西:
marshaller = jaxbContext.createMarshaller();
DOMResult domResult = new DOMResult();
marshaller.marshal(value, domResult);
Node rootNode = domResult.getNode();
// I'm not quite sure that it's always a Document, but it's easy to figure out
final Element rootElement = ((Document) rootNode).getDocumentElement();