From 777412ef5adfa6284abea45acb9873a3921eb2be Mon Sep 17 00:00:00 2001 From: kimxilxyong Date: Mon, 27 Jun 2011 06:00:42 +0000 Subject: [PATCH] Android: Added setNamespaceAware(true) to ogre xml loader if running on android git-svn-id: http://jmonkeyengine.googlecode.com/svn/trunk@7754 75d07b2b-3a1a-0410-a2c5-0572b91ccdca --- .../com/jme3/scene/plugins/ogre/MeshLoader.java | 23 ++++++++++++++++++-- .../com/jme3/scene/plugins/ogre/SceneLoader.java | 21 +++++++++++++++++- .../jme3/scene/plugins/ogre/SkeletonLoader.java | 25 +++++++++++++++++++++- 3 files changed, 65 insertions(+), 4 deletions(-) diff --git a/engine/src/ogre/com/jme3/scene/plugins/ogre/MeshLoader.java b/engine/src/ogre/com/jme3/scene/plugins/ogre/MeshLoader.java index 9c4cd97fe..d3b62149a 100644 --- a/engine/src/ogre/com/jme3/scene/plugins/ogre/MeshLoader.java +++ b/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; } } diff --git a/engine/src/ogre/com/jme3/scene/plugins/ogre/SceneLoader.java b/engine/src/ogre/com/jme3/scene/plugins/ogre/SceneLoader.java index c45233889..39da3c283 100644 --- a/engine/src/ogre/com/jme3/scene/plugins/ogre/SceneLoader.java +++ b/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; } } diff --git a/engine/src/ogre/com/jme3/scene/plugins/ogre/SkeletonLoader.java b/engine/src/ogre/com/jme3/scene/plugins/ogre/SkeletonLoader.java index 9424f2619..5cd0102fe 100644 --- a/engine/src/ogre/com/jme3/scene/plugins/ogre/SkeletonLoader.java +++ b/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 { -- 2.11.0