Xstream похоже не поддерживает пространство имен. Есть ли решение без изменения основного кода? просто передав атрибут

Я пишу плагин Nexus OSS. Мой сервер отправляет запрос на отдых этому приложению nexus oss, для которого nexus oss отправляет ответ. Но, как я предложил в Empty uri in rest response , он выдает ошибку, как предлагается там .Спасибо @Blaise Doughan. Поэтому ответчик @Blaise Doughan предложил сделать имя пакета, которое идет с ответом, совпадающим с именем пакета, которое есть на сервере. Я так и сделал. Это решило потенциальную проблему, которая может возникнуть в будущем (проблема с именем пакета). Но все равно выдает ту же ошибку.

Поэтому для отладки я взял какое-то другое приложение (использующее «apache cxf»), для которого сервер не выдает таких ошибок. Я обнаружил, что ответ xml был

<ns2:com.collabnet.teamforge.ia.GetConfigurationParametersResponse
 xmlns:ns2="http://www.collab.net/teamforge/integratedapp"/>

Но в случае моего приложения (которое заставляет сервер выдавать ошибку) ответ

<com.collabnet.teamforge.ia.GetConfigurationParametersResponse/>

Таким образом, единственная потенциальная разница, которую я обнаружил среди этих ответов, — это пространство имен "http://www.collab.net/teamforge/integratedapp". В связанном ответе @Blaise Doughan предположил, что ответ, похоже, исходит от xstream . Позже я подтвердил, что nexus oss внутренне использует xstream.

Итак, вот проблема. На веб-сайте xstream я нашел это примечание:

Почему у XStream нет поддержки пространств имен?

Не каждый анализатор XML поддерживает пространства имен, и не каждый анализатор XML, поддерживающий пространства имен, можно настроить в XStream для их использования. В основном пространства имен должны поддерживаться отдельно для разных парсеров XML, и единственная поддержка пространств имен, которая в настоящее время реализована в XStream, - это поддержка StAX paser. Поэтому используйте и настройте StaxDriver XStream для использования пространств имен.

Это дает мне ощущение, что xstream не поддерживает пространства имен, поэтому не отправляет пространство имен в ответе. Итак, мой сервер хочет, чтобы uri был установлен с пространством имен "http://www.collab.net/teamforge/integratedapp". Но nexus oss, который использует xstream, не будет отправлять пространство имен в ответ.

Вопрос 1: Я не верю, что плагину будет предоставлено столько возможностей для настройки драйверов (StaxDriver), как это предлагается в примечании. Это основано на моем пошаговом руководстве по коду nexus oss. Есть ли другой способ сделать это из самого плагина?

Вопрос 2: Если нет решения для вопроса 1, означает ли это, что мне придется настроить код nexus oss? чтобы создать пространство имен по умолчанию, как это предлагается в http://blog.bdoughan.com/2010/10/how-does-jaxb-compare-to-xstream.html под заголовком «Применение пространств имен». Это окончательное решение? Потому что вносить изменения в ядро ​​​​nexus oss не рекомендуется, так как это становится проблемой при обновлении nexus oss.

Вопрос 3: Даже если в качестве решения предлагается способ вызова staxDriver от balise, проблема в том, что мой nexus oss внутренне использует XppDriver

плагин рестлета Nexus

ядро клиента Nexus xstream

Так как приложение внутренне использует только XppDriver, могу ли я применить то, что Блейз сказал в своем блоге? Потому что Блейз использует StaxDriver в этом блоге для установки пространства имен (и он добавляет, что только StaxDriver разрешает эту настройку пространства имен, а также официальное примечание xstream, упомянутое выше в разделе «Почему XStream не поддерживает какое-либо пространство имен?», подтверждает это).

Пожалуйста помоги.

Спасибо


person Harish Kayarohanam    schedule 05.08.2013    source источник
comment
возможный дубликат Как добавить пространство имен XML (xmlns) при сериализации объекта в XML   -  person flup    schedule 01.09.2013


Ответы (1)


Вы можете подделать XStream, добавив поле с именем xmlns для хранения пространства имен.

@XStreamAsAttribute
private String xmlns = "http://www.collab.net/teamforge/integratedapp";
person bdoughan    schedule 07.08.2013