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
каталог, в который компилируются классы.