gpt4 book ai didi

java - JAX-WS:为什么嵌套元素位于 ""命名空间中?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:23:08 25 4
gpt4 key购买 nike

玩具服务如下

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

尽管如此,即使我尝试声明提供一个 namespace ,客户仍然期望没有任何 namespace 的返回值。这令人困惑。

最佳答案

根据 WSI-Basic Profile,此行为是正确的。如果你看:

http://www.ws-i.org/profiles/basicprofile-1.1.html#Part_Accessors

第 4.7.20 节,断言 R2735 特别指出,对于 RPC/Literal,部分访问器元素必须放在没有命名空间的元素中。

关于java - JAX-WS:为什么嵌套元素位于 ""命名空间中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5793352/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com