--- /dev/null
+package org.collectionspace.services.common.xmljson.test;
+
+import static org.testng.Assert.assertEquals;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+import javax.xml.stream.XMLStreamException;
+
+import org.apache.commons.io.output.ByteArrayOutputStream;
+import org.codehaus.jackson.JsonFactory;
+import org.codehaus.jackson.JsonNode;
+import org.codehaus.jackson.JsonParseException;
+import org.codehaus.jackson.map.ObjectMapper;
+import org.collectionspace.services.common.xmljson.XmlToJsonStreamConverter;
+import org.testng.annotations.Test;
+
+public class XmlToJsonStreamConverterTest {
+ public final String FILE_PATH = "test-data/xmljson/";
+
+ private ObjectMapper mapper = new ObjectMapper();
+ private JsonFactory jsonFactory = mapper.getJsonFactory();
+
+ @Test
+ public void testConvert() throws XMLStreamException, JsonParseException, IOException {
+ testConvert("record.xml", "record.json");
+ }
+
+ private void testConvert(String xmlFileName, String jsonFileName) throws XMLStreamException, JsonParseException, IOException {
+ ClassLoader classLoader = getClass().getClassLoader();
+ File xmlFile = new File(classLoader.getResource(FILE_PATH + xmlFileName).getFile());
+ File jsonFile = new File(classLoader.getResource(FILE_PATH + jsonFileName).getFile());
+
+ FileInputStream in = new FileInputStream(xmlFile);
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+
+ XmlToJsonStreamConverter converter = new XmlToJsonStreamConverter(in, out);
+ converter.convert();
+
+ JsonNode actualJson = parseJsonStream(out.toInputStream());
+ JsonNode expectedJson = parseJsonStream(new FileInputStream(jsonFile));
+
+ assertEquals(actualJson, expectedJson);
+ }
+
+ private JsonNode parseJsonStream(InputStream in) throws JsonParseException, IOException {
+ return jsonFactory.createJsonParser(in).readValueAsTree();
+ }
+}
--- /dev/null
+<document name="examples">
+ <ns:collectionspace_core xmlns:ns="http://collectionspace.org/collectionspace_core/">
+ <tenantId>123</tenantId>
+ <workflowState>project</workflowState>
+ <createdAt>2016-07-27T04:31:38.290Z</createdAt>
+ <createdBy>someone@collectionspace.org</createdBy>
+ <updatedAt>2016-07-27T04:31:38.648Z</updatedAt>
+ <updatedBy>user@collectionspace.org</updatedBy>
+ <uri>/examples/2ece74b2-2053-458c-a252</uri>
+ </ns:collectionspace_core>
+ <ns:examples_common xmlns:ns="http://collectionspace.org/services/example">
+ <scalar>This is a scalar field value</scalar>
+ <struct>
+ <field1>A value in a structured field</field1>
+ <field2>Another structured field value</field2>
+ <nestedstruct>
+ <id>123abc</id>
+ <description>A nested structured field value</description>
+ </nestedstruct>
+ </struct>
+ <repeat>
+ <item>repeating scalar field value 1</item>
+ <item>repeating scalar field value 2</item>
+ <item>repeating scalar field value 3</item>
+ <item>repeating scalar field value 4</item>
+ </repeat>
+ <repeatstruct>
+ <innerstruct>
+ <name>Big Bird</name>
+ <color>yellow</color>
+ </innerstruct>
+ <innerstruct>
+ <name>Cookie Monster</name>
+ <color>blue</color>
+ </innerstruct>
+ <innerstruct>
+ <name>Elmo</name>
+ <age>3</age>
+ <nestedrepeat>
+ <nrval>a</nrval>
+ <nrval>b</nrval>
+ <nrval>c</nrval>
+ </nestedrepeat>
+ </innerstruct>
+ </repeatstruct>
+ </ns:examples_common>
+</document>