Hi Maurizio, you are probably affected by this bug:
https://issues.apache.org/jira/browse/CONFIGURATION-573 It has been fixed for the upcoming 2.0 release, but is not available for Configuration 1.10. I fear, you will have to use the default expression engine for the time being :-( Oliver Am 25.11.2015 um 09:37 schrieb Maurizio Lattuada: > Hi @all, > > > @Siegfried: all my XSD files are stored locally. In fact, when I call > the "load()" method (setSchemaValidation is true), the XML is loaded > correctly. By the way, I introduced on purpose some errors in the XML > file and it was not correctly loaded, meaning that the validation is > really active and working (so, XSD files are correctly found). > > @Oliver: thanks for the hint, but I think there is a strange behavior > in my opinion. > > Iterator<String> it = xmlPersonConfiguration.getKeys(); > while (it.hasNext()) { > LOGGER.info(it.next()); > } > final String string = namespace + Tags.PERSON; // namespace is a > parameter equals to "p:" > xmlPerson = xmlPersonConfiguration.configurationsAt(string); > LOGGER.info("--> Found " + xmlPerson.size() + " persons (key: " + > string + ")"); > > This lead to have: > 2015-11-25 09:08:10,320 [c.v.t.b.r.ConfigReader:402 ] INFO - > parsePerson : p:person/p:title > 2015-11-25 09:08:10,324 [c.v.t.b.r.ConfigReader:402 ] INFO - > parsePerson : p:person/p:firstName > 2015-11-25 09:08:10,326 [c.v.t.b.r.ConfigReader:402 ] INFO - > parsePerson : p:person/p:lastName > ...all the tags here are correctly logged... > 2015-11-25 09:08:10,346 [c.v.t.b.r.ConfigReader:402 ] INFO - > parsePerson : @xmlns:ath > 2015-11-25 09:08:10,346 [c.v.t.b.r.ConfigReader:402 ] INFO - > parsePerson : @xmlns:com > 2015-11-25 09:08:10,346 [c.v.t.b.r.ConfigReader:402 ] INFO - > parsePerson : @xmlns:p > 2015-11-25 09:08:10,347 [c.v.t.b.r.ConfigReader:402 ] INFO - > parsePerson : @xmlns:xsi > 2015-11-25 09:08:10,347 [c.v.t.b.r.ConfigReader:402 ] INFO - > parsePerson : @xsi:schemaLocation > 2015-11-25 09:08:10,720 [c.v.t.b.r.ConfigReader:406 ] INFO - > parsePerson : --> Found 0 persons (key: p:person) > > Question: since my xml file has this structure (I omit the namespace > declaration for ease of reading): > <p:persons> > <p:person> > <p:title>...</p:title> > ... > </p:person> > <p:person> > <p:title>...</p:title> > ... > </p:person> > </p:persons> > > Why "p:person" is not in the keys, but only the sub-tags of p:person? > When I had my xml with the XSD, but without namespaces, looking for > "person" worked fine, so I was able to iterate on the 2 persons > available in the XML example above. > > By the way, I also tried to look for "p:person/p:title", that is a key > found by calling the "getKeys()" method: > xmlPerson = xmlPersonConfiguration.configurationsAt("p:person/p:title"); > LOGGER.info("--> Found " + xmlPerson.size() + " persons"); > > but the xmlPerson.size is always equal to 0. > FYI xmlPersonConfiguration is created and initialized as: > > XMLConfiguration xmlPersonConfiguration = new XMLConfiguration(); > xmlPersonConfiguration.setExpressionEngine(new > XPathExpressionEngine()); > xmlPersonConfiguration.setSchemaValidation(true); > xmlPersonConfiguration.setFileName("..."); > xmlPersonConfiguration.load(); > > If I don't call the "setExpressionEngine" method and I search for tags > like "p:person.p:title" or "p:person", all these entries are correctly > found and I can iterate over them. > > Any other suggestions? > > > thanks in advance for the feedback. > > 2015-11-24 21:26 GMT+01:00 Oliver Heger <[email protected]>: >> Hi Maurizio, >> >> in order to debug your problem, you can call the configuration's >> getKeys() method. From the iterator returned you should see the >> available keys. These keys can then also be used for querying properties. >> >> HTH >> Oliver >> >> Am 24.11.2015 um 13:54 schrieb Maurizio Lattuada: >>> Hi guys, >>> >>> I'm dealing with a strange problem while parsing an XML file (with >>> namespaces) using commons configuration 1.10. >>> First of all, let me say that when I call the "load()" method on the >>> following XML file (validation is active), it is loaded flawless. >>> >>> This is an extract of the xml to be parsed: >>> <!-- persons.xml--> >>> <?xml version="1.0" encoding="UTF-8"?> >>> <p:persons >>> action="create" >>> xmlns:ath="tdm:configuration:authentication" >>> xmlns:com="tdm:configuration:common" >>> xmlns:p="tdm:configuration:entities" >>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >>> xsi:schemaLocation="tdm:configuration:entities ../xsd/model/persons.xsd >>> "> >>> <p:person> >>> <p:title>Dr.</p:title> >>> ... >>> </p:person> >>> <p:person> >>> <p:title>Mr.</p:title> >>> ... >>> </p:person> >>> </p:person> >>> >>> This is an extract of the persons.xsd, as you can see there are a >>> couple of imports >>> <?xml version="1.0" encoding="UTF-8"?> >>> <xs:schema xmlns="tdm:configuration:entities" >>> xmlns:common="tdm:configuration:common" >>> xmlns:authentication="tdm:configuration:authentication" >>> targetNamespace="tdm:configuration:entities" >>> xmlns:xs="http://www.w3.org/2001/XMLSchema" >>> elementFormDefault="qualified"> >>> <xs:import schemaLocation="../namespace/common.xsd" >>> namespace="tdm:configuration:common" /> >>> <xs:import schemaLocation="auth_mean.xsd" >>> namespace="tdm:configuration:authentication" /> >>> .... >>> </xs:schema> >>> >>> >>> And finally an extract of the code to setup the parse and to read the >>> document: >>> XMLConfiguration xmlPersonConfiguration = new XMLConfiguration(); >>> xmlPersonConfiguration.setDelimiterParsingDisabled(true); // needed >>> because I've attribute with multiple values like "a,b,c" >>> xmlPersonConfiguration.setExpressionEngine(new XPathExpressionEngine()); >>> xmlPersonConfiguration.setSchemaValidation(true); >>> xmlPersonConfiguration.setFileName("persons.xml"); >>> xmlPersonConfiguration.load(); >>> List<HierarchicalConfiguration> xmlPersons; >>> xmlPersons = xmlPersonConfiguration.configurationsAt("person"); >>> >>> Shortly, either I try to search for (last statement): >>> * person >>> * p:person >>> * //person >>> * //p:person >>> * /p:persons/p:person >>> *... >>> >>> No elements are found. >>> According to the commons configuration documentation, "The XML Parser >>> will then use the schema defined in the XML document to validate it. >>> Enabling schema validation will also enable the parser's namespace >>> support.". >>> Please note: before I had such xml and xsd files without namespaces >>> and everything worked fine. >>> >>> I'm pretty sure I'm doing something wrong, but I can't figure what. >>> Any idea about this behavior? >>> >>> Thanks for your kind feedback >>> >>> -- >>> Maurizio Lattuada >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: [email protected] >>> For additional commands, e-mail: [email protected] >>> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: [email protected] >> For additional commands, e-mail: [email protected] >> > > > --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
