Теперь это свяжет мыльный ответ без пространства имен.

ие службы игрушек, как показано ниже

@WebService(targetNamespace="http://www.example.org/stock")
@SOAPBinding(style=Style.RPC,parameterStyle=ParameterStyle.WRAPPED)
public class GetStockPrice {
    @WebMethod(operationName="GetStockPrice",action="urn:GetStockPrice")
    @WebResult(partName="Price")
    public Double getPrice(
            @WebParam(name="StockName")
            String stock
        ) {
        return null;
    }
}

Клиент, сгенерированный JAX-WS, создает сообщение SOAP, где параметр StockName не имеет пространства имен:

<?xml version='1.0' encoding='UTF-8'?&g,t;
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
  <S:Body>
    <ns2:GetStockPrice xmlns:ns2="http://www.example.org/stock">
      <StockName>IBM</StockName>
    </ns2:GetStockPrice>
  </S:Body>
</S:Envelope>

Я ожидал бы и хотел бы, чтобы StockName был сгенерирован как

  <ns2:StockName>IBM</ns2:StockName>

то есть в целевом пространстве имен, а не в анонимном (насколько я вижу из сообщения, ns2 не является значением по умолчанию).

Интересно, как заставить JAX-WS добавить целевое пространство имен к вложенным элементам сообщения?

Попытка указать пространство имен для аннотации WebParam ничего не изменила, так как этот параметр игнорируется при использовании RPC.

Или ... Значит ли это, что параметры в стиле RPC всегда анонимны?

ОБНОВИТЬ

Дурак я. Частично решено. Что мне нужно было сделать, это

style = Document, чтобы включить целевые пространства имен для элементовparam style = Wrapped, чтобы включить элемент верхнего уровняуказать целевое пространство имен для WebParam (почему сервис один не используется? документация говорит, что должно использоваться пространство имен сервиса)

Это:

@WebService(targetNamespace="http://www.example.org/stock")
@SOAPBinding(style=Style.DOCUMENT,parameterStyle=ParameterStyle.WRAPPED)
public class GetStockPrice {
    @WebMethod(operationName="GetStockPrice",action="urn:GetStockPrice")
    @WebResult(partName="Price")
    public Double getPrice(
            @WebParam(name="StockName",targetNamespace="http://www.example.org/stock")
            String stock
        ) {
        return null;
    }
}

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

Ответы на вопрос(2)

Ваш ответ на вопрос