2014-11-26 4 views
4

У меня есть следующий код:определение парсера StAX во время выполнения

XMLInputFactory inputFactory = XMLInputFactory.newInstance(); 
XMLStreamReader xmlStreamReader = inputFactory.createXMLStreamReader(inStream); 
this.encoding = xmlStreamReader.getEncoding(); 

...

Этот код прекрасно работает как в JBoss и Websphere, однако в конкретном JBoss бросает следующее исключение:

java.lang.ClassCastException: com.ctc.wstx.stax.WstxInputFactory cannot be cast to javax.xml.stream.XMLInputFactory 
    at javax.xml.stream.XMLInputFactory.newInstance(XMLInputFactory.java:136) 
    at es.gema.core.shared.dim.data.XFacturaE.detectVersion(XFacturaE.java:115) 
    at es.gema.core.shared.dim.data.XFacturaE.<init>(XFacturaE.java:67) 
    at es.gema.core.shared.dim.bc.InvoiceLoader.readXMLInvoice(InvoiceLoader.java:544) 
    at es.gema.core.shared.dim.bc.InvoiceLoader.loadInvoiceFACE(InvoiceLoader.java:137) 
    at es.gema.core.expenses.fac.bc.InvoiceServicesBC.execute(InvoiceServicesBC.java:127) 
    at es.gema.core.expenses.fac.bc.InvoiceServicesBC.execute(InvoiceServicesBC.java:92) 

Проверка WstxInputFactory Я вижу, что он расширяет XMLInputFactory2 вместо XMLInputFactory.

Каков рекомендуемый подход в этом случае? Создайте экземпляр WstxInputFactory без использования фабрики или настройте контейнер Java для возврата парсера, который расширяет XMLInputFactory?

ответ

4
public abstract class XMLInputFactory2 
extends javax.xml.stream.XMLInputFactory 

Так com.ctc.wstx.stax.WstxInputFactoryделает расширяет javax.xml.stream.XMLInputFactory и должны быть поэтому литьевой к нему.

Но поскольку вы получаете это исключение, вы должны столкнуться с проблемой загрузчика классов. Убедитесь, что javax.xml.stream.XMLInputFactory загружен этим же загрузчиком классов. Вероятно, JBoss/JDK поставляет одно и ваше приложение также имеет StAX в пути к классам. Но трудно сказать, кто виноват.

+0

Не мог бы вы расширить свой ответ, добавив некоторые подробности о том, что вы имеете в виду под„Убедитесь, что javax.xml.stream.XMLInputFactory загружен тем же загрузчиком классами“? – malat

1

Проблема: Я получил следующую ошибку. Мой сервер был «jboss-eap-5.1.1», JDK 1.6.

java.lang.ClassCastException: com.ctc.wstx.stax.WstxOutputFactory не может быть приведен к javax.xml.stream.XMLOutputFactory

Решение: я удалил «StAX "библиотека, именно:

<exclusions> 
    <exclusion> 
     <groupId>javax.xml.stream</groupId> 
     <artifactId>stax-api</artifactId> 
    </exclusion> 
</exclusions> 
+0

Мой вариант использования был противоположным, я хотел использовать парсер Stax. –

+0

Я тестировал в jboss EAP 4.3 JDK 1.7, а также отлично работает. – OJVM