Маршалирование завершается ошибкой, за исключением MarshallerImpl, неизвестного этому контексту

У меня есть относительно простой пакет из 8 классов Java, сгенерированных из XML-схемы с использованием JAXB XJC. У меня также есть служебный класс для маршалирования и отмены экземпляров класса.

Это работает

Служебный класс может успешно отменить маршал допустимого 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)

Как я понимаю, ни один из его суперклассов не известен в этом контексте, означает, что класс JAXB, необходимый для маршалинга, не может быть найден. Так почему же не удается найти один из классов реализации JAXB, когда один и тот же класс находится в трассировке стека?

Context

Эта ошибка проявилась в модульном тесте моего класса, выполняемом под 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

Любая информация приветствуется.

6
задан pharsicle 22 February 2012 в 03:55
поделиться