Проблема JAXWS без префикса пространства имен с использованием Jboss 4.2.3ga - PullRequest
4 голосов
/ 18 февраля 2011

У меня есть java-сервис, опубликованный как веб-сервис JAXWS с использованием @WebServiceannotation. Служба хорошо развернута на сервере приложений Jboss 4.2.3ga (с реализацией Jax-w, предоставляемой сервером приложений).

Сервис работает хорошо, когда сообщение Soap выглядит следующим образом:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:pref="mynamespace">
   <soapenv:Header/>
   <soapenv:Body>
        <pref:mymethod>
            <arg0>value</arg0>
        </pref:mymethod>
   </soapenv:Body>
</soapenv:Envelope>

И не удалось, когда сообщение Soap выглядит следующим образом:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="mynamespace">
   <soapenv:Header/>
   <soapenv:Body>
        <mymethod>
            <arg0>value</arg0>
        </mymethod>
   </soapenv:Body>
</soapenv:Envelope>

По ошибке я имею в виду "mymethod", но arg0 равен нулю.

Кто-нибудь знает, является ли это ожидаемым поведением API-интерфейса JAX-WS или ошибкой? Я не нашел ссылки ни на одно, ни на другое.

Кто-нибудь сталкивался с такой же проблемой (или успехом) при использовании другого стека JAX-WS?

1 Ответ

4 голосов
/ 18 февраля 2011

В рабочем коде нет пространства имен по умолчанию, и <mymethod> связан с mynamespace с префиксом. Поскольку элемент <arg0> не имеет префикса, он находится в пустом пространстве имен .

В ошибочном коде mynamespace устанавливается как пространство имен по умолчанию. Поскольку <mymethod> и <arg0> не имеют префикса, они оба имеют mynamespace в качестве URI пространства имен.

Запрещено связывать пустой URI пространства имен с любым префиксом. Поэтому вам нужно либо продолжать использовать префикс пространства имен в <mymethod>, либо вам необходимо переопределить пространство имен по умолчанию в <arg0>, например:

<arg0 xmlns="">

Обратите внимание, что при этом все нефиксированные дочерние элементы <arg0> устанавливаются в пустое пространство имен, если только вы снова не переопределите пространство имен по умолчанию.

...