Ant的xmltask添加空xmlns=""

4

以下是完整的ant目标,我正在运行它将驱动程序插入到我的wildfly standalone.xml文件中:

<target name="xmlrewrite" >
    <!--Driver-->
    <taskdef name="xmltask" classname="com.oopsconsultancy.xmltask.ant.XmlTask"/>
    <xmltask source="standalone.xml" dest="standalone.xml" report="true">
        <copy path="//driver[@module='com.oracle.ojdbc6']/text()" property="modelexists"/>
        <insert
            path="*[local-name()='server']/*[local-name()='profile']/*[local-name()='subsystem'][3]/*[local-name()='datasources']/*[local-name()='drivers']" 
            unless="modelexists">
            <![CDATA[
                <driver name="oracle" module="com.oracle.ojdbc6">
                <driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
                </driver>
            ]]>
        </insert>
    </xmltask>
</target>

据我理解,只有在未存在该条目的情况下才应该在 standalone.xml 中进行输入,因为我使用了 unless="modelexists"
但显然它正在创建一个新的 oracle 驱动程序条目,并带有额外的 xmlns="",这会导致 oracle 条目出现两次,从而导致我的构建失败。
请告诉我是否需要更多信息。

你能否编辑问题更新并提供完整的任务?在上面,你似乎只提供了部分信息。同时,请展示你正在处理的输入XML。 - Rao
2个回答

2
为了解决添加了额外xmlns=""的Oracle驱动程序的问题,您需要在CDATA节中为节点driver提供命名空间(在XML的根元素中找到):
<driver xmlns="namespace_for_this_xml" name="oracle" module="com.oracle.ojdbc6">
    <driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
</driver>

来源


0
我猜测 standalone.xml 文件与 JBoss 有关。在 JBoss 的 standalone.xml 中,XML 元素位于 XML 命名空间中。因此,在 <xmltask> 下嵌套的 <copy> 元素需要具备命名空间感知能力:
<copy path="//*[local-name()='driver' and @module='com.oracle.ojdbc6']/text()" property="modelexists"/>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接