Hi Aaron,
thanks for sharing this!
Oliver
Am 17.05.2016 um 16:34 schrieb Aaron Gadberry:
> Hi,
>
> To answer my own question, the document builder I was using was not
> namespace or xinclude aware. Acquiring a document builder manually and
> setting a custom document builder on the XMLConfiguration allowed XInclude
> to function as intended.
>
> Here is the updated and functional code and output.
>
> package test;
>
> import java.io.File;
>
> import javax.xml.parsers.DocumentBuilder;
> import javax.xml.parsers.DocumentBuilderFactory;
> import javax.xml.parsers.ParserConfigurationException;
>
> import org.apache.commons.configuration2.ConfigurationUtils;
> import org.apache.commons.configuration2.XMLConfiguration;
> import
> org.apache.commons.configuration2.builder.FileBasedConfigurationBuilder;
> import org.apache.commons.configuration2.builder.fluent.Parameters;
> import org.apache.commons.configuration2.ex.ConfigurationException;
>
> public class TestConfiguration {
> public static void main(String[] args) throws ConfigurationException {
> try {
> DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
> dbf.setXIncludeAware(true);
> dbf.setNamespaceAware(true);
> DocumentBuilder db = dbf.newDocumentBuilder();
> Parameters params = new Parameters();
> FileBasedConfigurationBuilder<XMLConfiguration> builder = new
> FileBasedConfigurationBuilder<XMLConfiguration>(
> XMLConfiguration.class);
> builder.configure(params.xml()
> .setFile(new File("configs/test_external.xml"))
> .setDocumentBuilder(db));
> XMLConfiguration config = builder.getConfiguration();
> System.out.println(ConfigurationUtils.toString(config));
> } catch (ParserConfigurationException e) {
> e.printStackTrace();
> }
>
> }
> }
>
>
> New Output:
>
> [@xmlns:xi]=http://www.w3.org/2001/XInclude
> ExternalElements.InternalRoot[@xml:base]=test_internal.xml
> ExternalElements.InternalRoot.InternalElement[@name]=[1, 2, 3]
>
>
> Thanks!
>
>
> On Tue, May 17, 2016 at 8:06 AM, Aaron Gadberry <[email protected]> wrote:
>
>> Hi, My question is specifically on commons-configuration2.
>>
>> I cannot seem to use XInclude within an XMLConfiguration file. Perhaps I
>> am doing something incorrectly, or perhaps it is unsupported, but I can't
>> seem to find documentation either way.
>>
>> This is my example program, files and output.
>>
>> TestConfiguration.java
>>
>> package test;
>>
>> import java.io.File;
>>
>> import org.apache.commons.configuration2.ConfigurationUtils;
>> import org.apache.commons.configuration2.XMLConfiguration;
>> import
>> org.apache.commons.configuration2.builder.FileBasedConfigurationBuilder;
>> import org.apache.commons.configuration2.builder.fluent.Parameters;
>> import org.apache.commons.configuration2.ex.ConfigurationException;
>>
>> public class TestConfiguration {
>> public static void main(String[] args) throws ConfigurationException {
>> Parameters params = new Parameters();
>> FileBasedConfigurationBuilder<XMLConfiguration> builder = new
>> FileBasedConfigurationBuilder<XMLConfiguration>(
>> XMLConfiguration.class);
>> builder.configure(params.fileBased().setFile(
>> new File("configs/test_external.xml")));
>> XMLConfiguration config = builder.getConfiguration();
>> System.out.println(ConfigurationUtils.toString(config));
>> }
>> }
>>
>>
>> configs/test_external.xml
>>
>> <?xml version="1.0" encoding="UTF-8"?>
>> <ExternalRoot>
>> <ExternalElements>
>> <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
>> href="configs/test_internal.xml" />
>> </ExternalElements>
>> </ExternalRoot>
>>
>>
>> configs/test_internal.xml
>>
>> <?xml version="1.0" encoding="UTF-8"?>
>> <InternalRoot>
>> <InternalElement name="1" />
>> <InternalElement name="2" />
>> <InternalElement name="3" />
>> </InternalRoot>
>>
>>
>> Result:
>>
>> ExternalElements.xi:include[@xmlns:xi]=http://www.w3.org/2001/XInclude
>> ExternalElements.xi:include[@href]=configs/test_internal.xml
>>
>>
>> Expected Result:
>>
>> ExternalElements.InternalRoot.InternalElement[@name]=1,2,3
>>
>>
>> Any help is appreciated!
>>
>> Thanks,
>>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]