сериализация xerces в Java 6

В Java 6 весь xerces XML реализация синтаксического анализатора/сериализатора находится теперь в Среде выполнения Java (rt.jar). Пакеты были перемещены под com.sun.* пространство имен, которое размещает их запрещенный для прямой ссылки в рамках клиентского кода. Это не проблема при использовании синтаксического анализатора, который инстанцируют через javax определенные API фабрики.

Однако наш код также использует xerces сериализацию (org.apache.xml.serialize.*). AFAICT, нет никакого javax.xml определенных API фабрик для создания экземпляров Сериализатора и OutputFormat. Это, кажется, подразумевает, что единственный способ добраться нужно явно назвать com.sun.org.apache.xml.serialize.* API.

Я нашел классы сериализации в javax.xml.stream, но они, кажется, не обеспечивают выходного управления форматированием как класс xerces OutputFormat.

Вопрос:

Есть ли способ получить доступ к xerces функциональности сериализации (который находится в rt.jar) через javax стандартный API, без включения xerces.jar и также явно не инстанцируя com.sun.* классы?

В противном случае существует ли javax совместимый API способ достигнуть того же эффекта?

6
задан Jim Garrison 24 May 2010 в 17:18
поделиться

4 ответа

Если вы хотите использовать функцию Xerces, которая не доступна через официальный java.* или javax.* API, то единственное реальное решение - включить Xerces в качестве сторонней библиотеки. Обращение к внутренней версии Xerces в JRE любым способом было бы опасным, поскольку ничто не гарантирует, что в действительной JRE вообще есть эти классы (альтернативные JRE и даже другие версии одной и той же JRE могут реализовать API JAXP с помощью другой реализации или даже просто перенести его в другой пакет).

5
ответ дан 17 December 2019 в 00:04
поделиться

javax.xml.bind.JAXBContext? Если вы пытаетесь привязать / сериализовать объекты к XML, JAXB является стандартом. Если вы выполняете необработанный синтаксический анализ, org.xml.sax и / или org.w3c.dom должны иметь то, что вы ищете.

ОБНОВЛЕНО: Пакеты com.javax.transform должны помочь. Взгляните на пример Transformer здесь .

0
ответ дан 17 December 2019 в 00:04
поделиться

Насколько мне известно, для этого не существует официального API. Как ни странно, API Java XML предназначены только для синтаксического анализа XML.

Однако вы можете использовать API преобразования XML для записи DOM документа в файл. См. этот пример .

1
ответ дан 17 December 2019 в 00:04
поделиться

Если вы не хотите ссылаться на API Sun, вы можете поместить Xerces в одобренный каталог. Он заменит копию / реализацию sun, но тогда вы можете без проблем использовать API (это «официальный» способ сделать это).

Встроенная реализация Java не обеспечивает хороший контроль над выводом, хотя можно получить некоторый лучший контроль над выводом с помощью Xerces и свойств API, поскольку API поддерживает передачу дополнительных свойств, которые могут оказаться полезными для других реализаций. . Сам не пробовал последний (я просматриваю только документацию).

Изменить (в ответ на комментарий): если вы хотите использовать Xerces в среде, в которой вы не контролируете базовый JDK, до такой степени, что вы можете указать свои собственные заменяющие API-интерфейсы для JAXP, тогда вам придется напрямую ссылаться на Xerces. (или сослаться на перезапись пакета sun).

Если вы можете поместить Xerces в одобренный каталог (или иным образом переопределить одобренную настройку - что, откровенно говоря, кажется маловероятным для сервера приложений, хотя я не знаю конкретно Weblogic), то способ «JDK» установки свойств для базового реализация осуществляется через TransformerFactory.setAttribute , который в зависимости от реализации может взаимодействовать с Transformer.setParameter .

Я должен добавить, что если базовой версии будет достаточно пакетов sun, и если Weblogic использует ее (или использует свои собственные Xerces, если этого достаточно), тогда вам может повезти, и вы просто сможете передать свойства и пусть это работает.

1
ответ дан 17 December 2019 в 00:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: