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

pha*_*cle 6 java jaxb marshalling

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

这有效

实用程序类可以成功地将有效的XML文档解组为"root"类的实例WordMergeInfo.例如,这工作正常:

    JAXBContext jc = JAXBContext.newInstance(WordMergeInfo.class);
    Unmarshaller um = jc.createUnmarshaller();
    return (WordMergeInfo)um.unmarshal(inputStream);
Run Code Online (Sandbox Code Playgroud)

这不起作用

但编组到字符串失败.在这段代码中:

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

调用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)
Run Code Online (Sandbox Code Playgroud)

据我了解,这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
Run Code Online (Sandbox Code Playgroud)

任何见解都表示赞赏.

cas*_*nca 7

在这种情况下,也不知道它的任何超类

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

你的错误是在这一行:

m.marshal(m, writer);
Run Code Online (Sandbox Code Playgroud)

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