我有一个相对简单的包,由使用JAXB的XML模式生成的8个Java类组成。我也有一个实用工具类来封送和解封送类的实例。
这行得通
实用工具类可以成功地将有效的XML文档解编组为‘root’类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下运行。这些依赖关系是:
以前的版本(分别为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
任何洞察力都是值得赞赏的。
发布于 2012-02-21 20:30:43
和它的任何超类都是已知的。
这意味着该类不会在JAXB上下文中注册为可封送组类。
您的错误出现在以下一行:
m.marshal(m, writer);
你是想把那个执政官自己召集起来。您可能打算封送一个WordMergeInfo
对象。
https://stackoverflow.com/questions/9388873
复制相似问题