如何将对象(JAXB)或byte [](从此对象)转换为org.w3c.dom.Element?

时间:2018-08-28 11:43:05

标签: java jaxb marshalling

例如,我有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());
    }
  }

我的问题是:如何将testbyte[]转换为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方法。这样的协议和格式。我没有发明

1 个答案:

答案 0 :(得分:1)

首先,我将使用@XmlAnyElement Element any而不是@XmlAnyElement(lax = true) Object any。然后,您只需将test分配给any,然后让JAXB封送它。看到这个答案:

  

https://stackoverflow.com/a/9692275/303810

因此,您可以避免将预编组为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();