Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 编组失败,此上下文不知道有关MarshallerImpl的异常_Java_Jaxb_Marshalling - Fatal编程技术网

Java 编组失败,此上下文不知道有关MarshallerImpl的异常

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

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

这很有效 实用程序类可以成功地将有效的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.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
我在早期版本(分别为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
任何见解都值得赞赏

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

这意味着该类没有在JAXB上下文中注册为可封送处理的类

您的错误在这一行:

m.marshal(m, writer);

你在试图封送封送员自己。你可能是想封送一个
WordMergeInfo
对象。

谢谢@casablanca的快速回答和发现我愚蠢的编码错误。现在一切都好了!