玩具服务如下
@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参数没有命名空间:
我希望并希望StockName生成为
即在目标名称空间中,而不是在匿名名称空间中(ns2不是默认的,据我所知,从消息中可以看出).
我想知道如何让JAX-WS将目标命名空间添加到消息的嵌套元素中?
尝试将名称空间指定给WebParam注释时没有任何改变,因为在使用RPC时会忽略此参数.
或者……这是否意味着RPC风格的参数始终是匿名的?
UPDATE
傻我.部分解决了.我必须做的是
> style = Document,为元素启用目标命名空间
> param style = Wrapped,以启用顶级元素
>为WebParam指定目标命名空间(为什么不使用服务?文档说应该使用服务命名空间)
那是:
@WebService(targetNamespace="http://www.example.org/stock")
@SOAPBinding(style=Style.DOCUMENT,action="urn:GetStockPrice")
@WebResult(partName="Price")
public Double getPrice(
@WebParam(name="StockName",targetNamespace="http://www.example.org/stock")
String stock
) {
return null;
}
}
尽管如此,客户端仍然希望返回值没有任何命名空间,即使我尝试声明提供一个.这令人困惑.
最佳答案
根据WSI-Basic Profile,此行为是正确的.如果你看看:
http://www.ws-i.org/profiles/basicprofile-1.1.html#Part_Accessors
在第4.7.20节中,断言R2735明确指出对于RPC / Literal,必须将部分访问器元素放在没有namspace的元素中.