STaX-парсер ведет себя иначе - PullRequest
1 голос
/ 03 мая 2011

Я использую java 6, а в rt.jar есть все классы, необходимые для синтаксического анализа на основе STaX.В основном я использую следующие классы:

import javax.xml.stream.XMLEventReader;
import javax.xml.stream.events.XMLEvent;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamException;

Когда я запускаю следующее как java-приложение:

while(reader.hasNext()) {            
XMLEvent elementsEvent = reader.nextEvent();
System.out.println(elementsEvent.toString());
--------
}

Это работает как положено, но когда я развертываю это в JBoss, оно ведет себя по-другому.Кто-нибудь знает в чем здесь может быть проблема?

1 Ответ

4 голосов
/ 03 мая 2011

JBoss использует RI отсюда: http://stax.codehaus.org/Home для провайдера STAX. Я предполагаю, что JDK, вероятно, использует SJSXP по умолчанию.

Поскольку поведение toString() не указано в API для XMLEvent, это зависит от реализации, что похоже на распечатку. Некоторые реализации выдают простой старый Object#toString(), некоторые могут записывать XML и т. Д. По сути, вы полагаетесь на детали реализации, которые не определены интерфейсами пакета javax.

Вы можете получить согласованное поведение, используя реализацию codehaus stax в своей среде разработки, но, конечно, вы все еще используете специфические функции поставщика.

(Эта проблема возникала в прошлом и с другими API-интерфейсами XML, когда Sun сменила поставщика. Org.w3c.dom.Element использовался для печати XML из toString, но это было поведение поставщика, затем однажды оно изменилось и код многих людей сломался!)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...