Axiom OMElement 生成默认名称为空的子项 space

Axiom OMElement generates child with empty default name space

嗨,这是我为生成 xml 代码所做的工作:

OMFactory factory = OMAbstractFactory.getOMFactory();
OMNamespace nsSequence = factory.createOMNamespace("http://ws.apache.org/ns/synapse", "");
OMElement rootSequence = factory.createOMElement("sequence",nsSequence);


/*<FILTER>*/
OMNamespace nsFilter = factory.createOMNamespace("http://org.apache.synapse/xsd", "ns");        
OMElement filter = factory.createOMElement("filter",nsFilter);
OMAttribute regex = factory.createOMAttribute("regex", null, "applID");
OMAttribute source = factory.createOMAttribute("source", null, "get-property('applicationID')");

filter.addAttribute(regex);
filter.addAttribute(source);

/*<THEN>*/
OMElement then = factory.createOMElement("then",null);          

filter.addChild(then);
rootSequence.addChild(filter);

生成的代码是这样的:

<sequence xmlns="http://ws.apache.org/ns/synapse">
    <ns:filter xmlns:ns="http://org.apache.synapse/xsd" regex="APPP" source="get-property('applicationID')">
        <then xmlns=""></then>
    </ns:filter>
</sequence>

THEN 元素中的 XMLNS="" 对我来说是个大问题。

我正在使用 axiom-api 1.2.14... 我在某处读到这是其他人遇到的问题(错误)(也许已经解决了?)。 有没有办法解决这个问题以获得干净的 xml 代码?或者更好地解决它?

您正在创建没有命名空间的 then 元素:

OMElement then = factory.createOMElement("then", null);

因此 Axiom 生成一个 xmlns="" 以便该元素没有名称空间,这与您所要求的完全一样。事实上,如果没有 xmlns="",该元素将具有默认命名空间 http://ws.apache.org/ns/synapse,这是错误的。

如果您认为命名空间声明是错误的,那么这可能意味着该元素实际上应该属于文档中使用的其他命名空间之一。如果是这种情况,那么您应该修复代码以请求正确命名空间中的元素。