JAX WS:更改xmlns属性的位置

时间:2013-01-11 01:06:34

标签: xml soap jax-ws

JAX WS正在生成以下内容(仅显示一个片段):

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
   <S:Body>
      <ns2:capMessageResponse xmlns:ns2="http://www.########.com" xmlns:ns3="test:one:two:1.2" xmlns:ns4="test:one:two:three:1.1">
         <ns3:alert>
            <ns3:identifier>1247275</ns3:identifier>

以下是生成该方法的方法:

@WebMethod(operationName = "capMessage", action = "urn:getCapMessages")
    @WebResult(name = "alert", targetNamespace="test:one:two:1.2")
    public List<AlertType> getCapMessage(String messageIds,String uniqueId,boolean skipHtmlStrip) throws CommsMessageException {
        try {

我们需要做的是从输出中删除capMessageResponse,并让xmlns attribtues移动到alert属性。

有没有这样做?

2 个答案:

答案 0 :(得分:0)

从Java Method签名看起来就像是使用DOCUMENT / WRAPPED样式。你确定吗?如果是这种情况,那么使用当前的方法签名将无法执行您希望的操作。

如果您创建一个新类来保存方法参数并切换到BARE样式,那么您可以获得正在查看的输出。此外,您可能还需要创建另一个类来保存集合返回值。

public List<AlertType> getCapMessage(CapMessageRequest request) throws ...

答案 1 :(得分:0)

要实现所需的输出,请在服务实现bean

上指定以下注释
    @SOAPBinding(style = Style.DOCUMENT,parameterStyle=SOAPBinding.ParameterStyle.BARE) 

此注释仅在您的Web服务绑定具有Document样式(这是默认设置以及您从事物的外观中使用的设置)时才合法。

虽然

对此选择持谨慎态度
  1. 您的消息有效负载不再包含操作名称,您已经知道/想要

  2. 直接作为上述1.的结果,您将无法在同一Web服务上的另一个操作中使用相同的实体/参数类型,因为调度程序将无法继续成功发送任何信息消息

  3. 同样由于1(缺少相关信息),您的网络服务操作将无法接受多个参数