You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@commons.apache.org by Aaron Gadberry <aa...@gadberry.com> on 2016/05/17 13:06:10 UTC

Re: XInclude Support

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,

Re: XInclude Support

Posted by Oliver Heger <ol...@oliver-heger.de>.
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 <aa...@gadberry.com> 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: user-unsubscribe@commons.apache.org
For additional commands, e-mail: user-help@commons.apache.org


Re: XInclude Support

Posted by Aaron Gadberry <aa...@gadberry.com>.
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 <aa...@gadberry.com> 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,
>