diff options
author | Anton Tanasenko | 2015-04-19 21:56:37 +0000 |
---|---|---|
committer | Stuart McCulloch | 2015-04-20 22:11:16 +0000 |
commit | 9daf0cde38616f2107ffe788f9c55691a67dc138 (patch) | |
tree | 4737ee9f1fd1607182d9b2dc3727169654d5795f | |
parent | 6c427928b0c1760c44758a7211c5dda2403868a3 (diff) | |
download | org.eclipse.sisu.plexus-9daf0cde38616f2107ffe788f9c55691a67dc138.tar.gz org.eclipse.sisu.plexus-9daf0cde38616f2107ffe788f9c55691a67dc138.tar.xz org.eclipse.sisu.plexus-9daf0cde38616f2107ffe788f9c55691a67dc138.zip |
Bug 464959: Add support for Xpp3Dom type in PlexusXmlBeanConverte
Change-Id: I1813e494eca17f55ef5eb44aa396188682aef8b0
Signed-off-by: Anton Tanasenko <atg.sleepless@gmail.com>
Signed-off-by: Stuart McCulloch <mcculls@gmail.com>
-rw-r--r-- | org.eclipse.sisu.plexus.tests/src/org/eclipse/sisu/plexus/PlexusConfigurationTest.java | 15 | ||||
-rw-r--r-- | org.eclipse.sisu.plexus/src/org/eclipse/sisu/plexus/PlexusXmlBeanConverter.java | 18 |
2 files changed, 33 insertions, 0 deletions
diff --git a/org.eclipse.sisu.plexus.tests/src/org/eclipse/sisu/plexus/PlexusConfigurationTest.java b/org.eclipse.sisu.plexus.tests/src/org/eclipse/sisu/plexus/PlexusConfigurationTest.java index d99e2db..5a29f75 100644 --- a/org.eclipse.sisu.plexus.tests/src/org/eclipse/sisu/plexus/PlexusConfigurationTest.java +++ b/org.eclipse.sisu.plexus.tests/src/org/eclipse/sisu/plexus/PlexusConfigurationTest.java @@ -16,6 +16,7 @@ import junit.framework.TestCase; import org.codehaus.plexus.component.annotations.Component; import org.codehaus.plexus.component.annotations.Configuration; +import org.codehaus.plexus.util.xml.Xpp3Dom; import org.eclipse.sisu.bean.BeanManager; import org.eclipse.sisu.bean.BeanProperty; import org.eclipse.sisu.bean.PropertyBinding; @@ -103,6 +104,9 @@ public class PlexusConfigurationTest @Configuration( "5" ) double e; + + @Configuration( "<container><xml><element/></xml></container>" ) + XmlContainerComponent xmlContainer; } @Component( role = Object.class ) @@ -122,6 +126,11 @@ public class PlexusConfigurationTest } } } + + public static class XmlContainerComponent + { + Xpp3Dom xml; + } public void testConfiguration() { @@ -130,6 +139,12 @@ public class PlexusConfigurationTest assertEquals( 3, component.c ); assertEquals( Double.valueOf( 4.0 ), component.d ); assertEquals( 5.0, component.e, 0 ); + + assertNotNull( component.xmlContainer ); + assertNotNull( component.xmlContainer.xml ); + assertEquals( "xml", component.xmlContainer.xml.getName() ); + assertEquals( 1, component.xmlContainer.xml.getChildCount() ); + assertEquals( "element", component.xmlContainer.xml.getChild(0).getName() ); assertEquals( 1, ComponentManager.SEEN ); diff --git a/org.eclipse.sisu.plexus/src/org/eclipse/sisu/plexus/PlexusXmlBeanConverter.java b/org.eclipse.sisu.plexus/src/org/eclipse/sisu/plexus/PlexusXmlBeanConverter.java index 8b22c9d..fa84793 100644 --- a/org.eclipse.sisu.plexus/src/org/eclipse/sisu/plexus/PlexusXmlBeanConverter.java +++ b/org.eclipse.sisu.plexus/src/org/eclipse/sisu/plexus/PlexusXmlBeanConverter.java @@ -24,6 +24,8 @@ import javax.inject.Inject; import org.codehaus.plexus.util.xml.pull.MXParser; import org.codehaus.plexus.util.xml.pull.XmlPullParser; import org.codehaus.plexus.util.xml.pull.XmlPullParserException; +import org.codehaus.plexus.util.xml.Xpp3Dom; +import org.codehaus.plexus.util.xml.Xpp3DomBuilder; import org.eclipse.sisu.bean.BeanProperties; import org.eclipse.sisu.bean.BeanProperty; import org.eclipse.sisu.inject.Logs; @@ -109,6 +111,10 @@ public final class PlexusXmlBeanConverter parser.require( XmlPullParser.START_TAG, null, null ); final Class<?> rawType = toType.getRawType(); + if ( Xpp3Dom.class.isAssignableFrom( rawType ) ) + { + return parseXpp3Dom( parser ); + } if ( Properties.class.isAssignableFrom( rawType ) ) { return parseProperties( parser ); @@ -129,6 +135,18 @@ public final class PlexusXmlBeanConverter } /** + * Parses an XML subtree and converts it to the {@link Xpp3Dom} type. + * + * @param parser The XML parser + * @return Converted Xpp3Dom instance + */ + private static Xpp3Dom parseXpp3Dom( final XmlPullParser parser ) + throws Exception + { + return Xpp3DomBuilder.build( parser ); + } + + /** * Parses a sequence of XML elements and converts them to the appropriate {@link Properties} type. * * @param parser The XML parser |