JAX-WS删除xml标签的'ns'前缀

问题描述 投票:3回答:1

如何在此处删除或重命名'ns2'前缀:

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
   <S:Body>
      <ns2:GetCatalogResponse xmlns:ns2="https://domain.com/">
         <GetCatalogResult>result</GetCatalogResult>
      </ns2:GetCatalogResponse>
   </S:Body>
</S:Envelope>

package-info.java:

@XmlSchema(
    namespace = "https://domain.com/",
    xmlns = { 
        @XmlNs(prefix = "xxx", namespaceURI="https://domain.com/")
    },
    elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED
)
package com.domain.xxx;

结果:

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
   <S:Body>
      <ns2:GetCatalogResponse xmlns:ns2="https://domain.com/">
         <GetCatalogResult>result</GetCatalogResult>
      </ns2:GetCatalogResponse>
   </S:Body>
</S:Envelope>

通过文档@XmlNs应该覆盖xml项目的默认前缀。但就我而言,它不起作用。

为什么?

soap jax-ws
1个回答
1
投票

前缀可以用SOAPHandler修改,例如

SOAPEnvelope envelope = context.getMessage().getSOAPPart().getEnvelope();
SOAPBody body = envelope.getBody();

Iterator iter = body.getChildElements();
while (iter.hasNext()) {
    Object object = iter.next();

    if (object instanceof SOAPElement) {
        SOAPElement element = (SOAPElement) object;
        element.removeNamespaceDeclaration(element.getPrefix());
        element.setPrefix("");
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.