编组失败,但有关此上下文未知的MarshallerImpl的例外情况

时间:2012-02-22 03:55:32

标签: java jaxb marshalling

我有一个相对简单的8个Java类包,它是使用JAXB XJC从XML模式生成的。我还有一个实用程序类来编组和解组该类的实例。

这可行

实用程序类可以成功地将有效的XML文档解组为“根”类WordMergeInfo的实例。例如,这很好用:

    JAXBContext jc = JAXBContext.newInstance(WordMergeInfo.class);
    Unmarshaller um = jc.createUnmarshaller();
    return (WordMergeInfo)um.unmarshal(inputStream);

这不起作用

但是对字符串进行编组失败。在这段代码中:

    JAXBContext jc = JAXBContext.newInstance(WordMergeInfo.class);
    Marshaller m = jc.createMarshaller();
    StringWriter writer = new StringWriter();
    m.marshal(m, writer);
    return writer.toString();

Marshaller.marshal的调用失败,并显示以下错误:

javax.xml.bind.JAXBException: class com.sun.xml.bind.v2.runtime.MarshallerImpl nor any of its super class is known to this context.
    at com.sun.xml.bind.v2.runtime.JAXBContextImpl.getBeanInfo(JAXBContextImpl.java:594)
    at com.sun.xml.bind.v2.runtime.XMLSerializer.childAsRoot(XMLSerializer.java:482)
    at com.sun.xml.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:315)
    at com.sun.xml.bind.v2.runtime.MarshallerImpl.marshal(MarshallerImpl.java:244)

据我了解,nor any of its super class is known to this context表示无法找到编组所需的JAXB类。那么,当堆栈跟踪中存在相同的类时,为什么不能找到其中一个JAXB实现类?

上下文

这个错误出现在我班级的单元测试中,在Maven下运行。依赖关系是:

  • javax.xml.bind中:JAXB-API:2.1
  • com.sun.xml.bind:JAXB-IMPL:2.1.13

我在这些版本的早期版本中遇到了同样的错误(分别为2.0和2.0.3)。

Maven测试类路径是:

C:\Users\mstra.CUSTMAN\Workspace\DARTCorrModule\xml\target\test-classes
C:\Users\mstra.CUSTMAN\Workspace\DARTCorrModule\xml\target\classes
C:\Users\mstra.CUSTMAN\.m2\repository\javax\xml\bind\jaxb-api\2.1\jaxb-api-2.1.jar
C:\Users\mstra.CUSTMAN\.m2\repository\javax\xml\stream\stax-api\1.0-2\stax-api-1.0-2.jar
C:\Users\mstra.CUSTMAN\.m2\repository\javax\activation\activation\1.1\activation-1.1.jar
C:\Users\mstra.CUSTMAN\.m2\repository\com\sun\xml\bind\jaxb-impl\2.1.13\jaxb-impl-2.1.13.jar
C:\Users\mstra.CUSTMAN\.m2\repository\junit\junit\4.8.2\junit-4.8.2.jar
C:\Users\mstra.CUSTMAN\.m2\repository\org\mockito\mockito-all\1.8.5\mockito-all-1.8.5.jar
C:\Users\mstra.CUSTMAN\.m2\repository\javax\ejb\ejb-api\3.0\ejb-api-3.0.jar
C:\Users\mstra.CUSTMAN\.m2\repository\org\slf4j\slf4j-api\1.6.4\slf4j-api-1.6.4.jar

感谢任何见解。

1 个答案:

答案 0 :(得分:7)

  

也不知道它的任何超类

这意味着该类未在JAXB上下文中注册为可编组的类。

您的错误就在这一行:

m.marshal(m, writer);

你正在试图编组编组本身。你可能想要编组一个WordMergeInfo对象。