如何从 xml 请求中删除 xmlns=""

Jac*_*rky 4 java xml axis soap namespaces

我正在尝试从存根生成的 xml 请求中删除空白 xmlns,该存根是我使用轴向导从 wsdl 自动生成的。

轴向导生成请求类,其中有:

 private static org.apache.axis.description.TypeDesc typeDesc =
        new org.apache.axis.description.TypeDesc(Request.class, true);

    static {
        typeDesc.setXmlType(new javax.xml.namespace.QName("http://myNamespace"));
        org.apache.axis.description.ElementDesc elemField = new org.apache.axis.description.ElementDesc();
        elemField.setFieldName("destinationIdsInfo");
        elemField.setXmlName(new javax.xml.namespace.QName("", "DestinationIdsInfo"));//IF I REMOVE THIS EVERY ELEMENT INSIDE THAT TAG WILL HAVE xmlns="".
        elemField.setXmlType(new javax.xml.namespace.QName("", "DestinationIdInfo"));
        elemField.setMinOccurs(0);
        elemField.setNillable(false);
        elemField.setItemQName(new javax.xml.namespace.QName("", "DestinationIdInfo"));
        ....
   }
Run Code Online (Sandbox Code Playgroud)

这会生成一个如下所示的 xml:

...
<DestinationIdsInfo xmlns="">
    <DestinationIdInfo id="xxxx"/>
</DestinationIdsInfo>
...
Run Code Online (Sandbox Code Playgroud)

但是我需要

<DestinationIdsInfo>
    <DestinationIdInfo id="xxxx"/>
</DestinationIdsInfo>
Run Code Online (Sandbox Code Playgroud)

我该如何解决?

Jon*_*eet 5

您应该为嵌套元素指定相同的命名空间 URI:

elemField.setXmlName(new javax.xml.namespace.QName("http://myNamespace", 
                                                   "DestinationIdsInfo"))
Run Code Online (Sandbox Code Playgroud)

(同上DestinationIdInfo。)

然后它将从包含元素继承名称空间,这就是我相信你想要的原因。

有关命名空间默认的更多信息,请参阅XML 命名空间规范第 6.2 节。