[MWAR-405] Workaround XStream incompatibility with Java9
Contributed by Enrico Olivelli, reviewed and applied by Robert Scholte

this closes #112


git-svn-id: https://svn.apache.org/repos/asf/maven/plugins/trunk@1792363 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/pom.xml b/pom.xml
index 30e1f35..1778751 100644
--- a/pom.xml
+++ b/pom.xml
@@ -72,6 +72,9 @@
     <contributor>
       <name>Hayarobi Park</name>
     </contributor>
+    <contributor>
+      <name>Enrico Olivelli</name>
+    </contributor>
   </contributors>
 
   <dependencies>
diff --git a/src/main/java/org/apache/maven/plugins/war/util/WebappStructureSerializer.java b/src/main/java/org/apache/maven/plugins/war/util/WebappStructureSerializer.java
index 2da2519..28969a0 100644
--- a/src/main/java/org/apache/maven/plugins/war/util/WebappStructureSerializer.java
+++ b/src/main/java/org/apache/maven/plugins/war/util/WebappStructureSerializer.java
@@ -20,7 +20,16 @@
  */
 
 import com.thoughtworks.xstream.XStream;
+import static com.thoughtworks.xstream.XStream.PRIORITY_NORMAL;
+import static com.thoughtworks.xstream.XStream.PRIORITY_VERY_LOW;
+import com.thoughtworks.xstream.converters.basic.IntConverter;
+import com.thoughtworks.xstream.converters.basic.StringConverter;
+import com.thoughtworks.xstream.converters.collections.CollectionConverter;
+import com.thoughtworks.xstream.converters.collections.MapConverter;
+import com.thoughtworks.xstream.converters.reflection.ReflectionConverter;
+import com.thoughtworks.xstream.converters.reflection.ReflectionProvider;
 import com.thoughtworks.xstream.io.xml.DomDriver;
+import com.thoughtworks.xstream.mapper.Mapper;
 import org.apache.maven.model.Dependency;
 import org.codehaus.plexus.util.IOUtil;
 import org.codehaus.plexus.util.ReaderFactory;
@@ -44,8 +53,21 @@
 
     static
     {
-        XSTREAM = new XStream( new DomDriver() );
-
+        XSTREAM = new XStream( new DomDriver() )
+        {
+            @Override
+            protected void setupConverters()
+            {
+                Mapper mapper = getMapper();
+                ReflectionProvider reflectionProvider = getReflectionProvider();
+                registerConverter(
+                    new ReflectionConverter( mapper, reflectionProvider ), PRIORITY_VERY_LOW );
+                registerConverter( new StringConverter(), PRIORITY_NORMAL );
+                registerConverter( new IntConverter(), PRIORITY_NORMAL );
+                registerConverter( new CollectionConverter( mapper ), PRIORITY_NORMAL );
+                registerConverter( new MapConverter( mapper ), PRIORITY_NORMAL );
+            }
+        };
         // Register aliases
         XSTREAM.alias( "webapp-structure", WebappStructure.class );
         XSTREAM.alias( "path-set", PathSet.class );