Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnton Tanasenko2015-04-19 21:56:37 +0000
committerStuart McCulloch2015-04-20 22:11:16 +0000
commit9daf0cde38616f2107ffe788f9c55691a67dc138 (patch)
tree4737ee9f1fd1607182d9b2dc3727169654d5795f
parent6c427928b0c1760c44758a7211c5dda2403868a3 (diff)
downloadorg.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.java15
-rw-r--r--org.eclipse.sisu.plexus/src/org/eclipse/sisu/plexus/PlexusXmlBeanConverter.java18
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

Back to the top