
On 04/11/2012 09:51 AM, Ofer Schreiber wrote:
----- Original Message -----
Hello,
The code that we use in engine-setup to modify JBoss AS XML configuration files uses the following pattern:
datasourceStr = ''' <datasource ...> ... </datasource> '''
xmlObj.addNodes("//datasource:subsystem/datasource:datasources", datasourceStr)
This looks correct but is in fact generating a incorrect XML document, as the tags being added are not associated to a namespace. The resulting XML file will be correct, but the temporary representation in memory is not. This causes problems if you later, before writing out the modified file, try to use xpath expressions matching the added nodes: there will be no match.
I would suggest that we change the pattern to something like this:
datasourceStr = ''' <any_dummy_tag xmlns="urn:jboss:domain:datasources:1.0"> <datasource ...> ... </datasource> </any_dummy_tag> ''' datasourceNodes = libxml2.parseDoc(datasourceStr).getRootElement().children
xmlObje.addNodes("//datasource:subsystem/datasource:datasources", datasourceNodes)
This way both the representation in memory and the resulting file are correct.
Le me know what you think.
As long as it work, I have no problem with that, sounds the right thing to do. btw- why would you want to use xpath on the "in memory" xml? (In your specific case I mean, not in general)
The specific case is that in the Fedora 17 JBoss AS RPM the default standaonle.xml file doesn't contain a <datasources> tag, so I wanted to do something like this: 1. Check if the datasources tag is there, if not add it. 2. Add the new datasource tag, like we do now. Step 2 fails: the xpath that we use in xmlObj.addNodes doesn't match the datasources tag added in step 1 because the in memory XML is not using the right namespace. -- Dirección Comercial: C/Jose Bardasano Baos, 9, Edif. Gorbea 3, planta 3ºD, 28016 Madrid, Spain Inscrita en el Reg. Mercantil de Madrid – C.I.F. B82657941 - Red Hat S.L.