【问题标题】:JAX WS: Change location of xmlns attributeJAX WS:更改 xmlns 属性的位置
【发布时间】:2013-01-11 01:06:33
【问题描述】:

JAX WS 正在生成以下内容(仅显示了一个 sn-p):

<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 属性移动到警报属性。

有没有办法做到这一点?

【问题讨论】:

    标签: xml soap jax-ws


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      为了实现你想要的输出,你在你的服务实现 bean 上指定以下注解

          @SOAPBinding(style = Style.DOCUMENT,parameterStyle=SOAPBinding.ParameterStyle.BARE) 
      

      仅当您的 Web 服务绑定是 Document 样式(这是默认设置,并且从外观上看您已经在使用)时,此注释才合法。

      请注意这个选择

      1. 您的消息负载不再用操作名称包装,这是您已经知道/想要的

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-04-05
        • 2016-06-22
        • 2013-07-14
        • 2011-04-28
        • 1970-01-01
        • 1970-01-01
        • 2011-08-04
        相关资源
        最近更新 更多