JAX-WS: ¿por qué los elementos anidados están en el espacio de nombres ""?

Tener un servicio de juguetes como se muestra a continuación

@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;
    }
}

El cliente generado por JAX-WS crea un mensaje SOAP donde el parámetro StockName no tiene espacio de nombres:

<?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>

Esperaría y deseo que StockName se genere como

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

es decir. en el espacio de nombres de destino, no en el anónimo (ns2 no es el predeterminado, por lo que puedo ver en el mensaje).

Me pregunto cómo hacer que JAX-WS agregue el espacio de nombres de destino a los elementos anidados del mensaje.

n intento de especificar el espacio de nombres para la anotación de WebParam no cambió nada ya que este parámetro se ignora cuando se usa RPC.

O ... ¿Significa que los parámetros en estilo RPC son siempre anónimos?

ACTUALIZA

Tonto de mí. Parcialmente resuelto. Lo que tuve que hacer es

style = Document, para habilitar espacios de nombres de destino para elementosparam style = Envuelto, para habilitar el elemento de nivel superior especifique el espacio de nombres de destino para WebParam (¿por qué no se utiliza el servicio uno? La documentación dice que se debe utilizar el espacio de nombres del servicio)

Es decir

@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;
    }
}

Todavía, el cliente aún espera el valor de retorno sin ningún espacio de nombres, incluso si intento declarar proporcionar uno. Esto es confuso

Respuestas a la pregunta(2)

Su respuesta a la pregunta