Repository: olingo-odata2 Updated Branches: refs/heads/OLINGO-231_PocForAndroid a4f5d6104 -> 2d262c3e6
[OLINGO-231] Renamed AndroidXml classes and added AndroidXmlWriter Project: http://git-wip-us.apache.org/repos/asf/olingo-odata2/repo Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata2/commit/2d262c3e Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata2/tree/2d262c3e Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata2/diff/2d262c3e Branch: refs/heads/OLINGO-231_PocForAndroid Commit: 2d262c3e6b62b52805daad958a19e6aa26faf1dd Parents: a4f5d61 Author: Michael Bolz <[email protected]> Authored: Wed Apr 9 12:46:59 2014 +0200 Committer: Michael Bolz <[email protected]> Committed: Wed Apr 9 12:47:12 2014 +0200 ---------------------------------------------------------------------- .../odata2/android/xml/AndroidXmlFactory.java | 19 +++ .../odata2/android/xml/AndroidXmlReader.java | 61 ++++---- .../android/xml/AndroidXmlReaderFactory.java | 11 -- .../odata2/android/xml/AndroidXmlWriter.java | 143 +++++++++++++++++++ .../odata2/core/xml/JavaxStaxReaderWrapper.java | 2 +- 5 files changed, 199 insertions(+), 37 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/2d262c3e/odata2-android/src/main/java/org/apache/olingo/odata2/android/xml/AndroidXmlFactory.java ---------------------------------------------------------------------- diff --git a/odata2-android/src/main/java/org/apache/olingo/odata2/android/xml/AndroidXmlFactory.java b/odata2-android/src/main/java/org/apache/olingo/odata2/android/xml/AndroidXmlFactory.java new file mode 100644 index 0000000..60a8f06 --- /dev/null +++ b/odata2-android/src/main/java/org/apache/olingo/odata2/android/xml/AndroidXmlFactory.java @@ -0,0 +1,19 @@ +package org.apache.olingo.odata2.android.xml; + +import org.apache.olingo.odata2.api.ep.EntityProviderException; +import org.apache.olingo.odata2.api.xml.XMLStreamReader; +import org.apache.olingo.odata2.api.xml.XMLStreamReaderFactory; +import org.apache.olingo.odata2.api.xml.XMLStreamWriter; +import org.apache.olingo.odata2.api.xml.XMLStreamWriterFactory; + +public class AndroidXmlFactory implements XMLStreamReaderFactory, XMLStreamWriterFactory { + @Override + public XMLStreamReader createXMLStreamReader(Object content) { + return new AndroidXmlReader(content); + } + + @Override + public XMLStreamWriter createXMLStreamWriter(Object content) throws EntityProviderException { + return new AndroidXmlWriter(content); + } +} http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/2d262c3e/odata2-android/src/main/java/org/apache/olingo/odata2/android/xml/AndroidXmlReader.java ---------------------------------------------------------------------- diff --git a/odata2-android/src/main/java/org/apache/olingo/odata2/android/xml/AndroidXmlReader.java b/odata2-android/src/main/java/org/apache/olingo/odata2/android/xml/AndroidXmlReader.java index 6a1738a..91af430 100644 --- a/odata2-android/src/main/java/org/apache/olingo/odata2/android/xml/AndroidXmlReader.java +++ b/odata2-android/src/main/java/org/apache/olingo/odata2/android/xml/AndroidXmlReader.java @@ -17,12 +17,12 @@ public class AndroidXmlReader implements XMLStreamReader { private final InputStream xmlContentStream; private final XmlPullParser parser; - + public AndroidXmlReader(Object content) { if(content instanceof InputStream) { parser = Xml.newPullParser(); this.xmlContentStream = (InputStream) content; - + try { parser.setInput(xmlContentStream, null); } catch (XmlPullParserException e) { @@ -32,7 +32,7 @@ public class AndroidXmlReader implements XMLStreamReader { throw new IllegalArgumentException("Unsupported input content. Only InputStream is supported."); } } - + @Override public void close() throws XMLStreamException { } @@ -71,7 +71,18 @@ public class AndroidXmlReader implements XMLStreamReader { @Override public String getElementText() throws XMLStreamException { // FIXME - return parser.getText(); + String text; + try { + if(parser.getEventType() == XmlPullParser.START_TAG) { + parser.next(); + } + text = parser.getText(); + parser.next(); + } catch (Exception e) { + e.printStackTrace(); + throw new XMLStreamException("Failure during step forward after 'getText'.", e); + } + return text; } @Override @@ -99,7 +110,7 @@ public class AndroidXmlReader implements XMLStreamReader { String tmp = null; try { int depth = parser.getDepth(); - tmp = parser.getNamespacePrefix(depth); + tmp = parser.getNamespacePrefix(depth); } catch (XmlPullParserException e) { e.printStackTrace(); } @@ -132,7 +143,8 @@ public class AndroidXmlReader implements XMLStreamReader { public String getNamespacePrefix(int arg0) { // FIXME try { - return parser.getNamespacePrefix(arg0); + String prefix = parser.getNamespacePrefix(arg0); + return prefix; } catch (XmlPullParserException e) { e.printStackTrace(); throw new RuntimeException("Android", e); @@ -153,8 +165,8 @@ public class AndroidXmlReader implements XMLStreamReader { String nsUri = parser.getNamespace(); return nsUri; } - - + + @Override public String getNamespaceURI(int index) { @@ -162,9 +174,9 @@ public class AndroidXmlReader implements XMLStreamReader { try { int nsCount = getNamespaceCount(); if(index > nsCount) { - throw new RuntimeException("Out of namespace index"); + throw new RuntimeException("Out of namespace index"); } - int depthAndIndex = parser.getDepth() + index; + int depthAndIndex = parser.getDepth() + index - 1; String namespaceUri = parser.getNamespaceUri(depthAndIndex); return namespaceUri; } catch (XmlPullParserException e) { @@ -225,8 +237,8 @@ public class AndroidXmlReader implements XMLStreamReader { // TODO Auto-generated method stub try { int eventType = parser.getEventType(); - return eventType == XmlPullParser.END_DOCUMENT - || eventType == XmlPullParser.END_TAG; + return eventType == XmlPullParser.END_DOCUMENT + || eventType == XmlPullParser.END_TAG; } catch (XmlPullParserException e) { // TODO Auto-generated catch block e.printStackTrace(); @@ -238,8 +250,8 @@ public class AndroidXmlReader implements XMLStreamReader { public boolean isStartElement() { try { int eventType = parser.getEventType(); - return eventType == XmlPullParser.START_DOCUMENT - || eventType == XmlPullParser.START_TAG; + return eventType == XmlPullParser.START_DOCUMENT + || eventType == XmlPullParser.START_TAG; } catch (XmlPullParserException e) { // TODO Auto-generated catch block e.printStackTrace(); @@ -274,11 +286,11 @@ public class AndroidXmlReader implements XMLStreamReader { } @Override - public void require(int eventType, String arg1, String arg2) throws XMLStreamException { + public void require(int eventType, String namespace, String tag) throws XMLStreamException { // TODO Auto-generated method stub try { int xmlPullEventType = mapEventType(eventType); - parser.require(xmlPullEventType, arg1, arg2); + parser.require(xmlPullEventType, namespace, tag); } catch (XmlPullParserException e) { throw new XMLStreamException("Requirement not fulfilled", e) {}; } catch (IOException e) { @@ -288,15 +300,14 @@ public class AndroidXmlReader implements XMLStreamReader { private int mapEventType(int eventType) { switch (eventType) { - case XMLStreamConstants.START_ELEMENT: return XmlPullParser.START_TAG; - case XMLStreamConstants.END_ELEMENT: return XmlPullParser.END_TAG; - case XMLStreamConstants.START_DOCUMENT: return XmlPullParser.START_DOCUMENT; - case XMLStreamConstants.END_DOCUMENT: return XmlPullParser.END_DOCUMENT; - case XMLStreamConstants.DTD: return XmlPullParser.DOCDECL; - default: - throw new IllegalArgumentException("Unknown event type ('" + - eventType + "') for mapping."); + case XMLStreamConstants.START_ELEMENT: return XmlPullParser.START_TAG; + case XMLStreamConstants.END_ELEMENT: return XmlPullParser.END_TAG; + case XMLStreamConstants.START_DOCUMENT: return XmlPullParser.START_DOCUMENT; + case XMLStreamConstants.END_DOCUMENT: return XmlPullParser.END_DOCUMENT; + case XMLStreamConstants.DTD: return XmlPullParser.DOCDECL; + default: + throw new IllegalArgumentException("Unknown event type ('" + + eventType + "') for mapping."); } } - } http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/2d262c3e/odata2-android/src/main/java/org/apache/olingo/odata2/android/xml/AndroidXmlReaderFactory.java ---------------------------------------------------------------------- diff --git a/odata2-android/src/main/java/org/apache/olingo/odata2/android/xml/AndroidXmlReaderFactory.java b/odata2-android/src/main/java/org/apache/olingo/odata2/android/xml/AndroidXmlReaderFactory.java deleted file mode 100644 index 9730c16..0000000 --- a/odata2-android/src/main/java/org/apache/olingo/odata2/android/xml/AndroidXmlReaderFactory.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.apache.olingo.odata2.android.xml; - -import org.apache.olingo.odata2.api.xml.XMLStreamReader; -import org.apache.olingo.odata2.api.xml.XMLStreamReaderFactory; - -public class AndroidXmlReaderFactory implements XMLStreamReaderFactory { - @Override - public XMLStreamReader createXMLStreamReader(Object content) { - return new AndroidXmlReader(content); - } -} http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/2d262c3e/odata2-android/src/main/java/org/apache/olingo/odata2/android/xml/AndroidXmlWriter.java ---------------------------------------------------------------------- diff --git a/odata2-android/src/main/java/org/apache/olingo/odata2/android/xml/AndroidXmlWriter.java b/odata2-android/src/main/java/org/apache/olingo/odata2/android/xml/AndroidXmlWriter.java new file mode 100644 index 0000000..67686e5 --- /dev/null +++ b/odata2-android/src/main/java/org/apache/olingo/odata2/android/xml/AndroidXmlWriter.java @@ -0,0 +1,143 @@ +package org.apache.olingo.odata2.android.xml; + +import org.apache.olingo.odata2.api.ep.EntityProviderException; +import org.apache.olingo.odata2.api.xml.XMLStreamException; +import org.apache.olingo.odata2.api.xml.XMLStreamWriter; + +import java.io.IOException; +import java.io.OutputStream; +import java.io.PrintWriter; +import java.io.Writer; + +/** + */ +public class AndroidXmlWriter implements XMLStreamWriter { + + private Writer writer; + + public AndroidXmlWriter(Object output) throws EntityProviderException { + if (output instanceof OutputStream) { + writer = new PrintWriter((OutputStream) output); + } else if (output instanceof Writer) { + writer = (Writer) output; + } + } + + @Override + public void flush() throws XMLStreamException { + write("flush"); + try { + if(writer != null) { + writer.flush(); + } + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + @Override + public void setDefaultNamespace(String arg0) throws XMLStreamException { + write("setDefaultNamespace", arg0); + } + + @Override + public void setPrefix(String arg0, String arg1) throws XMLStreamException { + write("setPrefix", arg0, arg1); + + } + + @Override + public void writeAttribute(String arg0, String arg1) throws XMLStreamException { + write("writeAttribute", arg0, arg1); + + } + + @Override + public void writeAttribute(String arg0, String arg1, String arg2, String arg3) throws XMLStreamException { + write("writeAttribute", arg0, arg1, arg2); + + } + + @Override + public void writeCharacters(String arg0) throws XMLStreamException { + write("writeCharacters", arg0); + + } + + @Override + public void writeDefaultNamespace(String arg0) throws XMLStreamException { + write("writeDefaultNamespace", arg0); + + } + + @Override + public void writeEndDocument() throws XMLStreamException { + write("writeEndDocument"); + + } + + @Override + public void writeEndElement() throws XMLStreamException { + write("writeEndElement"); + + } + + @Override + public void writeNamespace(String arg0, String arg1) throws XMLStreamException { + write("writeNamespace", arg0, arg1); + + } + + @Override + public void writeStartDocument() throws XMLStreamException { + write("writeStartDocument"); + + } + + @Override + public void writeStartElement(String arg0) throws XMLStreamException { + write("writeStartElement", arg0); + + } + + @Override + public void writeStartElement(String arg0, String arg1) throws XMLStreamException { + write("writeStartElement", arg0, arg1); + + } + + @Override + public void writeStartElement(String arg0, String arg1, String arg2) throws XMLStreamException { + write("writeStartElement", arg0, arg1, arg2); + } + + private void write(String message, String... content) { + try { + if (writer == null) { + throw new RuntimeException("Writer not initialized."); +// writer.append("Writer not initialized\n"); + } else { + writer.append(message).append("\n"); + for (String string : content) { + writer.append("->").append(string).append("<-\n"); + } + } + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + @Override + public void writeAttribute(String arg0, String arg1, String arg2) throws XMLStreamException { + // TODO Auto-generated method stub + + } + + @Override + public void writeStartDocument(String arg0, String arg1) throws XMLStreamException { + // TODO Auto-generated method stub + + } +} http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/2d262c3e/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/xml/JavaxStaxReaderWrapper.java ---------------------------------------------------------------------- diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/xml/JavaxStaxReaderWrapper.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/xml/JavaxStaxReaderWrapper.java index 832e343..55d495c 100644 --- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/xml/JavaxStaxReaderWrapper.java +++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/xml/JavaxStaxReaderWrapper.java @@ -58,7 +58,7 @@ public class JavaxStaxReaderWrapper implements XMLStreamReader, XMLStreamReaderF if (content instanceof InputStream) { streamReader = factory.createXMLStreamReader((InputStream) content, DEFAULT_CHARSET); // verify charset encoding set in content is supported (if not set UTF-8 is used as defined in - // v'http://www.w3.org/TR/2008/REC-xml-20081126/') + // 'http://www.w3.org/TR/2008/REC-xml-20081126/') String characterEncodingInContent = streamReader.getCharacterEncodingScheme(); if (characterEncodingInContent != null && !DEFAULT_CHARSET.equalsIgnoreCase(characterEncodingInContent)) { throw new EntityProviderException(EntityProviderException
