Ant xmltask添加空格xmlns =""

时间:2016-06-21 13:59:08

标签: xml ant xmltask

下面是我运行的完整ant目标,用于将驱动程序插入我的wildfly standalone.xml:

class JobNotifier < ApplicationMailer

  def send_post_email(job, email)
    @jobs = job
    mail(:to => email :subject => 'New job posted on FarFlungJobs')
  end

end

根据我的理解,只有当条目尚未存在时才应在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>

但显然它正在为oracle驱动程序创建一个额外的unless="modelexists"的新条目,它会生成两个oracle条目,这会导致我的构建失败。

如果您需要更多信息,请与我们联系。

2 个答案:

答案 0 :(得分:1)

要解决带有附加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>

Source

答案 1 :(得分:0)

我猜测standalone.xml文件与JBoss有关。 JBoss standalone.xml中的XML元素位于XML名称空间中。因此,嵌套在<copy>下的<xmltask>元素需要是名称空间感知的:

<copy path="//*[local-name()='driver' and @module='com.oracle.ojdbc6']/text()" property="modelexists"/>