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