Java 编组失败,此上下文不知道有关MarshallerImpl的异常
我有一个相对简单的包,其中包含8个Java类,它们是使用JAXB XJC从XML模式生成的。我还有一个实用程序类来封送和解封该类的实例 这很有效 实用程序类可以成功地将有效的XML文档解组到“root”类的实例中Java 编组失败,此上下文不知道有关MarshallerImpl的异常,java,jaxb,marshalling,Java,Jaxb,Marshalling,我有一个相对简单的包,其中包含8个Java类,它们是使用JAXB XJC从XML模式生成的。我还有一个实用程序类来封送和解封该类的实例 这很有效 实用程序类可以成功地将有效的XML文档解组到“root”类的实例中WordMergeInfo。例如,这很好: JAXBContext jc = JAXBContext.newInstance(WordMergeInfo.class); Unmarshaller um = jc.createUnmarshaller(); retu
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.marshall
失败,出现以下错误:
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)
据我所知,或者它的任何超类都不为本文所知
意味着无法找到编组所需的JAXB类。那么,当同一个类位于堆栈跟踪中时,为什么找不到其中一个JAXB实现类呢
上下文
这个错误出现在我的类在Maven下运行的单元测试中。依赖项包括:
- bind:jaxbapi:2.1
- bind:jaxb impl:2.1.13
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
任何见解都值得赞赏
在这种情况下,也不知道它的任何超类
这意味着该类没有在JAXB上下文中注册为可封送处理的类
您的错误在这一行:
m.marshal(m, writer);
你在试图封送封送员自己。你可能是想封送一个
WordMergeInfo
对象。谢谢@casablanca的快速回答和发现我愚蠢的编码错误。现在一切都好了!