Browse Source

Android: Added setNamespaceAware(true) to ogre xml loader if running on android

git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@7754 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
kim..ng 14 years ago
parent
commit
09b475d893

+ 21 - 2
engine/src/ogre/com/jme3/scene/plugins/ogre/MeshLoader.java

@@ -52,6 +52,7 @@ import com.jme3.scene.VertexBuffer;
 import com.jme3.scene.VertexBuffer.Format;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.scene.VertexBuffer.Usage;
+import com.jme3.system.JmeSystem;
 import com.jme3.util.BufferUtils;
 import com.jme3.util.IntMap;
 import com.jme3.util.IntMap.Entry;
@@ -67,6 +68,10 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.logging.Level;
 import java.util.logging.Logger;
+
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.parsers.SAXParserFactory;
+
 import org.xml.sax.Attributes;
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
@@ -789,8 +794,18 @@ public class MeshLoader extends DefaultHandler implements AssetLoader {
                 }
 
             }
-
-            XMLReader xr = XMLReaderFactory.createXMLReader();
+            
+            // Added by larynx 25.06.2011
+            // Android needs the namespace aware flag set to true                 
+            XMLReader xr;
+            if (JmeSystem.getFullName().toUpperCase().contains("ANDROID")) {
+                SAXParserFactory factory = SAXParserFactory.newInstance();
+                factory.setNamespaceAware(true);
+                xr = factory.newSAXParser().getXMLReader();                
+            } else {
+                xr = XMLReaderFactory.createXMLReader();
+            }
+            
             xr.setContentHandler(this);
             xr.setErrorHandler(this);
             InputStreamReader r = new InputStreamReader(info.openStream());
@@ -802,6 +817,10 @@ public class MeshLoader extends DefaultHandler implements AssetLoader {
             IOException ioEx = new IOException("Error while parsing Ogre3D mesh.xml");
             ioEx.initCause(ex);
             throw ioEx;
+        } catch (ParserConfigurationException ex) {
+            IOException ioEx = new IOException("Error while parsing Ogre3D mesh.xml");
+            ioEx.initCause(ex);
+            throw ioEx;
         }
 
     }

+ 20 - 1
engine/src/ogre/com/jme3/scene/plugins/ogre/SceneLoader.java

@@ -45,6 +45,7 @@ import com.jme3.math.Quaternion;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Node;
 import com.jme3.scene.Spatial;
+import com.jme3.system.JmeSystem;
 import com.jme3.util.xml.SAXUtil;
 import java.io.IOException;
 import java.io.InputStreamReader;
@@ -52,6 +53,9 @@ import java.util.Stack;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.parsers.SAXParserFactory;
+
 import org.xml.sax.Attributes;
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
@@ -351,7 +355,18 @@ public class SceneLoader extends DefaultHandler implements AssetLoader {
                 logger.log(Level.WARNING, "Cannot locate material file {0}", ex.getMessage());
             }
 
-            XMLReader xr = XMLReaderFactory.createXMLReader();
+            
+            // Added by larynx 25.06.2011
+            // Android needs the namespace aware flag set to true 
+            XMLReader xr;
+            if (JmeSystem.getFullName().toUpperCase().contains("ANDROID")) {
+                SAXParserFactory factory = SAXParserFactory.newInstance();
+                factory.setNamespaceAware(true);
+                xr = factory.newSAXParser().getXMLReader();                
+            } else {
+                xr = XMLReaderFactory.createXMLReader();
+            }
+            
             xr.setContentHandler(this);
             xr.setErrorHandler(this);
             InputStreamReader r = new InputStreamReader(info.openStream());
@@ -362,6 +377,10 @@ public class SceneLoader extends DefaultHandler implements AssetLoader {
             IOException ioEx = new IOException("Error while parsing Ogre3D dotScene");
             ioEx.initCause(ex);
             throw ioEx;
+        } catch (ParserConfigurationException ex) {
+            IOException ioEx = new IOException("Error while parsing Ogre3D dotScene");
+            ioEx.initCause(ex);
+            throw ioEx;
         }
     }
 

+ 24 - 1
engine/src/ogre/com/jme3/scene/plugins/ogre/SkeletonLoader.java

@@ -40,6 +40,7 @@ import com.jme3.asset.AssetLoader;
 import com.jme3.asset.AssetManager;
 import com.jme3.math.Quaternion;
 import com.jme3.math.Vector3f;
+import com.jme3.system.JmeSystem;
 import com.jme3.util.xml.SAXUtil;
 import java.io.IOException;
 import java.io.InputStream;
@@ -50,6 +51,11 @@ import java.util.Iterator;
 import java.util.Map;
 import java.util.Stack;
 import java.util.logging.Logger;
+
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+
 import org.xml.sax.Attributes;
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
@@ -252,7 +258,18 @@ public class SkeletonLoader extends DefaultHandler implements AssetLoader {
 
     public Object load(InputStream in) throws IOException {
         try {
-            XMLReader xr = XMLReaderFactory.createXMLReader();
+            
+            // Added by larynx 25.06.2011
+            // Android needs the namespace aware flag set to true 
+            XMLReader xr;
+            if (JmeSystem.getFullName().toUpperCase().contains("ANDROID")) {
+                SAXParserFactory factory = SAXParserFactory.newInstance();
+                factory.setNamespaceAware(true);
+                xr = factory.newSAXParser().getXMLReader();                
+            } else {
+                xr = XMLReaderFactory.createXMLReader();
+            }
+                                    
             xr.setContentHandler(this);
             xr.setErrorHandler(this);
             InputStreamReader r = new InputStreamReader(in);
@@ -269,7 +286,13 @@ public class SkeletonLoader extends DefaultHandler implements AssetLoader {
             ioEx.initCause(ex);
             fullReset();
             throw ioEx;
+        } catch (ParserConfigurationException ex) {
+            IOException ioEx = new IOException("Error while parsing Ogre3D dotScene");
+            ioEx.initCause(ex);
+            fullReset();
+            throw ioEx;
         }
+        
     }
 
     public Object load(AssetInfo info) throws IOException {