You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by mi...@apache.org on 2014/05/06 16:16:34 UTC
git commit: [OLINGO-231] Added tests
Repository: olingo-odata2
Updated Branches:
refs/heads/OLINGO-231_PocForAndroid 39beefb49 -> c321fb745
[OLINGO-231] Added tests
Project: http://git-wip-us.apache.org/repos/asf/olingo-odata2/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata2/commit/c321fb74
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata2/tree/c321fb74
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata2/diff/c321fb74
Branch: refs/heads/OLINGO-231_PocForAndroid
Commit: c321fb745c8c1d20d9e3340e982d9311eb2527ca
Parents: 39beefb
Author: Michael Bolz <mi...@sap.com>
Authored: Mon May 5 14:59:36 2014 +0200
Committer: Michael Bolz <mi...@sap.com>
Committed: Tue May 6 16:16:17 2014 +0200
----------------------------------------------------------------------
odata2-android/pom.xml | 23 ++
.../odata2/android/xml/AndroidXmlFactory.java | 19 +-
.../odata2/android/xml/AndroidXmlReader.java | 60 +++--
.../odata2/android/xml/AndroidXmlWriter.java | 264 ++++++++++++++-----
.../android/xml/AndroidXmlFactoryTest.java | 114 ++++++++
.../android/xml/AndroidXmlReaderTest.java | 164 ++++++++++++
.../android/xml/AndroidXmlWriterTest.java | 158 +++++++++++
.../odata2/api/xml/XMLStreamConstants.java | 2 +-
.../olingo/odata2/api/xml/XMLStreamReader.java | 2 +-
.../odata2/core/xml/JavaxStaxReaderWrapper.java | 4 +-
.../core/xml/JavaxStaxReaderWrapperTest.java | 164 ++++++++++++
.../core/xml/JavaxStaxStreamFactoryTest.java | 131 +++++++++
.../core/xml/JavaxStaxWriterWrapperTest.java | 194 ++++++++++++++
.../odata2/testutil/helper/StringHelper.java | 10 +
14 files changed, 1222 insertions(+), 87 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/c321fb74/odata2-android/pom.xml
----------------------------------------------------------------------
diff --git a/odata2-android/pom.xml b/odata2-android/pom.xml
index 4448fd8..8a8e1c3 100644
--- a/odata2-android/pom.xml
+++ b/odata2-android/pom.xml
@@ -34,6 +34,7 @@
<properties>
<version.android>4.1.1.4</version.android>
+ <version.robolectric>2.2</version.robolectric>
</properties>
<build>
@@ -95,5 +96,27 @@
<artifactId>olingo-odata2-core</artifactId>
<version>${project.version}</version>
</dependency>
+ <dependency>
+ <groupId>org.apache.olingo</groupId>
+ <artifactId>olingo-odata2-testutil</artifactId>
+ <version>${project.version}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.robolectric</groupId>
+ <artifactId>robolectric</artifactId>
+ <version>${version.robolectric}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>xmlunit</groupId>
+ <artifactId>xmlunit</artifactId>
+ <scope>test</scope>
+ </dependency>
</dependencies>
</project>
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/c321fb74/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
index 1660390..f2888a9 100644
--- 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
@@ -1,6 +1,23 @@
+/*******************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ ******************************************************************************/
package org.apache.olingo.odata2.android.xml;
-import org.apache.olingo.odata2.api.ep.EntityProviderException;
import org.apache.olingo.odata2.api.xml.*;
import org.apache.olingo.odata2.core.xml.AbstractXmlStreamFactory;
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/c321fb74/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 cb4bacc..d793fe6 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
@@ -1,3 +1,21 @@
+/*******************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ ******************************************************************************/
package org.apache.olingo.odata2.android.xml;
import java.io.IOException;
@@ -14,6 +32,9 @@ import org.xmlpull.v1.XmlPullParserException;
import android.util.Xml;
+/**
+ * Wrapper for XmlPullParser in Android SDK
+ */
public class AndroidXmlReader implements XMLStreamReader {
private final XmlPullParser parser;
@@ -79,8 +100,7 @@ public class AndroidXmlReader implements XMLStreamReader {
@Override
public String getAttributeValue(String namespaceURI, String localName) {
- String attributeValue = parser.getAttributeValue(namespaceURI, localName);
- return attributeValue;
+ return parser.getAttributeValue(namespaceURI, localName);
}
@Override
@@ -126,27 +146,23 @@ public class AndroidXmlReader implements XMLStreamReader {
e.printStackTrace();
}
final String prefix = tmp;
- // TODO Auto-generated method stub
- NamespaceContext nctx = new NamespaceContext() {
+ return new NamespaceContext() {
public String getPrefix(String index) {
return prefix;
}
};
- return nctx;
}
@Override
- public int getNamespaceCount() {
+ public int getNamespaceCount() throws XMLStreamException {
// FIXME
try {
int depth = parser.getDepth();
int nsStart = parser.getNamespaceCount(depth-1);
int nsEnd = parser.getNamespaceCount(depth);
- int nsCount = nsEnd - nsStart;
- return nsCount;
+ return nsEnd - nsStart;
} catch (XmlPullParserException e) {
- e.printStackTrace();
- return -1;
+ throw new XMLStreamException("Got XmlPullParserException with message: " + e.getMessage(), e);
}
}
@@ -239,9 +255,9 @@ public class AndroidXmlReader implements XMLStreamReader {
}
@Override
- public void next() throws XMLStreamException {
+ public int next() throws XMLStreamException {
try {
- parser.next();
+ return map2XmlStreamEventType(parser.next());
} catch (XmlPullParserException e) {
throw new XMLStreamException("Got XmlPullParserException with message: " + e.getMessage(), e);
} catch (IOException e) {
@@ -252,7 +268,7 @@ public class AndroidXmlReader implements XMLStreamReader {
@Override
public int nextTag() throws XMLStreamException {
try {
- return parser.nextTag();
+ return map2XmlStreamEventType(parser.nextTag());
} catch (XmlPullParserException e) {
throw new XMLStreamException("Got XmlPullParserException with message: " + e.getMessage(), e);
} catch (IOException e) {
@@ -263,7 +279,7 @@ public class AndroidXmlReader implements XMLStreamReader {
@Override
public void require(int eventType, String namespace, String tag) throws XMLStreamException {
try {
- int xmlPullEventType = mapEventType(eventType);
+ int xmlPullEventType = map2AndroidEventType(eventType);
parser.require(xmlPullEventType, namespace, tag);
} catch (XmlPullParserException e) {
throw new XMLStreamException("Got XmlPullParserException with message: " + e.getMessage(), e);
@@ -272,7 +288,7 @@ public class AndroidXmlReader implements XMLStreamReader {
}
}
- private int mapEventType(int eventType) {
+ private int map2AndroidEventType(int eventType) {
switch (eventType) {
case XMLStreamConstants.START_ELEMENT: return XmlPullParser.START_TAG;
case XMLStreamConstants.END_ELEMENT: return XmlPullParser.END_TAG;
@@ -284,4 +300,18 @@ public class AndroidXmlReader implements XMLStreamReader {
eventType + "') for mapping.");
}
}
+
+ private int map2XmlStreamEventType(int eventType) {
+ switch (eventType) {
+ case XmlPullParser.TEXT: return XMLStreamConstants.CHARACTERS;
+ case XmlPullParser.START_TAG: return XMLStreamConstants.START_ELEMENT;
+ case XmlPullParser.END_TAG: return XMLStreamConstants.END_ELEMENT;
+ case XmlPullParser.START_DOCUMENT: return XMLStreamConstants.START_DOCUMENT;
+ case XmlPullParser.END_DOCUMENT: return XMLStreamConstants.END_DOCUMENT;
+ case XmlPullParser.DOCDECL: return XMLStreamConstants.DTD;
+ default:
+ throw new IllegalArgumentException("Unknown event type ('" +
+ eventType + "') for mapping.");
+ }
+ }
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/c321fb74/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
index 211738a..0e8887d 100644
--- 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
@@ -1,30 +1,85 @@
+/*******************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ ******************************************************************************/
package org.apache.olingo.odata2.android.xml;
-import org.apache.olingo.odata2.api.ep.EntityProviderException;
+import android.util.Xml;
import org.apache.olingo.odata2.api.xml.XMLStreamException;
import org.apache.olingo.odata2.api.xml.XMLStreamWriter;
-import org.xmlpull.v1.XmlPullParserException;
+import org.xmlpull.v1.XmlSerializer;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.Writer;
import java.util.Map;
+import java.util.Stack;
/**
*/
public class AndroidXmlWriter implements XMLStreamWriter {
- private Writer writer;
+ private static final String DEFAULT_ENCODING = "UTF-8";
+ private static final String DEFAULT_VERSION = "1.0";
- public AndroidXmlWriter(Object output) {
- if (output instanceof OutputStream) {
- writer = new PrintWriter((OutputStream) output);
- } else if (output instanceof Writer) {
- writer = (Writer) output;
+ private final XmlSerializer serializer;
+ private final Stack<String> tags;
+ private final Stack<String> namespaces;
+
+ private String defaultNamespace = null;
+
+ public AndroidXmlWriter(Object output) throws XMLStreamException {
+ this(output, DEFAULT_ENCODING);
+ }
+
+ public AndroidXmlWriter(Object output, String encoding) throws XMLStreamException {
+ serializer = Xml.newSerializer();
+ tags = new Stack<String>();
+ namespaces = new Stack<String>();
+
+ try {
+ if (output instanceof OutputStream) {
+ serializer.setOutput((OutputStream) output, encoding);
+ } else if (output instanceof Writer) {
+ serializer.setOutput((Writer) output);
+ } else {
+ throw new XMLStreamException("Unsupported parameter value. " +
+ "Requires an OutputStream or a Writer instance.");
+ }
+ } catch (IllegalStateException e) {
+ wrapAndReThrow(e);
+ } catch (IOException e) {
+ wrapAndReThrow(e);
}
}
+ private void wrapAndReThrow(Exception e) throws XMLStreamException {
+ wrapAndReThrow("Unexpected exception with message: " + e.getMessage(), e);
+ }
+
+ private void wrapAndReThrow(String message, Exception e) throws XMLStreamException {
+ throw new XMLStreamException(message, e);
+ }
+
+ private String nextTagToClose() {
+ return tags.pop();
+ }
+
public AndroidXmlWriter setProperties(Map<String, Object> properties) throws XMLStreamException {
for (Map.Entry<String, Object> entry : properties.entrySet()) {
setProperty(entry.getKey(), entry.getValue());
@@ -33,125 +88,200 @@ public class AndroidXmlWriter implements XMLStreamWriter {
}
public AndroidXmlWriter setProperty(String name, Object value) throws XMLStreamException {
+ try {
+ serializer.setProperty(name, value);
+ } catch (IllegalStateException e) {
+ wrapAndReThrow(e);
+ }
return this;
}
@Override
public void flush() throws XMLStreamException {
- write("flush");
try {
- if(writer != null) {
- writer.flush();
+ if(serializer != null) {
+ serializer.flush();
}
} catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
+ wrapAndReThrow("Exception during flush with message: " + e.getMessage(), e);
}
}
@Override
- public void setDefaultNamespace(String arg0) throws XMLStreamException {
- write("setDefaultNamespace", arg0);
+ public void setDefaultNamespace(String uri) throws XMLStreamException {
+ defaultNamespace = uri;
+ writeNamespace("", defaultNamespace);
}
@Override
- public void setPrefix(String arg0, String arg1) throws XMLStreamException {
- write("setPrefix", arg0, arg1);
-
+ public void setPrefix(String prefix, String uri) throws XMLStreamException {
+ try {
+ serializer.setPrefix(prefix, uri);
+ } catch (Exception e) {
+ wrapAndReThrow(e);
+ }
}
@Override
- public void writeAttribute(String arg0, String arg1) throws XMLStreamException {
- write("writeAttribute", arg0, arg1);
-
+ public void writeStartDocument() throws XMLStreamException {
+ try {
+ writeStartDocument(DEFAULT_ENCODING, DEFAULT_VERSION);
+ } catch (Exception e) {
+ wrapAndReThrow(e);
+ }
}
@Override
- public void writeAttribute(String arg0, String arg1, String arg2, String arg3) throws XMLStreamException {
- write("writeAttribute", arg0, arg1, arg2);
-
+ public void writeAttribute(String localName, String value) throws XMLStreamException {
+ try {
+ writeAttribute(nextNamespaceUriToWrite(), localName, value);
+ } catch (Exception e) {
+ wrapAndReThrow(e);
+ }
}
@Override
- public void writeCharacters(String arg0) throws XMLStreamException {
- write("writeCharacters", arg0);
-
+ public void writeAttribute(String namespaceURI, String localName, String value) throws XMLStreamException {
+ try {
+ writeAttribute(null, namespaceURI, localName, value);
+ } catch (Exception e) {
+ wrapAndReThrow(e);
+ }
}
@Override
- public void writeDefaultNamespace(String arg0) throws XMLStreamException {
- write("writeDefaultNamespace", arg0);
-
+ public void writeAttribute(String prefix, String namespaceURI, String localName, String value)
+ throws XMLStreamException {
+ try {
+ writeCurrentTag();
+ serializer.attribute(namespaceURI, localName, value);
+ } catch (Exception e) {
+ wrapAndReThrow(e);
+ }
}
@Override
- public void writeEndDocument() throws XMLStreamException {
- write("writeEndDocument");
-
+ public void writeDefaultNamespace(String namespaceURI) throws XMLStreamException {
+ setDefaultNamespace(namespaceURI);
}
@Override
- public void writeEndElement() throws XMLStreamException {
- write("writeEndElement");
-
+ public void writeNamespace(String prefix, String namespaceURI) throws XMLStreamException {
+ try {
+ serializer.setPrefix(prefix, namespaceURI);
+ } catch (IOException e) {
+ wrapAndReThrow(e);
+ }
}
@Override
- public void writeNamespace(String arg0, String arg1) throws XMLStreamException {
- write("writeNamespace", arg0, arg1);
-
+ public void writeStartElement(String localName) throws XMLStreamException {
+ try {
+ writeStartElement(nextNamespaceUriToWrite(), localName);
+ } catch (Exception e) {
+ wrapAndReThrow(e);
+ }
}
- @Override
- public void writeStartDocument() throws XMLStreamException {
- write("writeStartDocument");
+ private String nextNamespaceUriToWrite() {
+ return nextNamespaceUriToWrite(true);
+ }
+ private String nextNamespaceUriToWrite(boolean keep) {
+ if(namespaces.isEmpty()) {
+ return defaultNamespace;
+ }
+ if(keep) {
+ return namespaces.peek();
+ }
+ return namespaces.pop();
}
@Override
- public void writeStartElement(String arg0) throws XMLStreamException {
- write("writeStartElement", arg0);
-
+ public void writeStartElement(String namespaceURI, String localName) throws XMLStreamException {
+ try {
+ String prefix = serializer.getPrefix(namespaceURI, false);
+ writeStartElement(prefix, localName, namespaceURI);
+ } catch (Exception e) {
+ wrapAndReThrow(e);
+ }
}
+ TagHandle currentTag = null;
+
@Override
- public void writeStartElement(String arg0, String arg1) throws XMLStreamException {
- write("writeStartElement", arg0, arg1);
+ public void writeStartElement(String prefix, String localName, String namespaceURI) throws XMLStreamException {
+ try {
+ writeCurrentTag();
+ //
+ tags.push(localName);
+ namespaces.push(namespaceURI);
+ //
+ currentTag = new TagHandle(localName, namespaceURI, prefix);
+ } catch (Exception e) {
+ wrapAndReThrow(e);
+ }
+ }
+ @Override
+ public void writeStartDocument(String encoding, String version) throws XMLStreamException {
+ try {
+ serializer.startDocument(encoding, null);
+ } catch (Exception e) {
+ wrapAndReThrow(e);
+ }
}
@Override
- public void writeStartElement(String arg0, String arg1, String arg2) throws XMLStreamException {
- write("writeStartElement", arg0, arg1, arg2);
+ public void writeEndElement() throws XMLStreamException {
+ try {
+ writeCurrentTag();
+ serializer.endTag(nextNamespaceUriToWrite(false), nextTagToClose());
+ } catch (Exception e) {
+ wrapAndReThrow(e);
+ }
}
- private void write(String message, String... content) {
+ @Override
+ public void writeEndDocument() throws XMLStreamException {
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();
+ serializer.endDocument();
+ } catch (Exception e) {
+ wrapAndReThrow(e);
}
}
@Override
- public void writeAttribute(String arg0, String arg1, String arg2) throws XMLStreamException {
- // TODO Auto-generated method stub
+ public void writeCharacters(String text) throws XMLStreamException {
+ try {
+ writeCurrentTag();
+ serializer.text(text);
+ } catch (Exception e) {
+ wrapAndReThrow(e);
+ }
+ }
+ private void writeCurrentTag() throws XMLStreamException {
+ try {
+ if(currentTag != null) {
+ serializer.startTag(currentTag.namespaceUri, currentTag.name);
+ currentTag = null;
+ }
+ } catch (Exception e) {
+ wrapAndReThrow(e);
+ }
}
- @Override
- public void writeStartDocument(String arg0, String arg1) throws XMLStreamException {
- // TODO Auto-generated method stub
+ private class TagHandle {
+ final String name;
+ final String namespaceUri;
+ final String namespacePrefix;
+ private TagHandle(String name, String namespaceUri, String namespacePrefix) {
+ this.name = name;
+ this.namespaceUri = namespaceUri;
+ this.namespacePrefix = namespacePrefix;
+ }
}
}
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/c321fb74/odata2-android/src/test/java/org/apache/olingo/odata2/android/xml/AndroidXmlFactoryTest.java
----------------------------------------------------------------------
diff --git a/odata2-android/src/test/java/org/apache/olingo/odata2/android/xml/AndroidXmlFactoryTest.java b/odata2-android/src/test/java/org/apache/olingo/odata2/android/xml/AndroidXmlFactoryTest.java
new file mode 100644
index 0000000..e51c345
--- /dev/null
+++ b/odata2-android/src/test/java/org/apache/olingo/odata2/android/xml/AndroidXmlFactoryTest.java
@@ -0,0 +1,114 @@
+/*******************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ ******************************************************************************/
+package org.apache.olingo.odata2.android.xml;
+
+import junit.framework.Assert;
+import org.apache.olingo.odata2.api.xml.XMLStreamException;
+import org.apache.olingo.odata2.api.xml.XMLStreamReader;
+import org.apache.olingo.odata2.api.xml.XMLStreamWriter;
+import org.apache.olingo.odata2.testutil.helper.StringHelper;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.annotation.Config;
+
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+import java.io.StringWriter;
+
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertNotNull;
+import static org.apache.olingo.odata2.api.xml.XMLStreamReaderFactory.XML_STREAM_READER_FACTORY_CLASS;
+import static org.apache.olingo.odata2.api.xml.XMLStreamWriterFactory.XML_STREAM_WRITER_FACTORY_CLASS;
+
+/**
+ */
+@RunWith(RobolectricTestRunner.class)
+@Config(manifest=Config.NONE)
+public class AndroidXmlFactoryTest {
+
+ private AndroidXmlFactory streamFactory;
+
+ public static final String BASIC_CONTENT = "<?xml version='1.0' encoding='UTF-8' ?><start />";
+
+ // CHECKSTYLE:OFF
+ @Before
+ public void init() {
+ //
+ System.setProperty(XML_STREAM_READER_FACTORY_CLASS, AndroidXmlFactoryTest.class.getName()); // NOSONAR
+ System.setProperty(XML_STREAM_WRITER_FACTORY_CLASS, AndroidXmlFactoryTest.class.getName()); // NOSONAR
+ //
+ streamFactory = new AndroidXmlFactory();
+ }
+ // CHECKSTYLE:ON
+
+
+ @Test
+ @Ignore("Will work with robolectric version 2.3")
+ public void createReader() throws Exception {
+ InputStream stream = StringHelper.encapsulate(BASIC_CONTENT);
+ XMLStreamReader xmlReader = streamFactory.createXMLStreamReader(stream);
+ assertNotNull(xmlReader);
+ Assert.assertTrue(xmlReader.hasNext());
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void createReaderWrongContent() throws Exception {
+ XMLStreamReader xmlReader = streamFactory.createXMLStreamReader("content");
+ assertNotNull(xmlReader);
+ Assert.assertTrue(xmlReader.hasNext());
+ }
+
+ @Test
+ public void createWriterStream() throws Exception {
+ ByteArrayOutputStream stream = new ByteArrayOutputStream();
+ XMLStreamWriter xmlReader = streamFactory.createXMLStreamWriter(stream);
+ xmlReader.writeStartDocument();
+ xmlReader.writeStartElement("start");
+ xmlReader.writeEndElement();
+ xmlReader.writeEndDocument();
+ xmlReader.flush();
+
+ assertNotNull(xmlReader);
+ assertEquals(BASIC_CONTENT, new String(stream.toByteArray()));
+ }
+
+ @Test
+ public void createWriterPrintWriter() throws Exception {
+
+ StringWriter writer = new StringWriter();
+ XMLStreamWriter xmlReader = streamFactory.createXMLStreamWriter(writer);
+ xmlReader.writeStartDocument();
+ xmlReader.writeStartElement("start");
+ xmlReader.writeEndElement();
+ xmlReader.writeEndDocument();
+ xmlReader.flush();
+
+ assertNotNull(xmlReader);
+ assertEquals(BASIC_CONTENT, writer.toString());
+ }
+
+ @Test(expected = XMLStreamException.class)
+ public void createWriterWrongContent() throws Exception {
+ XMLStreamWriter xmlReader = streamFactory.createXMLStreamWriter("fail");
+ assertNotNull(xmlReader);
+ }
+}
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/c321fb74/odata2-android/src/test/java/org/apache/olingo/odata2/android/xml/AndroidXmlReaderTest.java
----------------------------------------------------------------------
diff --git a/odata2-android/src/test/java/org/apache/olingo/odata2/android/xml/AndroidXmlReaderTest.java b/odata2-android/src/test/java/org/apache/olingo/odata2/android/xml/AndroidXmlReaderTest.java
new file mode 100644
index 0000000..51cebbb
--- /dev/null
+++ b/odata2-android/src/test/java/org/apache/olingo/odata2/android/xml/AndroidXmlReaderTest.java
@@ -0,0 +1,164 @@
+/*******************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ ******************************************************************************/
+package org.apache.olingo.odata2.android.xml;
+
+import org.apache.olingo.odata2.api.edm.Edm;
+import org.apache.olingo.odata2.api.edm.EdmEntitySet;
+import org.apache.olingo.odata2.api.ep.EntityProvider;
+import org.apache.olingo.odata2.api.ep.EntityProviderReadProperties;
+import org.apache.olingo.odata2.api.ep.entry.ODataEntry;
+import org.apache.olingo.odata2.api.xml.XMLStreamConstants;
+import org.apache.olingo.odata2.api.xml.XMLStreamException;
+import org.apache.olingo.odata2.testutil.helper.StringHelper;
+import org.apache.olingo.odata2.testutil.mock.MockFacade;
+import org.custommonkey.xmlunit.SimpleNamespaceContext;
+import org.custommonkey.xmlunit.XMLUnit;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.annotation.Config;
+
+import java.util.Calendar;
+import java.util.HashMap;
+import java.util.Map;
+
+import static junit.framework.Assert.assertEquals;
+import static org.apache.olingo.odata2.api.xml.XMLStreamReaderFactory.XML_STREAM_READER_FACTORY_CLASS;
+
+/**
+ */
+@RunWith(RobolectricTestRunner.class)
+@Config(manifest=Config.NONE)
+@Ignore("Will work with robolectric version 2.3")
+public class AndroidXmlReaderTest {
+
+ private static final String BASIC_RESULT =
+ "<?xml version='1.0' ?>" +
+ "<n0:test xmlns:n0=\"http://defaultNamespace\">" +
+ "<n1:second n1:attName=\"attValue\" xmlns:n1=\"namespace\"/>" +
+ "</n0:test>";
+
+ private static final String EMPLOYEE = "<?xml version='1.0' encoding='utf-8' standalone='yes' ?>\n" +
+ "<entry xml:base=\"http://root\" xmlns=\"http://www.w3.org/2005/Atom\" " +
+ "xmlns:d=\"http://schemas.microsoft.com/ado/2007/08/dataservices\" " +
+ "xmlns:m=\"http://schemas.microsoft.com/ado/2007/08/dataservices/metadata\">\n" +
+ "\t<id>http://rootEmployees('1')</id>\n" +
+ "\t<title type=\"text\">Walter Winter</title>\n" +
+ "\t<updated>1999-01-01T00:00:00Z</updated>\n" +
+ "\t<category scheme=\"http://schemas.microsoft.com/ado/2007/08/dataservices/scheme\" term=\"RefScenario" +
+ ".Employee\"/>\n" +
+ "\t<link href=\"Employees('1')\" rel=\"edit\" title=\"Employee\"/>\n" +
+ "\t<link href=\"Employees('1')/$value\" rel=\"edit-media\" type=\"application/octet-stream\"/>\n" +
+ "\t<link href=\"Employees('1')/ne_Manager\" rel=\"http://schemas.microsoft" +
+ ".com/ado/2007/08/dataservices/related/ne_Manager\" title=\"ne_Manager\" type=\"application/atom+xml;" +
+ "type=entry\"/>\n" +
+ "\t<link href=\"Employees('1')/ne_Team\" rel=\"http://schemas.microsoft" +
+ ".com/ado/2007/08/dataservices/related/ne_Team\" title=\"ne_Team\" type=\"application/atom+xml;" +
+ "type=entry\"/>\n" +
+ "\t<link href=\"Employees('1')/ne_Room\" rel=\"http://schemas.microsoft" +
+ ".com/ado/2007/08/dataservices/related/ne_Room\" title=\"ne_Room\" type=\"application/atom+xml;" +
+ "type=entry\"/>\n" +
+ "\t<content src=\"Employees('1')/$value\" type=\"application/octet-stream\"/>\n" +
+ "\t<m:properties>\n" +
+ "\t\t<d:EmployeeId>1</d:EmployeeId>\n" +
+ "\t\t<d:EmployeeName>Walter Winter</d:EmployeeName>\n" +
+ "\t\t<d:ManagerId>1</d:ManagerId>\n" +
+ "\t\t<d:RoomId>1</d:RoomId>\n" +
+ "\t\t<d:TeamId>42</d:TeamId>\n" +
+ "\t\t<d:Location m:type=\"RefScenario.c_Location\">\n" +
+ "\t\t\t<d:City m:type=\"RefScenario.c_City\">\n" +
+ "\t\t\t\t<d:PostalCode>33470</d:PostalCode>\n" +
+ "\t\t\t\t<d:CityName>Duckburg</d:CityName>\n" +
+ "\t\t\t</d:City>\n" +
+ "\t\t\t<d:Country>Calisota</d:Country>\n" +
+ "\t\t</d:Location>\n" +
+ "\t\t<d:Age>52</d:Age>\n" +
+ "\t\t<d:EntryDate>1999-01-01T00:00:00</d:EntryDate>\n" +
+ "\t\t<d:ImageUrl m:null=\"true\"/>\n" +
+ "\t</m:properties>\n" +
+ "</entry>";
+
+ // CHECKSTYLE:OFF
+ @Before
+ public void init() {
+ //
+ System.setProperty(XML_STREAM_READER_FACTORY_CLASS, AndroidXmlFactory.class.getName()); // NOSONAR
+ //
+ Map<String, String> prefixMap = new HashMap<String, String>();
+ prefixMap.put("", Edm.NAMESPACE_ATOM_2005);
+ prefixMap.put("d", Edm.NAMESPACE_D_2007_08);
+ prefixMap.put("m", Edm.NAMESPACE_M_2007_08);
+ prefixMap.put("xml", Edm.NAMESPACE_XML_1998);
+ XMLUnit.setXpathNamespaceContext(new SimpleNamespaceContext(prefixMap));
+ }
+ // CHECKSTYLE:ON
+
+ @Test
+ public void basic() throws XMLStreamException {
+ StringHelper.Stream stream = StringHelper.toStream(BASIC_RESULT);
+ AndroidXmlReader xmlReader = new AndroidXmlReader(stream.asStream());
+
+ int[] expected = new int[]{
+ XMLStreamConstants.START_DOCUMENT,
+ XMLStreamConstants.START_ELEMENT,
+ XMLStreamConstants.START_ELEMENT,
+ XMLStreamConstants.END_ELEMENT,
+ XMLStreamConstants.END_ELEMENT,
+ XMLStreamConstants.END_DOCUMENT};
+ int pos = 0;
+ while(xmlReader.hasNext()) {
+ int elementId = xmlReader.next();
+// System.out.println("E: " + elementId);
+ assertEquals(expected[pos++], elementId);
+ }
+ }
+
+ @Test
+ public void entityProvider() throws Exception {
+ Edm edmMock = MockFacade.getMockEdm();
+
+ String contentType = "application/xml";
+ EdmEntitySet entitySet = edmMock.getDefaultEntityContainer().getEntitySet("Employees");
+ EntityProviderReadProperties properties =
+ EntityProviderReadProperties.init().build();
+
+ StringHelper.Stream content = StringHelper.toStream(EMPLOYEE);
+
+ ODataEntry entry = EntityProvider.readEntry(contentType, entitySet, content.asStream(), properties);
+ Map<String, Object> employeeData = entry.getProperties();
+
+ // validate
+ assertEquals(9, employeeData.size());
+ //
+ assertEquals("1", employeeData.get("EmployeeId"));
+ assertEquals("Walter Winter", employeeData.get("EmployeeName"));
+ assertEquals("1", employeeData.get("ManagerId"));
+ assertEquals("1", employeeData.get("RoomId"));
+ assertEquals("42", employeeData.get("TeamId"));
+ assertEquals(Integer.valueOf(52), employeeData.get("Age"));
+ assertEquals(915148800000l, ((Calendar)employeeData.get("EntryDate")).getTimeInMillis());
+ Map<String, Object> location = (Map<String, Object>) employeeData.get("Location");
+ assertEquals("Calisota", location.get("Country"));
+ Map<String, Object> city = (Map<String, Object>) location.get("City");
+ assertEquals("33470", city.get("PostalCode"));
+ assertEquals("Duckburg", city.get("CityName"));
+ }
+}
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/c321fb74/odata2-android/src/test/java/org/apache/olingo/odata2/android/xml/AndroidXmlWriterTest.java
----------------------------------------------------------------------
diff --git a/odata2-android/src/test/java/org/apache/olingo/odata2/android/xml/AndroidXmlWriterTest.java b/odata2-android/src/test/java/org/apache/olingo/odata2/android/xml/AndroidXmlWriterTest.java
new file mode 100644
index 0000000..0eb376c
--- /dev/null
+++ b/odata2-android/src/test/java/org/apache/olingo/odata2/android/xml/AndroidXmlWriterTest.java
@@ -0,0 +1,158 @@
+/*******************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ ******************************************************************************/
+package org.apache.olingo.odata2.android.xml;
+
+import junit.framework.Assert;
+import org.apache.olingo.odata2.api.edm.Edm;
+import org.apache.olingo.odata2.api.edm.EdmEntitySet;
+import org.apache.olingo.odata2.api.ep.EntityProvider;
+import org.apache.olingo.odata2.api.ep.EntityProviderWriteProperties;
+import org.apache.olingo.odata2.api.processor.ODataResponse;
+import org.apache.olingo.odata2.api.xml.XMLStreamException;
+import org.apache.olingo.odata2.testutil.helper.StringHelper;
+import org.apache.olingo.odata2.testutil.mock.MockFacade;
+import org.custommonkey.xmlunit.SimpleNamespaceContext;
+import org.custommonkey.xmlunit.XMLUnit;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.annotation.Config;
+
+import java.io.StringWriter;
+import java.io.Writer;
+import java.net.URI;
+import java.util.Calendar;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.TimeZone;
+
+import static org.apache.olingo.odata2.api.xml.XMLStreamWriterFactory.XML_STREAM_WRITER_FACTORY_CLASS;
+import static org.custommonkey.xmlunit.XMLAssert.assertXpathEvaluatesTo;
+import static org.custommonkey.xmlunit.XMLAssert.assertXpathExists;
+
+/**
+ */
+@RunWith(RobolectricTestRunner.class)
+@Config(manifest=Config.NONE)
+public class AndroidXmlWriterTest {
+
+ private static final String BASIC_RESULT =
+ "<?xml version='1.0' encoding='UTF-8' ?>" +
+ "<test xmlns=\"http://defaultNamespace\">" +
+ "<n0:second n0:attName=\"attValue\" xmlns:n0=\"namespace\" />" +
+ "</test>";
+
+ // CHECKSTYLE:OFF
+ @Before
+ public void init() {
+ //
+ System.setProperty(XML_STREAM_WRITER_FACTORY_CLASS, AndroidXmlFactory.class.getName()); // NOSONAR
+ //
+ Map<String, String> prefixMap = new HashMap<String, String>();
+ prefixMap.put("", Edm.NAMESPACE_ATOM_2005);
+ prefixMap.put("d", Edm.NAMESPACE_D_2007_08);
+ prefixMap.put("m", Edm.NAMESPACE_M_2007_08);
+ prefixMap.put("xml", Edm.NAMESPACE_XML_1998);
+ XMLUnit.setXpathNamespaceContext(new SimpleNamespaceContext(prefixMap));
+ }
+ // CHECKSTYLE:ON
+
+ @Test
+ public void basic() throws XMLStreamException {
+ Writer writer = new StringWriter();
+ AndroidXmlWriter xmlWriter = new AndroidXmlWriter(writer);
+
+ xmlWriter.writeStartDocument();
+ xmlWriter.setDefaultNamespace("http://defaultNamespace");
+ xmlWriter.writeStartElement("test");
+ xmlWriter.writeStartElement("namespace", "second");
+ xmlWriter.writeAttribute("attName", "attValue");
+ xmlWriter.writeEndElement();
+ xmlWriter.writeEndElement();
+ xmlWriter.writeEndDocument();
+
+ xmlWriter.flush();
+
+ //
+ Assert.assertEquals(BASIC_RESULT, writer.toString());
+ }
+
+ @Test
+ public void entityProvider() throws Exception {
+ Edm edmMock = MockFacade.getMockEdm();
+
+ String contentType = "application/xml";
+ EdmEntitySet entitySet = edmMock.getDefaultEntityContainer().getEntitySet("Employees");
+ Map<String, Object> data = createEmployeeData();
+ EntityProviderWriteProperties properties =
+ EntityProviderWriteProperties.serviceRoot(URI.create("http://root")).build();
+
+ ODataResponse entry = EntityProvider.writeEntry(contentType, entitySet, data, properties);
+ StringHelper.Stream content = StringHelper.toStream(entry.getEntity());
+
+ String xmlString = content.asString();
+ System.out.println(xmlString);
+
+ assertXpathEvaluatesTo(Edm.NAMESPACE_ATOM_2005, "/*/namespace::*[name()='']", xmlString);
+
+ assertXpathExists("/:entry", xmlString);
+ assertXpathExists("/:entry/:content", xmlString);
+ // verify self link
+ assertXpathExists("/:entry/:link[@href=\"Employees('1')\"]", xmlString);
+ // verify content media link
+ assertXpathExists("/:entry/:link[@href=\"Employees('1')/$value\"]", xmlString);
+ // verify one navigation link
+ assertXpathExists("/:entry/:link[@title='ne_Manager']", xmlString);
+
+ // verify content
+ assertXpathExists("/:entry/:content[@type='application/octet-stream']", xmlString);
+ // verify properties
+ assertXpathExists("/:entry/m:properties", xmlString);
+ assertXpathEvaluatesTo("9", "count(/:entry/m:properties/*)", xmlString);
+ }
+
+ private Map<String, Object> createEmployeeData() {
+ Map<String, Object> employeeData = new HashMap<String, Object>();
+
+ Calendar date = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
+ date.clear();
+ date.set(1999, 0, 1);
+
+ employeeData.put("EmployeeId", "1");
+ employeeData.put("ImmageUrl", null);
+ employeeData.put("ManagerId", "1");
+ employeeData.put("Age", new Integer(52));
+ employeeData.put("RoomId", "1");
+ employeeData.put("EntryDate", date);
+ employeeData.put("TeamId", "42");
+ employeeData.put("EmployeeName", "Walter Winter");
+
+ Map<String, Object> locationData = new HashMap<String, Object>();
+ Map<String, Object> cityData = new HashMap<String, Object>();
+ cityData.put("PostalCode", "33470");
+ cityData.put("CityName", "Duckburg");
+ locationData.put("City", cityData);
+ locationData.put("Country", "Calisota");
+
+ employeeData.put("Location", locationData);
+
+ return employeeData;
+ }
+}
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/c321fb74/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/xml/XMLStreamConstants.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/xml/XMLStreamConstants.java b/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/xml/XMLStreamConstants.java
index d6ab4c3..25d0d50 100644
--- a/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/xml/XMLStreamConstants.java
+++ b/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/xml/XMLStreamConstants.java
@@ -25,7 +25,7 @@ public interface XMLStreamConstants {
int START_ELEMENT = 1;
int END_ELEMENT = 2;
// int PROCESSING_INSTRUCTION = 3;
-// int CHARACTERS = 4;
+ int CHARACTERS = 4;
// int COMMENT = 5;
// int SPACE = 6;
int START_DOCUMENT = 7;
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/c321fb74/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/xml/XMLStreamReader.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/xml/XMLStreamReader.java b/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/xml/XMLStreamReader.java
index 8f91335..0a47390 100644
--- a/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/xml/XMLStreamReader.java
+++ b/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/xml/XMLStreamReader.java
@@ -43,7 +43,7 @@ public interface XMLStreamReader {
public abstract boolean isStartElement() throws XMLStreamException;
- public abstract void next() throws XMLStreamException;
+ public abstract int next() throws XMLStreamException;
public abstract boolean isEndElement() throws XMLStreamException;
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/c321fb74/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 186ba71..98cadef 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
@@ -90,9 +90,9 @@ public class JavaxStaxReaderWrapper implements XMLStreamReader {
return reader.isStartElement();
}
- public void next() throws XMLStreamException {
+ public int next() throws XMLStreamException {
try {
- reader.next();
+ return reader.next();
} catch (javax.xml.stream.XMLStreamException e) {
throw new XMLStreamException(e);
}
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/c321fb74/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/xml/JavaxStaxReaderWrapperTest.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/xml/JavaxStaxReaderWrapperTest.java b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/xml/JavaxStaxReaderWrapperTest.java
new file mode 100644
index 0000000..88d16ff
--- /dev/null
+++ b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/xml/JavaxStaxReaderWrapperTest.java
@@ -0,0 +1,164 @@
+/*******************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ ******************************************************************************/
+package org.apache.olingo.odata2.core.xml;
+
+import org.apache.olingo.odata2.api.edm.Edm;
+import org.apache.olingo.odata2.api.edm.EdmEntitySet;
+import org.apache.olingo.odata2.api.ep.EntityProvider;
+import org.apache.olingo.odata2.api.ep.EntityProviderReadProperties;
+import org.apache.olingo.odata2.api.ep.entry.ODataEntry;
+import org.apache.olingo.odata2.api.xml.XMLStreamConstants;
+import org.apache.olingo.odata2.api.xml.XMLStreamReader;
+import org.apache.olingo.odata2.core.ep.AbstractProviderTest;
+import org.apache.olingo.odata2.testutil.helper.StringHelper;
+import org.apache.olingo.odata2.testutil.mock.MockFacade;
+import org.custommonkey.xmlunit.SimpleNamespaceContext;
+import org.custommonkey.xmlunit.XMLUnit;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.util.Calendar;
+import java.util.HashMap;
+import java.util.Map;
+
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertTrue;
+import static org.apache.olingo.odata2.api.xml.XMLStreamReaderFactory.XML_STREAM_READER_FACTORY_CLASS;
+
+/**
+ */
+public class JavaxStaxReaderWrapperTest extends AbstractProviderTest {
+
+ private static final String BASIC_RESULT =
+ "<?xml version='1.0' ?>" +
+ "<n0:test xmlns:n0=\"http://defaultNamespace\">" +
+ "<n1:second n1:attName=\"attValue\" xmlns:n1=\"namespace\">TEST</n1:second>" +
+ "</n0:test>";
+
+ private static final String EMPLOYEE = "<?xml version='1.0' encoding='utf-8' standalone='yes' ?>\n" +
+ "<entry xml:base=\"http://root\" xmlns=\"http://www.w3.org/2005/Atom\" " +
+ "xmlns:d=\"http://schemas.microsoft.com/ado/2007/08/dataservices\" " +
+ "xmlns:m=\"http://schemas.microsoft.com/ado/2007/08/dataservices/metadata\">\n" +
+ "\t<id>http://rootEmployees('1')</id>\n" +
+ "\t<title type=\"text\">Walter Winter</title>\n" +
+ "\t<updated>1999-01-01T00:00:00Z</updated>\n" +
+ "\t<category scheme=\"http://schemas.microsoft.com/ado/2007/08/dataservices/scheme\" term=\"RefScenario" +
+ ".Employee\"/>\n" +
+ "\t<link href=\"Employees('1')\" rel=\"edit\" title=\"Employee\"/>\n" +
+ "\t<link href=\"Employees('1')/$value\" rel=\"edit-media\" type=\"application/octet-stream\"/>\n" +
+ "\t<link href=\"Employees('1')/ne_Manager\" rel=\"http://schemas.microsoft" +
+ ".com/ado/2007/08/dataservices/related/ne_Manager\" title=\"ne_Manager\" type=\"application/atom+xml;" +
+ "type=entry\"/>\n" +
+ "\t<link href=\"Employees('1')/ne_Team\" rel=\"http://schemas.microsoft" +
+ ".com/ado/2007/08/dataservices/related/ne_Team\" title=\"ne_Team\" type=\"application/atom+xml;" +
+ "type=entry\"/>\n" +
+ "\t<link href=\"Employees('1')/ne_Room\" rel=\"http://schemas.microsoft" +
+ ".com/ado/2007/08/dataservices/related/ne_Room\" title=\"ne_Room\" type=\"application/atom+xml;" +
+ "type=entry\"/>\n" +
+ "\t<content src=\"Employees('1')/$value\" type=\"application/octet-stream\"/>\n" +
+ "\t<m:properties>\n" +
+ "\t\t<d:EmployeeId>1</d:EmployeeId>\n" +
+ "\t\t<d:EmployeeName>Walter Winter</d:EmployeeName>\n" +
+ "\t\t<d:ManagerId>1</d:ManagerId>\n" +
+ "\t\t<d:RoomId>1</d:RoomId>\n" +
+ "\t\t<d:TeamId>42</d:TeamId>\n" +
+ "\t\t<d:Location m:type=\"RefScenario.c_Location\">\n" +
+ "\t\t\t<d:City m:type=\"RefScenario.c_City\">\n" +
+ "\t\t\t\t<d:PostalCode>33470</d:PostalCode>\n" +
+ "\t\t\t\t<d:CityName>Duckburg</d:CityName>\n" +
+ "\t\t\t</d:City>\n" +
+ "\t\t\t<d:Country>Calisota</d:Country>\n" +
+ "\t\t</d:Location>\n" +
+ "\t\t<d:Age>52</d:Age>\n" +
+ "\t\t<d:EntryDate>1999-01-01T00:00:00</d:EntryDate>\n" +
+ "\t\t<d:ImageUrl m:null=\"true\"/>\n" +
+ "\t</m:properties>\n" +
+ "</entry>";
+
+ public JavaxStaxReaderWrapperTest(StreamWriterImplType type) {
+ super(type);
+ }
+
+ // CHECKSTYLE:OFF
+ @Before
+ public void init() {
+ //
+ System.setProperty(XML_STREAM_READER_FACTORY_CLASS, JavaxStaxStreamFactory.class.getName()); // NOSONAR
+ //
+ Map<String, String> prefixMap = new HashMap<String, String>();
+ prefixMap.put("", Edm.NAMESPACE_ATOM_2005);
+ prefixMap.put("d", Edm.NAMESPACE_D_2007_08);
+ prefixMap.put("m", Edm.NAMESPACE_M_2007_08);
+ prefixMap.put("xml", Edm.NAMESPACE_XML_1998);
+ XMLUnit.setXpathNamespaceContext(new SimpleNamespaceContext(prefixMap));
+ }
+ // CHECKSTYLE:ON
+
+ @Test
+ public void basic() throws Exception {
+ StringHelper.Stream stream = StringHelper.toStream(BASIC_RESULT);
+ JavaxStaxStreamFactory javaxStaxStreamFactory = new JavaxStaxStreamFactory();
+ XMLStreamReader xmlReader = javaxStaxStreamFactory.createXMLStreamReader(stream.asStream());
+
+ final int[] expected = new int[]{
+ XMLStreamConstants.START_ELEMENT,
+ XMLStreamConstants.START_ELEMENT,
+ XMLStreamConstants.CHARACTERS,
+ XMLStreamConstants.END_ELEMENT,
+ XMLStreamConstants.END_ELEMENT,
+ XMLStreamConstants.END_DOCUMENT};
+ int pos = 0;
+ while(xmlReader.hasNext()) {
+ int elementId = xmlReader.next();
+ assertEquals("Unexpected type at position: " + pos,
+ expected[pos++], elementId);
+ }
+ }
+
+ @Test
+ public void entityProvider() throws Exception {
+ Edm edmMock = MockFacade.getMockEdm();
+
+ String contentType = "application/xml";
+ EdmEntitySet entitySet = edmMock.getDefaultEntityContainer().getEntitySet("Employees");
+ EntityProviderReadProperties properties =
+ EntityProviderReadProperties.init().build();
+
+ StringHelper.Stream content = StringHelper.toStream(EMPLOYEE);
+
+ ODataEntry entry = EntityProvider.readEntry(contentType, entitySet, content.asStream(), properties);
+ Map<String, Object> employeeData = entry.getProperties();
+
+ // validate
+ assertEquals(9, employeeData.size());
+ //
+ assertEquals("1", employeeData.get("EmployeeId"));
+ assertEquals("Walter Winter", employeeData.get("EmployeeName"));
+ assertEquals("1", employeeData.get("ManagerId"));
+ assertEquals("1", employeeData.get("RoomId"));
+ assertEquals("42", employeeData.get("TeamId"));
+ assertEquals(Integer.valueOf(52), employeeData.get("Age"));
+ assertEquals(915148800000l, ((Calendar)employeeData.get("EntryDate")).getTimeInMillis());
+ Map<String, Object> location = (Map<String, Object>) employeeData.get("Location");
+ assertEquals("Calisota", location.get("Country"));
+ Map<String, Object> city = (Map<String, Object>) location.get("City");
+ assertEquals("33470", city.get("PostalCode"));
+ assertEquals("Duckburg", city.get("CityName"));
+ }
+}
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/c321fb74/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/xml/JavaxStaxStreamFactoryTest.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/xml/JavaxStaxStreamFactoryTest.java b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/xml/JavaxStaxStreamFactoryTest.java
new file mode 100644
index 0000000..ba93731
--- /dev/null
+++ b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/xml/JavaxStaxStreamFactoryTest.java
@@ -0,0 +1,131 @@
+/*******************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ ******************************************************************************/
+package org.apache.olingo.odata2.core.xml;
+
+import junit.framework.Assert;
+import org.apache.olingo.odata2.api.edm.Edm;
+import org.apache.olingo.odata2.api.edm.EdmEntitySet;
+import org.apache.olingo.odata2.api.ep.EntityProvider;
+import org.apache.olingo.odata2.api.ep.EntityProviderException;
+import org.apache.olingo.odata2.api.ep.EntityProviderReadProperties;
+import org.apache.olingo.odata2.api.ep.entry.ODataEntry;
+import org.apache.olingo.odata2.api.xml.XMLStreamConstants;
+import org.apache.olingo.odata2.api.xml.XMLStreamException;
+import org.apache.olingo.odata2.api.xml.XMLStreamReader;
+import org.apache.olingo.odata2.api.xml.XMLStreamWriter;
+import org.apache.olingo.odata2.core.ep.AbstractXmlProducerTestHelper;
+import org.apache.olingo.odata2.testutil.helper.StringHelper;
+import org.apache.olingo.odata2.testutil.mock.MockFacade;
+import org.custommonkey.xmlunit.SimpleNamespaceContext;
+import org.custommonkey.xmlunit.XMLUnit;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.io.*;
+import java.util.Calendar;
+import java.util.HashMap;
+import java.util.Map;
+
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertNotNull;
+import static org.apache.olingo.odata2.api.xml.XMLStreamReaderFactory.XML_STREAM_READER_FACTORY_CLASS;
+import static org.apache.olingo.odata2.api.xml.XMLStreamWriterFactory.XML_STREAM_WRITER_FACTORY_CLASS;
+import static org.custommonkey.xmlunit.XMLAssert.assertXpathExists;
+
+/**
+ */
+public class JavaxStaxStreamFactoryTest extends AbstractXmlProducerTestHelper {
+
+ private JavaxStaxStreamFactory javaxStaxStreamFactory;
+
+ public static final String BASIC_CONTENT = "<?xml version='1.0' encoding='UTF-8'?><start/>";
+
+ public JavaxStaxStreamFactoryTest(StreamWriterImplType type) {
+ super(type);
+ }
+
+ // CHECKSTYLE:OFF
+ @Before
+ public void init() {
+ //
+ System.setProperty(XML_STREAM_READER_FACTORY_CLASS, JavaxStaxStreamFactory.class.getName()); // NOSONAR
+ System.setProperty(XML_STREAM_WRITER_FACTORY_CLASS, JavaxStaxStreamFactory.class.getName()); // NOSONAR
+ //
+ Map<String, String> prefixMap = new HashMap<String, String>();
+ prefixMap.put("", Edm.NAMESPACE_ATOM_2005);
+ prefixMap.put("d", Edm.NAMESPACE_D_2007_08);
+ prefixMap.put("m", Edm.NAMESPACE_M_2007_08);
+ prefixMap.put("xml", Edm.NAMESPACE_XML_1998);
+ XMLUnit.setXpathNamespaceContext(new SimpleNamespaceContext(prefixMap));
+ javaxStaxStreamFactory = new JavaxStaxStreamFactory();
+ }
+ // CHECKSTYLE:ON
+
+
+ @Test
+ public void createReader() throws Exception {
+ InputStream stream = StringHelper.encapsulate(BASIC_CONTENT);
+ XMLStreamReader xmlReader = javaxStaxStreamFactory.createXMLStreamReader(stream);
+ assertNotNull(xmlReader);
+ Assert.assertTrue(xmlReader.hasNext());
+ }
+
+ @Test(expected = EntityProviderException.class)
+ public void createReaderWrongContent() throws Exception {
+ XMLStreamReader xmlReader = javaxStaxStreamFactory.createXMLStreamReader("content");
+ assertNotNull(xmlReader);
+ Assert.assertTrue(xmlReader.hasNext());
+ }
+
+ @Test
+ public void createWriterStream() throws Exception {
+ ByteArrayOutputStream stream = new ByteArrayOutputStream();
+ XMLStreamWriter xmlReader = javaxStaxStreamFactory.createXMLStreamWriter(stream);
+ xmlReader.writeStartDocument();
+ xmlReader.writeStartElement("start");
+ xmlReader.writeEndElement();
+ xmlReader.writeEndDocument();
+ xmlReader.flush();
+
+ assertNotNull(xmlReader);
+ String content = new String(stream.toByteArray());
+ assertXpathExists("/start", content);
+ }
+
+ @Test
+ public void createWriterPrintWriter() throws Exception {
+
+ StringWriter writer = new StringWriter();
+ XMLStreamWriter xmlReader = javaxStaxStreamFactory.createXMLStreamWriter(writer);
+ xmlReader.writeStartDocument();
+ xmlReader.writeStartElement("start");
+ xmlReader.writeEndElement();
+ xmlReader.writeEndDocument();
+ xmlReader.flush();
+
+ assertNotNull(xmlReader);
+ assertXpathExists("/start", writer.toString());
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void createWriterWrongContent() throws Exception {
+ XMLStreamWriter xmlReader = javaxStaxStreamFactory.createXMLStreamWriter("fail");
+ assertNotNull(xmlReader);
+ }
+}
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/c321fb74/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/xml/JavaxStaxWriterWrapperTest.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/xml/JavaxStaxWriterWrapperTest.java b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/xml/JavaxStaxWriterWrapperTest.java
new file mode 100644
index 0000000..3920b1b
--- /dev/null
+++ b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/xml/JavaxStaxWriterWrapperTest.java
@@ -0,0 +1,194 @@
+/*******************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ ******************************************************************************/
+package org.apache.olingo.odata2.core.xml;
+
+import org.apache.olingo.odata2.api.edm.Edm;
+import org.apache.olingo.odata2.api.edm.EdmEntitySet;
+import org.apache.olingo.odata2.api.ep.EntityProvider;
+import org.apache.olingo.odata2.api.ep.EntityProviderWriteProperties;
+import org.apache.olingo.odata2.api.processor.ODataResponse;
+import org.apache.olingo.odata2.core.ep.AbstractXmlProducerTestHelper;
+import org.apache.olingo.odata2.testutil.helper.StringHelper;
+import org.apache.olingo.odata2.testutil.mock.MockFacade;
+import org.custommonkey.xmlunit.SimpleNamespaceContext;
+import org.custommonkey.xmlunit.XMLUnit;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.io.InputStream;
+import java.io.StringWriter;
+import java.io.Writer;
+import java.net.URI;
+import java.util.Calendar;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.TimeZone;
+
+import static org.apache.olingo.odata2.api.xml.XMLStreamWriterFactory.XML_STREAM_WRITER_FACTORY_CLASS;
+import static org.custommonkey.xmlunit.XMLAssert.assertXpathEvaluatesTo;
+import static org.custommonkey.xmlunit.XMLAssert.assertXpathExists;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
+/**
+ */
+public class JavaxStaxWriterWrapperTest extends AbstractXmlProducerTestHelper {
+
+ private static final String BASIC_RESULT =
+ "<?xml version='1.0' encoding='UTF-8'?>" +
+ "<test><ns1:second attName=\"attValue\"/></test>";
+
+ public JavaxStaxWriterWrapperTest(StreamWriterImplType type) {
+ super(type);
+ }
+
+ // CHECKSTYLE:OFF
+ @Before
+ public void init() {
+ //
+ System.setProperty(XML_STREAM_WRITER_FACTORY_CLASS, JavaxStaxStreamFactory.class.getName()); // NOSONAR
+ //
+ Map<String, String> prefixMap = new HashMap<String, String>();
+ prefixMap.put("", Edm.NAMESPACE_ATOM_2005);
+ prefixMap.put("d", Edm.NAMESPACE_D_2007_08);
+ prefixMap.put("m", Edm.NAMESPACE_M_2007_08);
+ prefixMap.put("xml", Edm.NAMESPACE_XML_1998);
+ XMLUnit.setXpathNamespaceContext(new SimpleNamespaceContext(prefixMap));
+ }
+ // CHECKSTYLE:ON
+
+ @Test
+ public void basic() throws Exception {
+ final String defaultNamespace = "http://defaultNamespace";
+ final String namespaceNs1 = "namespace";
+
+ Map<String, String> prefixMap = new HashMap<String, String>();
+ prefixMap.put("", defaultNamespace);
+ prefixMap.put("ns1", namespaceNs1);
+ XMLUnit.setXpathNamespaceContext(new SimpleNamespaceContext(prefixMap));
+
+ Writer content = new StringWriter();
+ JavaxStaxStreamFactory javaxStaxStreamFactory = new JavaxStaxStreamFactory();
+ JavaxStaxWriterWrapper xmlWriter = (JavaxStaxWriterWrapper) javaxStaxStreamFactory.createXMLStreamWriter(content);
+
+ String encoding = "UTF-8";
+ String version = "1.0";
+
+ xmlWriter.writeStartDocument(encoding, version);
+ xmlWriter.setDefaultNamespace(defaultNamespace);
+ xmlWriter.setPrefix("ns1", namespaceNs1);
+ xmlWriter.writeStartElement("test");
+ xmlWriter.writeDefaultNamespace(defaultNamespace);
+ xmlWriter.writeNamespace("ns1", namespaceNs1);
+ xmlWriter.writeStartElement(namespaceNs1, "second");
+ xmlWriter.writeAttribute("attName", "attValue");
+ xmlWriter.writeEndElement();
+ xmlWriter.writeEndElement();
+ xmlWriter.writeEndDocument();
+
+ xmlWriter.flush();
+
+ //
+ String xmlString = content.toString();
+ assertXpathExists("/:test", xmlString);
+ assertXpathExists("/:test/ns1:second", xmlString);
+ assertXpathExists("/:test/ns1:second[@attName=\"attValue\"]", xmlString);
+ }
+
+ @Test
+ public void entityProvider() throws Exception {
+ Edm edmMock = MockFacade.getMockEdm();
+
+ String contentType = "application/xml";
+ EdmEntitySet entitySet = edmMock.getDefaultEntityContainer().getEntitySet("Employees");
+ Map<String, Object> data = createEmployeeData();
+ EntityProviderWriteProperties properties =
+ EntityProviderWriteProperties.serviceRoot(URI.create("http://root")).build();
+
+ ODataResponse entry = EntityProvider.writeEntry(contentType, entitySet, data, properties);
+ StringHelper.Stream content = StringHelper.toStream(entry.getEntity());
+
+ String xmlString = content.asString();
+
+ assertXpathEvaluatesTo(Edm.NAMESPACE_ATOM_2005, "/*/namespace::*[name()='']", xmlString);
+
+ assertXpathExists("/:entry", xmlString);
+ assertXpathExists("/:entry/:content", xmlString);
+ // verify self link
+ assertXpathExists("/:entry/:link[@href=\"Employees('1')\"]", xmlString);
+ // verify content media link
+ assertXpathExists("/:entry/:link[@href=\"Employees('1')/$value\"]", xmlString);
+ // verify one navigation link
+ assertXpathExists("/:entry/:link[@title='ne_Manager']", xmlString);
+
+ // verify content
+ assertXpathExists("/:entry/:content[@type='application/octet-stream']", xmlString);
+ // verify properties
+ assertXpathExists("/:entry/m:properties", xmlString);
+ assertXpathEvaluatesTo("9", "count(/:entry/m:properties/*)", xmlString);
+ }
+
+
+ @Test
+ public void writeMetadata() throws Exception {
+ Map<String, String> predefinedNamespaces = new HashMap<String, String>();
+ predefinedNamespaces.put("annoPrefix", "http://annoNamespace");
+ predefinedNamespaces.put("foo", "http://foo");
+ predefinedNamespaces.put("annoPrefix2", "http://annoNamespace");
+ predefinedNamespaces.put("annoPrefix", "http://annoNamespace");
+
+ ODataResponse response = EntityProvider.writeMetadata(null, predefinedNamespaces);
+ assertNotNull(response);
+ assertNotNull(response.getEntity());
+ assertNull("BasicProvider should not set content header", response.getContentHeader());
+ String metadata = StringHelper.inputStreamToString((InputStream) response.getEntity());
+ assertTrue(metadata.contains("xmlns:foo=\"http://foo\""));
+ assertTrue(metadata.contains("xmlns:annoPrefix=\"http://annoNamespace\""));
+ assertTrue(metadata.contains("xmlns:annoPrefix2=\"http://annoNamespace\""));
+ }
+
+ private Map<String, Object> createEmployeeData() {
+ Map<String, Object> employeeData = new HashMap<String, Object>();
+
+ Calendar date = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
+ date.clear();
+ date.set(1999, 0, 1);
+
+ employeeData.put("EmployeeId", "1");
+ employeeData.put("ImmageUrl", null);
+ employeeData.put("ManagerId", "1");
+ employeeData.put("Age", new Integer(52));
+ employeeData.put("RoomId", "1");
+ employeeData.put("EntryDate", date);
+ employeeData.put("TeamId", "42");
+ employeeData.put("EmployeeName", "Walter Winter");
+
+ Map<String, Object> locationData = new HashMap<String, Object>();
+ Map<String, Object> cityData = new HashMap<String, Object>();
+ cityData.put("PostalCode", "33470");
+ cityData.put("CityName", "Duckburg");
+ locationData.put("City", cityData);
+ locationData.put("Country", "Calisota");
+
+ employeeData.put("Location", locationData);
+
+ return employeeData;
+ }
+}
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/c321fb74/odata2-lib/odata-testutil/src/main/java/org/apache/olingo/odata2/testutil/helper/StringHelper.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-testutil/src/main/java/org/apache/olingo/odata2/testutil/helper/StringHelper.java b/odata2-lib/odata-testutil/src/main/java/org/apache/olingo/odata2/testutil/helper/StringHelper.java
index feb4ddd..ec8a22f 100644
--- a/odata2-lib/odata-testutil/src/main/java/org/apache/olingo/odata2/testutil/helper/StringHelper.java
+++ b/odata2-lib/odata-testutil/src/main/java/org/apache/olingo/odata2/testutil/helper/StringHelper.java
@@ -79,6 +79,16 @@ public class StringHelper {
}
}
+ public static Stream toStream(Object content) throws IOException {
+ if(content instanceof InputStream) {
+ return toStream((InputStream) content);
+ } else if(content instanceof String) {
+ return toStream((String) content);
+ } else {
+ throw new IllegalArgumentException("Given object type is not supported.");
+ }
+ }
+
public static Stream toStream(InputStream stream) throws IOException {
byte[] result = new byte[0];
byte[] tmp = new byte[8192];