Hello,
I have found in the mailing archive a discussion regarding to the
outputter attribute of the xmltask, that when its value is "simple" (or
e.g. "simple:4") than the xmltask does not work properly for XMLs
defined accroding to XSD schemas. But I could not find the solution for
it (I mean in the archive). Could somebody confirm if this probelm is
already solved or not? I have used the latest xmltask jar, but it does
not look solved. Please look at examples:
ant1.6.5, xmltask-v1.15.1.jar, jdk 1.6.0
##### Example1 (Simply reads the source XML and writes it out to the
same file):
Source XML (src):
==========
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
</beans>
Task to modify the source XML (with same source and destionation
location):
========================================================
<xmltask source="${src}" dest="${src}" outputter="simple:4" >
</xmltask>
Logs snippet from the modify process:
============================
[xmltask] Reading D:\Temp\applicationContext.xml
[xmltask] Executing xmltask 1.15.1
[xmltask] Processing D:\Temp\applicationContext.xml into
D:\Temp\applicationContext.xml
[xmltask] Using predefined xml catalog (Question: Should be used
the xmlcatalog task also for XMLs defined according to XSD schemas?)
[xmltask] Normalizing resultant document
[xmltask] Indenting resultant document
Result XML processed with xmltask (added some extra namespaces):
================================================================
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<beans __NS1:xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"
xmlns="http://www.springframework.org/schema/beans"
xmlns:__NS1="http://www.w3.org/2000/xmlns/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></beans>
END of Example1
############################################################
##### Example2 (It reads the beans from source XML (bean after bean) and
inserts them to the destination XML):
Source XML (src):
==========
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<bean class="appl.logging.Logger111AlarmHandler"
id="Logger111AlarmHandler" scope="singleton">
<description>some description</description>
<property name="configurationRegistry"
ref="configurationRegistry"></property>
<property name="alarmManager"
ref="alarmManagerWrapper"></property>
</bean>
<bean class="appl.logging.Logger999AlarmHandler"
id="Logger999AlarmHandler" init-method="init" scope="singleton">
<property name="alarmHandler"
ref="Logger2AlarmHandler"></property>
</bean>
</beans>
Destination XML before xmltaks processing (dest):
================================
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
</beans>
Ant script to read beans from the source XML (bean after bean) and
insert them to dest XML:
================================================================
<?xml version="1.0" encoding="UTF-8"?>
<project name="merge_contexts" default="main" >
<taskdef name="xmltask"
classname="com.oopsconsultancy.xmltask.ant.XmlTask"/>
<target name="main" depends="read_xml" >
<record name="log.txt" action="stop"/>
</target>
<target name="read_xml" >
<record name="log.txt" action="start" loglevel="verbose"/>
<xmltask source="${src}">
<call target="update_xml_context"
path="/:beans/:bean"
buffer="storedEntry" >
</call>
</xmltask>
</target>
<target name="update_xml_context" >
<echo message="Print buffer:" />
<xmltask>
<print buffer="storedEntry" />
</xmltask>
<echo message="Insert bean:" />
<xmltask source="${dest}"
dest="${dest}"
outputter="simple:4"
encoding="UTF-8" expandentityreferences="false">
<insert path="/:beans" buffer="storedEntry" />
</xmltask>
</target>
</project>
Logs:
======
[xmltask] Reading D:\Temp\contrib\applicationContext.xml
[xmltask] Executing xmltask 1.15.1
[xmltask] Processing D:\Temp\contrib\applicationContext.xml [no output
document]
[xmltask] Using predefined xml catalog
[xmltask] Applying CallAction(update_xml_context) to /:beans/:bean
[xmltask] Calling target update_xml_context for [bean: null] (in
buffer storedEntry
[xmltask] Storing [bean: null] against buffer (storedEntry)
[xmltask]
Project base dir set to: D:\Temp
[xmltask] calling target(s) [update_xml_context] in build file
D:\Temp\merge_contexts.xml
parsing buildfile D:\Temp\merge_contexts.xml with URI =
file:///D:/Temp/merge_contexts.xml
Project base dir set to: D:\Temp
Build sequence for target(s) `update_xml_context' is
[update_xml_context]
Complete build sequence is [update_xml_context, read_xml, main, ]
[xmltask] Entering D:\Temp\merge_contexts.xml...
Build sequence for target(s) `update_xml_context' is
[update_xml_context]
Complete build sequence is [update_xml_context, read_xml, main, ]
update_xml_context:
[echo] Print buffer:
[xmltask] Executing xmltask 1.15.1
[xmltask] Processing [no output document]
[xmltask] Applying [EMAIL PROTECTED]
[xmltask] { buffer 'storedEntry' output
[xmltask] <bean class="appl.logging.Logger111AlarmHandler"
id="Logger111AlarmHandler" scope="singleton"
xmlns="http://www.springframework.org/schema/beans">
[xmltask] <description>some description</description>
[xmltask] <property name="configurationRegistry"
ref="configurationRegistry"/>
[xmltask] <property name="alarmManager"
ref="alarmManagerWrapper"/>
[xmltask] </bean>
[xmltask] } buffer 'storedEntry' output
[xmltask] Applied [EMAIL PROTECTED]
[echo] Insert bean:
[xmltask] Reading D:\Temp\applicationContext.xml
[xmltask] Executing xmltask 1.15.1
[xmltask] Processing D:\Temp\applicationContext.xml into
D:\Temp\applicationContext.xml
[xmltask] Using predefined xml catalog
[xmltask] Applying InsertAction(buffer storedEntry, position [under])
to /:beans
[xmltask] Inserting [bean: null]
[xmltask] Applied InsertAction(buffer storedEntry, position [under]) -
1 match(es)
[xmltask] Normalizing resultant document
[xmltask] Indenting resultant document
[xmltask] Using output character encoding UTF-8
update_xml_context: duration 0 seconds
[xmltask] Exiting D:\Temp\merge_contexts.xml.
[xmltask] Calling target update_xml_context for [bean: null] (in
buffer storedEntry
[xmltask] Storing [bean: null] against buffer (storedEntry)
[xmltask] (overwriting existing entry)
[xmltask]
Project base dir set to: D:\Temp
[xmltask] calling target(s) [update_xml_context] in build file
D:\Temp\merge_contexts.xml
parsing buildfile D:\Temp\merge_contexts.xml with URI =
file:///D:/Temp/merge_contexts.xml
Project base dir set to: D:\Temp
Build sequence for target(s) `update_xml_context' is
[update_xml_context]
Complete build sequence is [update_xml_context, read_xml, main, ]
[xmltask] Entering D:\Temp\merge_contexts.xml...
Build sequence for target(s) `update_xml_context' is
[update_xml_context]
Complete build sequence is [update_xml_context, read_xml, main, ]
update_xml_context:
[echo] Print buffer:
[xmltask] Executing xmltask 1.15.1
[xmltask] Processing [no output document]
[xmltask] Applying [EMAIL PROTECTED]
[xmltask] { buffer 'storedEntry' output
[xmltask] <bean class="appl.logging.Logger999AlarmHandler"
id="Logger999AlarmHandler" init-method="init" scope="singleton"
xmlns="http://www.springframework.org/schema/beans">
[xmltask] <property name="alarmHandler"
ref="Logger2AlarmHandler"/>
[xmltask] </bean>
[xmltask] } buffer 'storedEntry' output
[xmltask] Applied [EMAIL PROTECTED]
[echo] Insert bean:
[xmltask] Reading D:\Temp\applicationContext.xml
[xmltask] Executing xmltask 1.15.1
[xmltask] Processing D:\Temp\applicationContext.xml into
D:\Temp\applicationContext.xml
[xmltask] Using predefined xml catalog
[xmltask] [Fatal Error] :3:291: The prefix "xmlns" cannot be bound to
any namespace explicitly; neither can the namespace for "xmlns" be bound
to any prefix explicitly.
[xmltask] org.xml.sax.SAXParseException: The prefix "xmlns" cannot be
bound to any namespace explicitly; neither can the namespace for "xmlns"
be bound to any prefix explicitly.
[xmltask] at org.apache.xerces.parsers.DOMParser.parse(Unknown
Source)
[xmltask] at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown
Source)
[xmltask] at
com.oopsconsultancy.xmltask.ant.XmlTask.documentFromStream(XmlTask.java:
356)
[xmltask] at
com.oopsconsultancy.xmltask.ant.XmlTask.documentFromFile(XmlTask.java:40
0)
[xmltask] at
com.oopsconsultancy.xmltask.ant.XmlTask.access$000(XmlTask.java:27)
[xmltask] at
com.oopsconsultancy.xmltask.ant.XmlTask$InputFile.getDocument(XmlTask.ja
va:216)
[xmltask] at
com.oopsconsultancy.xmltask.ant.XmlTask.execute(XmlTask.java:651)
[xmltask] at
org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275)
[xmltask] at org.apache.tools.ant.Task.perform(Task.java:364)
[xmltask] at org.apache.tools.ant.Target.execute(Target.java:341)
[xmltask] at
org.apache.tools.ant.Target.performTasks(Target.java:369)
[xmltask] at
org.apache.tools.ant.Project.executeSortedTargets(Project.java:1216)
[xmltask] at
org.apache.tools.ant.helper.SingleCheckExecutor.executeTargets(SingleChe
ckExecutor.java:37)
[xmltask] at
org.apache.tools.ant.Project.executeTargets(Project.java:1068)
[xmltask] at org.apache.tools.ant.taskdefs.Ant.execute(Ant.java:382)
[xmltask] at
com.oopsconsultancy.xmltask.CallAction.apply(CallAction.java:136)
[xmltask] at
com.oopsconsultancy.xmltask.XmlReplace.apply(XmlReplace.java:78)
[xmltask] at
com.oopsconsultancy.xmltask.XmlReplacement.apply(XmlReplacement.java:61)
[xmltask] at
com.oopsconsultancy.xmltask.ant.XmlTask.processDoc(XmlTask.java:705)
[xmltask] at
com.oopsconsultancy.xmltask.ant.XmlTask.execute(XmlTask.java:674)
[xmltask] at
org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275)
[xmltask] at org.apache.tools.ant.Task.perform(Task.java:364)
[xmltask] at org.apache.tools.ant.Target.execute(Target.java:341)
[xmltask] at
org.apache.tools.ant.Target.performTasks(Target.java:369)
[xmltask] at
org.apache.tools.ant.Project.executeSortedTargets(Project.java:1216)
[xmltask] at
org.apache.tools.ant.Project.executeTarget(Project.java:1185)
[xmltask] at
org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecut
or.java:40)
[xmltask] at
org.apache.tools.ant.Project.executeTargets(Project.java:1068)
[xmltask] at org.apache.tools.ant.Main.runBuild(Main.java:668)
[xmltask] at org.apache.tools.ant.Main.startAnt(Main.java:187)
[xmltask] at
org.apache.tools.ant.launch.Launcher.run(Launcher.java:246)
[xmltask] at
org.apache.tools.ant.launch.Launcher.main(Launcher.java:67)
update_xml_context: duration 0 seconds
[xmltask] Exiting D:\Temp\merge_contexts.xml.
read_xml: duration 0 seconds
BUILD FAILED
D:\Temp\merge_contexts.xml:14: The following error occurred while
executing this line:
D:\Temp\merge_contexts.xml:34: The prefix "xmlns" cannot be bound to any
namespace explicitly; neither can the namespace for "xmlns" be bound to
any prefix explicitly.
at
org.apache.tools.ant.ProjectHelper.addLocationToBuildException(ProjectHe
lper.java:539)
at org.apache.tools.ant.taskdefs.Ant.execute(Ant.java:384)
at com.oopsconsultancy.xmltask.CallAction.apply(CallAction.java:136)
at com.oopsconsultancy.xmltask.XmlReplace.apply(XmlReplace.java:78)
at
com.oopsconsultancy.xmltask.XmlReplacement.apply(XmlReplacement.java:61)
at com.oopsconsultancy.xmltask.ant.XmlTask.processDoc(XmlTask.java:705)
at com.oopsconsultancy.xmltask.ant.XmlTask.execute(XmlTask.java:674)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275)
at org.apache.tools.ant.Task.perform(Task.java:364)
at org.apache.tools.ant.Target.execute(Target.java:341)
at org.apache.tools.ant.Target.performTasks(Target.java:369)
at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1216)
at org.apache.tools.ant.Project.executeTarget(Project.java:1185)
at
org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecut
or.java:40)
at org.apache.tools.ant.Project.executeTargets(Project.java:1068)
at org.apache.tools.ant.Main.runBuild(Main.java:668)
at org.apache.tools.ant.Main.startAnt(Main.java:187)
at org.apache.tools.ant.launch.Launcher.run(Launcher.java:246)
at org.apache.tools.ant.launch.Launcher.main(Launcher.java:67)
Caused by: D:\Temp\merge_contexts.xml:34: The prefix "xmlns" cannot be
bound to any namespace explicitly; neither can the namespace for "xmlns"
be bound to any prefix explicitly.
at com.oopsconsultancy.xmltask.ant.XmlTask.execute(XmlTask.java:659)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275)
at org.apache.tools.ant.Task.perform(Task.java:364)
at org.apache.tools.ant.Target.execute(Target.java:341)
at org.apache.tools.ant.Target.performTasks(Target.java:369)
at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1216)
at
org.apache.tools.ant.helper.SingleCheckExecutor.executeTargets(SingleChe
ckExecutor.java:37)
at org.apache.tools.ant.Project.executeTargets(Project.java:1068)
at org.apache.tools.ant.taskdefs.Ant.execute(Ant.java:382)
... 17 more
--- Nested Exception ---
D:\Temp\merge_contexts.xml:34: The prefix "xmlns" cannot be bound to any
namespace explicitly; neither can the namespace for "xmlns" be bound to
any prefix explicitly.
at com.oopsconsultancy.xmltask.ant.XmlTask.execute(XmlTask.java:659)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275)
at org.apache.tools.ant.Task.perform(Task.java:364)
at org.apache.tools.ant.Target.execute(Target.java:341)
at org.apache.tools.ant.Target.performTasks(Target.java:369)
at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1216)
at
org.apache.tools.ant.helper.SingleCheckExecutor.executeTargets(SingleChe
ckExecutor.java:37)
at org.apache.tools.ant.Project.executeTargets(Project.java:1068)
at org.apache.tools.ant.taskdefs.Ant.execute(Ant.java:382)
at com.oopsconsultancy.xmltask.CallAction.apply(CallAction.java:136)
at com.oopsconsultancy.xmltask.XmlReplace.apply(XmlReplace.java:78)
at
com.oopsconsultancy.xmltask.XmlReplacement.apply(XmlReplacement.java:61)
at com.oopsconsultancy.xmltask.ant.XmlTask.processDoc(XmlTask.java:705)
at com.oopsconsultancy.xmltask.ant.XmlTask.execute(XmlTask.java:674)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275)
at org.apache.tools.ant.Task.perform(Task.java:364)
at org.apache.tools.ant.Target.execute(Target.java:341)
at org.apache.tools.ant.Target.performTasks(Target.java:369)
at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1216)
at org.apache.tools.ant.Project.executeTarget(Project.java:1185)
at
org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecut
or.java:40)
at org.apache.tools.ant.Project.executeTargets(Project.java:1068)
at org.apache.tools.ant.Main.runBuild(Main.java:668)
at org.apache.tools.ant.Main.startAnt(Main.java:187)
at org.apache.tools.ant.launch.Launcher.run(Launcher.java:246)
at org.apache.tools.ant.launch.Launcher.main(Launcher.java:67)
Dest XML (after processing)
======================
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<beans __NS1:xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"
xmlns="http://www.springframework.org/schema/beans"
xmlns:__NS1="http://www.w3.org/2000/xmlns/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<bean class="appl.logging.Logger111AlarmHandler"
id="Logger111AlarmHandler" scope="singleton">
<description>some description</description>
<property name="configurationRegistry"
ref="configurationRegistry"></property>
<property name="alarmManager"
ref="alarmManagerWrapper"></property>
</bean>
</beans>
The result is similar as in example 1:The 2nd insert fails, since the
first insert "corrupts" the destination XML. Of course this works
without the outputter attribute in the xmltask or within it with value
"default", but in this case the xml is not formatted :-(.
Thanks in advance. Regards, Gabo.
-------------------------------------------------------------------------
This SF.net email is sponsored by the 2008 JavaOne(SM) Conference
Don't miss this year's exciting event. There's still time to save $100.
Use priority code J8TL2D2.
http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone
_______________________________________________
Xmltask-users mailing list
Xmltask-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/xmltask-users