MOXy Marshalling/Unmarshalling error: javax.xml.bind.PropertyException из-за неправильного использования JAXBContextFactory

Я пытался маршалировать / демаршировать некоторые файлы JSON и XML для моего проекта, используя Eclipse MOXy. После ряда тестов я столкнулся с javax.xml.bind.PropertyException, и кажется, что мой файл jaxb.properties не читается, и поэтому используемый JAXBContextFactory неверен.

Я использую Eclipselink (MOXy) 2.5.2. Я добавил jaxb.properties в ту же папку, где находится мой класс, со следующим содержимым:

javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory

И это мой тестовый класс:

public static void main(String[] args) throws Exception {
        JAXBContext jaxbContext = JAXBContext.newInstance(SIRFCatalog.class);
        System.out.println(jaxbContext.getClass());
    //  SIRFCatalog catalog;
    //  Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();

    // ** The exception is thrown in the line below:**
    //  jaxbUnmarshaller.setProperty(UnmarshallerProperties.MEDIA_TYPE, "application/json");
    //  jaxbUnmarshaller.setProperty(UnmarshallerProperties.JSON_INCLUDE_ROOT, false);
    //  FileInputStream fis = new FileInputStream(new File("/home/philviana/a.json"));
    //  catalog = (SIRFCatalog) jaxbUnmarshaller.unmarshal(fis);

}

Когда я запускаю тест выше (пожалуйста, обратите внимание, что полезный код закомментирован), я получаю следующий вывод:

class com.sun.xml.bind.v2.runtime.JAXBContextImpl

что указывает на то, что фабрика контекста JAXB MOXy не загружается. Другими словами, я хочу использовать org.eclipse.persistence.jaxb.JAXBContextFactory в качестве моего JAXBContextFactory (из MOXy), но вместо этого я получаю класс RI com.sun.xml.bind.v2.runtime.JAXBContextImpl.

Файл jaxb.properties находится в том же каталоге, что и мой класс с методом main (только класс моего проекта). Это мои банки:

eclipselink.jar
com.sun.tools.xjc_2.2.0.jar
com.sun.xml.bind_2.2.0.v201004141950.jar
javax.activation_1.1.0.v201108011116.jar
javax.mail_1.4.0.v201005080615.jar
javax.xml.bind_2.2.0.v201105210648.jar
javax.xml.stream_1.0.1.v201004272200.jar
org.eclipse.persistence.antlr-2.5.2.jar
org.eclipse.persistence.asm-2.5.2.jar
org.eclipse.persistence.core-2.5.2.jar
org.eclipse.persistence.moxy-2.5.2.jar
javax.persistence.source_2.1.0.v201304241213.jar
javax.persistence_2.1.0.v201304241213.jar
org.eclipse.persistence.jpa.modelgen.source_2.5.2.v20140319-9ad6abd.jar
org.eclipse.persistence.jpa.modelgen_2.5.2.v20140319-9ad6abd.jar
org.eclipse.persistence.jpars.source_2.5.2.v20140319-9ad6abd.jar
org.eclipse.persistence.jpars_2.5.2.v20140319-9ad6abd.jar
commonj.sdo_2.1.1.v201112051852.jar

Какие-нибудь мысли?

1 ответ

Решение

Вы должны убедиться, что jaxb.properties файл заканчивается в пути к классам. Если вы запускаете его из Eclipse, возможно, что jaxb.properties не копируется из src каталог, в который компилируются классы.

Другие вопросы по тегам