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());
Другие вопросы по тегам