JDK6 -> JDK7 не может использовать com.sun.xml.internal.stream.XMLInputFactoryImpl
У нас есть следующий случай в коде, который приводит к сбою тестов при запуске с JAVA_HOME, установленным в JDK7 вместо JDK6 (maven с source/target = 1.6)
javax.xml.stream.FactoryConfigurationError: Provider for com.sun.xml.internal.stream.XMLInputFactoryImpl cannot be found
at javax.xml.stream.XMLInputFactory.newFactory(XMLInputFactory.java:239)
сам код
private static final String SUN_XML_INPUT_FACTORY = "com.sun.xml.internal.stream.XMLInputFactoryImpl";
private final XMLInputFactory xmlInputFactory;
public theConstructor() {
// When deployed to WebLogic 10.3.5 it will use "weblogic.xml.stax.XMLStreamInputFactory" which will
// cause a StreamReader exception as it requires some input stream other than null.
xmlInputFactory = XMLInputFactory.newFactory(SUN_XML_INPUT_FACTORY, this.getClass().getClassLoader());
}
Я полагаю, я должен использовать что-то еще, чем private static final String SUN_XML_INPUT_FACTORY = "com.sun.xml.internal.stream.XMLInputFactoryImpl";
но я не знаю что.
1 ответ
Я нашел после JDK6, метод:
javax.xml.stream.XMLInputFactory.newFactory(String factoryId,ClassLoader classLoader)
изменить его программу.
Параметр factoryId
это не путь к классам, а ключ.
Поэтому я положил stax.properties
файл в мой $java.home/jre/lib/
файл и контекст:
com.bea.xml.stream.MXParserFactory=com.bea.xml.stream.MXParserFactory
тогда моя проблема решена.
XMLInputFactory factory = XMLInputFactory.newFactory("com.bea.xml.stream.MXParserFactory", this.getClass().getClassLoader());