Move XML object factory logic to libcore

It makes sense to hide the details of the parser implementation
(and other similar objects) in libcore so it could be changed.

Test: build
Bug: 111055375
Merged-In: I475dec1bc66518b5ec2491abd49d11f5634c86b3
Change-Id: I475dec1bc66518b5ec2491abd49d11f5634c86b3
diff --git a/ksoap2-base/src/main/java/org/ksoap2/serialization/SoapSerializationEnvelope.java b/ksoap2-base/src/main/java/org/ksoap2/serialization/SoapSerializationEnvelope.java
index dae09d2..03cca04 100644
--- a/ksoap2-base/src/main/java/org/ksoap2/serialization/SoapSerializationEnvelope.java
+++ b/ksoap2-base/src/main/java/org/ksoap2/serialization/SoapSerializationEnvelope.java
@@ -26,13 +26,13 @@
 import org.xmlpull.v1.XmlPullParserException;
 import org.xmlpull.v1.XmlSerializer;
 
+import libcore.util.XmlObjectFactory;
+
 import java.io.IOException;
 import java.util.Hashtable;
 import java.util.Vector;
 import java.io.ByteArrayOutputStream;
 
-import org.kxml2.io.*;
-
 /**
  * @author Stefan Haustein
  *
@@ -639,7 +639,9 @@
                         name.equals("MgmtTree") // format v6
                 ) {
                     ByteArrayOutputStream bos = new ByteArrayOutputStream();
-                    XmlSerializer xw = new KXmlSerializer();
+                    // Android-changed: Use XmlObjectFactory instead of a specific implementation.
+                    // XmlSerializer xw = new KXmlSerializer();
+                    XmlSerializer xw = XmlObjectFactory.newXmlSerializer();
                     xw.setOutput(bos, "UTF-8");
                     xw.startTag((dotNet) ? "" : namespace, name);
                     if (!implicitTypes) {
diff --git a/ksoap2-base/src/main/java/org/ksoap2/transport/Transport.java b/ksoap2-base/src/main/java/org/ksoap2/transport/Transport.java
index b2f6587..5ccd18f 100644
--- a/ksoap2-base/src/main/java/org/ksoap2/transport/Transport.java
+++ b/ksoap2-base/src/main/java/org/ksoap2/transport/Transport.java
@@ -27,8 +27,9 @@
 import java.io.*;
 import java.net.Proxy;
 
+import libcore.util.XmlObjectFactory;
+
 import org.ksoap2.*;
-import org.kxml2.io.*;
 import org.xmlpull.v1.*;
 
 /**
@@ -110,7 +111,9 @@
      */
     protected void parseResponse(SoapEnvelope envelope, InputStream is)
             throws XmlPullParserException, IOException {
-        XmlPullParser xp = new KXmlParser();
+        // Android-changed: Use XmlObjectFactory instead of a specific implementation.
+        // XmlPullParser xp = new KXmlParser();
+        XmlPullParser xp = XmlObjectFactory.newXmlPullParser();
         xp.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, true);
         xp.setInput(is, null);
         envelope.parse(xp);
@@ -125,8 +128,12 @@
         byte result[] = null;
         bos.write(xmlVersionTag.getBytes());
         System.out.println("bos.write");
-        XmlSerializer xw = new KXmlSerializer();
-        System.out.println("new KXmlSerializer");
+        // BEGIN Android-changed: Use XmlObjectFactory instead of a specific implementation.
+        // XmlSerializer xw = new KXmlSerializer();
+        // System.out.println("new KXmlSerializer");
+        XmlSerializer xw = XmlObjectFactory.newXmlSerializer();
+        System.out.println("newXmlSerializer()");
+        // END Android-changed: Use XmlObjectFactory instead of a specific implementation.
         xw.setOutput(bos, encoding);
         System.out.println("xw.setOutput");
         envelope.write(xw);