]> git.aero2k.de Git - tmp/jakarta-migration.git/commitdiff
DRYD-23: Implement XML to JSON conversion.
authorRay Lee <rhlee@berkeley.edu>
Sat, 30 Jul 2016 07:21:58 +0000 (00:21 -0700)
committerRay Lee <rhlee@berkeley.edu>
Wed, 3 Aug 2016 18:09:45 +0000 (11:09 -0700)
16 files changed:
services/common/pom.xml
services/common/src/main/java/org/collectionspace/services/common/xmljson/XmlToJsonStreamConverter.java
services/common/src/main/java/org/collectionspace/services/common/xmljson/parsetree/Node.java [new file with mode: 0644]
services/common/src/test/java/org/collectionspace/services/common/xmljson/test/XmlToJsonStreamConverterTest.java
services/common/src/test/resources/test-data/xmljson/accountperms.json [new file with mode: 0644]
services/common/src/test/resources/test-data/xmljson/accountperms.xml [new file with mode: 0644]
services/common/src/test/resources/test-data/xmljson/collectionobject-list.json [new file with mode: 0644]
services/common/src/test/resources/test-data/xmljson/collectionobject-list.xml [new file with mode: 0644]
services/common/src/test/resources/test-data/xmljson/collectionobject.json [new file with mode: 0644]
services/common/src/test/resources/test-data/xmljson/collectionobject.xml [new file with mode: 0644]
services/common/src/test/resources/test-data/xmljson/permissions.json [new file with mode: 0644]
services/common/src/test/resources/test-data/xmljson/permissions.xml [new file with mode: 0644]
services/common/src/test/resources/test-data/xmljson/record.json
services/common/src/test/resources/test-data/xmljson/record.xml
services/common/src/test/resources/test-data/xmljson/vocabulary-items.json [new file with mode: 0644]
services/common/src/test/resources/test-data/xmljson/vocabulary-items.xml [new file with mode: 0644]

index c6f436e6399fd64960b2565cda6d7825a5ee0783..ef9c31cac2ed5fc76cd0d5fe89d61597e37ef21a 100644 (file)
                        <version>${spring.version}</version>
                </dependency>
                
+               <dependency>
+                       <groupId>com.fasterxml.jackson.core</groupId>
+                       <artifactId>jackson-databind</artifactId>
+                       <version>2.8.0</version>
+               </dependency>
+               
                <dependency>
                        <groupId>org.easymock</groupId>
                        <artifactId>easymock</artifactId>
index 6963533bc71e6b57f1718860d572788876c1ff86..f849971edd07e5e42854d3ab6033358a8337b5f2 100644 (file)
 package org.collectionspace.services.common.xmljson;
 
+import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.io.PrintWriter;
+import java.util.Iterator;
+import java.util.Stack;
 
+import javax.xml.namespace.QName;
 import javax.xml.stream.XMLEventReader;
 import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamConstants;
 import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.events.Attribute;
+import javax.xml.stream.events.Namespace;
+import javax.xml.stream.events.StartElement;
+import javax.xml.stream.events.XMLEvent;
+
+import org.apache.commons.lang3.StringUtils;
+import org.collectionspace.services.common.xmljson.parsetree.Node;
+
+import com.fasterxml.jackson.core.JsonGenerationException;
+import com.fasterxml.jackson.databind.JsonMappingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
 
 public class XmlToJsonStreamConverter {
     protected XMLEventReader eventReader;
     protected PrintWriter writer;
+    protected Stack<Node> stack = new Stack<Node>();
+    protected Node parseResult = null;
+    
+    public static String nodeNameForQName(QName name) {
+        String prefix = name.getPrefix();
+        String localPart = name.getLocalPart();
+        
+        if (StringUtils.isNotEmpty(prefix)) {
+            return prefix + ":" + localPart;
+        }
+        
+        return localPart;
+    }
     
     public XmlToJsonStreamConverter(InputStream in, OutputStream out) throws XMLStreamException {
         XMLInputFactory factory = XMLInputFactory.newInstance();
         
-        this.eventReader = factory.createXMLEventReader(in);
-        this.writer = new PrintWriter(out);
+        eventReader = factory.createXMLEventReader(in);
+        writer = new PrintWriter(out);
     }
     
-    public void convert() throws XMLStreamException {
-        writer.print("{\"foo\": \"bar\"}");
+    public void convert() throws XMLStreamException, JsonGenerationException, JsonMappingException, IOException {
+        while(eventReader.hasNext()){
+            XMLEvent event = eventReader.nextEvent();
+            
+            switch(event.getEventType()) {
+                case XMLStreamConstants.CHARACTERS:
+                    onCharacters(event);
+                    break;
+                case XMLStreamConstants.START_ELEMENT:
+                    onStartElement(event);
+                    break;
+                case XMLStreamConstants.END_ELEMENT:
+                    onEndElement(event);
+                    break;
+                case XMLStreamConstants.START_DOCUMENT:
+                    onStartDocument(event);
+                    break;
+                case XMLStreamConstants.END_DOCUMENT:
+                    onEndDocument(event);
+                    break;
+            }
+        }
+        
+        ObjectMapper objectMapper = new ObjectMapper();
+        objectMapper.writeValue(writer, parseResult);
+        
         writer.flush();
-//        while(eventReader.hasNext()){
-//            XMLEvent event = eventReader.nextEvent();
-//            
-//            switch(event.getEventType()) {
-//            
-//            }
-//        }
+    }
+    
+    protected void onStartDocument(XMLEvent event) {
+        stack.push(new Node());
+    }
+
+    protected void onEndDocument(XMLEvent event) {
+        parseResult = stack.pop();
+    }
+    
+    @SuppressWarnings("unchecked")
+    protected void onStartElement(XMLEvent event) {
+        StartElement element = event.asStartElement();
+        QName name = element.getName();
+
+        Node node = new Node(nodeNameForQName(name));
+
+        Iterator<Attribute> attrIter = element.getAttributes();
+        
+        while(attrIter.hasNext()) {
+            Attribute attr = attrIter.next();
+            
+            node.addAttribute(attr.getName().toString(), attr.getValue());
+        }
+        
+        Iterator<Namespace> nsIter = element.getNamespaces();
+        
+        while(nsIter.hasNext()) {
+            Namespace ns = nsIter.next();
+            
+            node.addNamespace(ns.getPrefix(), ns.getNamespaceURI());
+        }
+        
+        stack.push(node);
+    }
+    
+    protected void onCharacters(XMLEvent event) {
+        String text = event.asCharacters().getData();
+        Node parent = stack.peek();
+        
+        parent.addText(text);
+    }
+    
+    protected void onEndElement(XMLEvent event) {
+        Node node = stack.pop();
+        Node parent = stack.peek();
+        
+        parent.addChild(node);
     }
 }
diff --git a/services/common/src/main/java/org/collectionspace/services/common/xmljson/parsetree/Node.java b/services/common/src/main/java/org/collectionspace/services/common/xmljson/parsetree/Node.java
new file mode 100644 (file)
index 0000000..b66dc1c
--- /dev/null
@@ -0,0 +1,186 @@
+package org.collectionspace.services.common.xmljson.parsetree;
+
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.lang3.StringUtils;
+
+import com.fasterxml.jackson.annotation.JsonValue;
+
+/**
+ * 
+ */
+public class Node {
+    private String name;
+    private String text = "";
+    private Map<String, String> namespaces = new LinkedHashMap<String, String>();
+    private Map<String, String> attributes = new LinkedHashMap<String, String>();
+    private Map<String, Object> children = new LinkedHashMap<String, Object>();
+    private boolean isTextAllowed = true;
+    
+    public static String hashKeyForAttributeName(String name) {
+        return "@" + name;
+    }
+
+    public static String hashKeyForNamespacePrefix(String prefix) {
+        return hashKeyForAttributeName("xmlns:" + prefix);
+    }
+    
+    public Node() {
+        
+    }
+
+    public Node(String name) {
+        setName(name);
+    }
+    
+    @JsonValue
+    public Object getValue() {
+        if (hasChildren()) {
+            return getCombinedMap();
+        }
+            
+        if (hasText()) {
+            return getText();
+        }
+        
+        return null;
+    }
+    
+    public boolean isEmpty() {
+        return (!(hasChildren() || hasText()));
+    }
+    
+    public Map<String, Object> getCombinedMap() {
+        Map<String, Object> combined = new LinkedHashMap<String, Object>();
+        Map<String, String> namespaces = getNamespaces();
+        Map<String, String> attributes = getAttributes();
+
+        for (String prefix : namespaces.keySet()) {
+            combined.put(hashKeyForNamespacePrefix(prefix), namespaces.get(prefix));
+        }
+
+        for (String name : attributes.keySet()) {
+            combined.put(hashKeyForAttributeName(name), attributes.get(name));
+        }
+        
+        combined.putAll(getChildren());
+        
+        return combined;
+    }
+    
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+    
+    public String getText() {
+        return text;
+    }
+
+    public void setText(String text) {
+        if (!isTextAllowed()) {
+            return;
+        }
+
+        this.text = text;
+    }
+    
+    public void addText(String text) {
+        if (!isTextAllowed()) {
+            return;
+        }
+        
+        this.text = this.text + text;
+    }
+    
+    public boolean hasText() {
+        return (isTextAllowed() && StringUtils.isNotEmpty(text));
+    }
+
+    public Map<String, String> getNamespaces() {
+        return namespaces;
+    }
+
+    public void setNamespaces(Map<String, String> namespaces) {
+        this.namespaces = namespaces;
+    }
+    
+    public void addNamespace(String prefix, String uri) {
+        this.namespaces.put(prefix, uri);
+    }
+
+    public Map<String, String> getAttributes() {
+        return attributes;
+    }
+
+    public void setAttributes(Map<String, String> attributes) {
+        this.attributes = attributes;
+    }
+    
+    public void addAttribute(String name, String value) {
+        this.attributes.put(name, value);
+    }
+
+    public Map<String, Object> getChildren() {
+        return children;
+    }
+
+    public void setChildren(Map<String, Object> children) {
+        this.children = children;
+    }
+    
+    public boolean hasChildren() {
+        return this.children.size() > 0;
+    }
+
+    public void addChild(Node node) {
+        // Assume mixed content is not allowed. If a child node is
+        // added, text is no longer allowed, and any existing
+        // text is removed.
+        
+        if (isTextAllowed()) {
+            setText("");
+            setTextAllowed(false);
+        }
+        
+        if (node.isEmpty()) {
+            return;
+        }
+        
+        Map<String, Object> children = this.getChildren();
+        String name = node.getName();
+        
+        if (children.containsKey(name)) {
+            Object existing = children.get(name);
+            
+            if (existing instanceof List) {
+                ((List<Node>) existing).add(node);
+            }
+            else if (existing instanceof Node) {
+                List<Node> list = new ArrayList<Node>();
+                
+                list.add((Node) existing);
+                list.add(node);
+                
+                children.put(name, list);
+            }
+        }
+        else {
+            children.put(name, node);
+        }
+    }
+
+    public boolean isTextAllowed() {
+        return isTextAllowed;
+    }
+
+    public void setTextAllowed(boolean isTextAllowed) {
+        this.isTextAllowed = isTextAllowed;
+    }
+}
index d872ebf29816cffa775f2a7e0ce5eca7a56909be..ee66e2fde7745d73fa41fd64315e61f7b0687606 100644 (file)
@@ -10,28 +10,38 @@ 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;
 
+import com.fasterxml.jackson.core.JsonFactory;
+import com.fasterxml.jackson.core.JsonParseException;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
 public class XmlToJsonStreamConverterTest {
     public final String FILE_PATH = "test-data/xmljson/";
     
     private ObjectMapper mapper = new ObjectMapper();
-    private JsonFactory jsonFactory = mapper.getJsonFactory();
+    private JsonFactory jsonFactory = mapper.getFactory();
     
     @Test
     public void testConvert() throws XMLStreamException, JsonParseException, IOException {
-        testConvert("record.xml", "record.json");
+        testConvert("record");
+        testConvert("collectionobject");
+        testConvert("collectionobject-list");
+        testConvert("accountperms");
+        testConvert("permissions");
+        testConvert("vocabulary-items");
     }
     
-    private void testConvert(String xmlFileName, String jsonFileName) throws XMLStreamException, JsonParseException, IOException {
+    private void testConvert(String fileName) throws XMLStreamException, JsonParseException, IOException {
+        System.out.println("-------------------------------------------");
+        System.out.println("Converting " + fileName);
+        System.out.println("-------------------------------------------");
+
         ClassLoader classLoader = getClass().getClassLoader();
-        File xmlFile = new File(classLoader.getResource(FILE_PATH + xmlFileName).getFile());
-        File jsonFile = new File(classLoader.getResource(FILE_PATH + jsonFileName).getFile());
+        File xmlFile = new File(classLoader.getResource(FILE_PATH + fileName + ".xml").getFile());
+        File jsonFile = new File(classLoader.getResource(FILE_PATH + fileName + ".json").getFile());
         
         FileInputStream in = new FileInputStream(xmlFile);
         ByteArrayOutputStream out = new ByteArrayOutputStream();
@@ -42,10 +52,12 @@ public class XmlToJsonStreamConverterTest {
         JsonNode actualJson = parseJsonStream(out.toInputStream());
         JsonNode expectedJson = parseJsonStream(new FileInputStream(jsonFile));
         
+        System.out.println(actualJson.toString());
+        
         assertEquals(actualJson, expectedJson);
     }
     
     private JsonNode parseJsonStream(InputStream in) throws JsonParseException, IOException {
-        return jsonFactory.createJsonParser(in).readValueAsTree();
+        return jsonFactory.createParser(in).readValueAsTree();
     }
 }
diff --git a/services/common/src/test/resources/test-data/xmljson/accountperms.json b/services/common/src/test/resources/test-data/xmljson/accountperms.json
new file mode 100644 (file)
index 0000000..2a25902
--- /dev/null
@@ -0,0 +1,949 @@
+{
+  "ns2:account_permission": {
+    "@xmlns:ns2": "http://collectionspace.org/services/authorization",
+    "account": {
+      "accountId": "1731b26a-3f5c-4df1-a1ae-32560a978d33",
+      "screenName": "Administrator",
+      "userId": "admin@core.collectionspace.org",
+      "tenantId": "1"
+    },
+    "permission": [
+      {
+        "permRelationshipId": "6096",
+        "permissionId": "1-_vocabularyitems_*_workflow_deprecate-CRUDL",
+        "resourceName": "/vocabularyitems/*/workflow/deprecate",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "3028",
+        "permissionId": "1-id-CRUDL",
+        "resourceName": "id",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "5574",
+        "permissionId": "1-_concepts_*_workflow_delete-CRUDL",
+        "resourceName": "/concepts/*/workflow/delete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "3035",
+        "permissionId": "1-index-CRUDL",
+        "resourceName": "index",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "3036",
+        "permissionId": "1-reports-CRUDL",
+        "resourceName": "reports",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "6015",
+        "permissionId": "1-_vocabularies_*_workflow_unreplicate-CRUDL",
+        "resourceName": "/vocabularies/*/workflow/unreplicate",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "5934",
+        "permissionId": "1-_orgauthorities_*_workflow_delete-CRUDL",
+        "resourceName": "/orgauthorities/*/workflow/delete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "5988",
+        "permissionId": "1-_vocabularies_*_workflow_undeprecate-CRUDL",
+        "resourceName": "/vocabularies/*/workflow/undeprecate",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "5781",
+        "permissionId": "1-_locationauthorities_*_workflow_undelete-CRUDL",
+        "resourceName": "/locationauthorities/*/workflow/undelete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "3046",
+        "permissionId": "1-authorization_roles_accountroles-CRUDL",
+        "resourceName": "authorization/roles/accountroles",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "5691",
+        "permissionId": "1-_persons_*_workflow_unreplicate-CRUDL",
+        "resourceName": "/persons/*/workflow/unreplicate",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "6420",
+        "permissionId": "1-_reports_*_workflow_undelete-CRUDL",
+        "resourceName": "/reports/*/workflow/undelete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "3030",
+        "permissionId": "1-servicegroups-CRUDL",
+        "resourceName": "servicegroups",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "3010",
+        "permissionId": "1-vocabularies-CRUDL",
+        "resourceName": "vocabularies",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "5619",
+        "permissionId": "1-_conceptauthorities_*_workflow_deprecate-CRUDL",
+        "resourceName": "/conceptauthorities/*/workflow/deprecate",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "3043",
+        "permissionId": "1-authorization_permissions_permroles-CRUDL",
+        "resourceName": "authorization/permissions/permroles",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "6168",
+        "permissionId": "1-_placeauthorities_*_workflow_undelete-CRUDL",
+        "resourceName": "/placeauthorities/*/workflow/undelete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "5808",
+        "permissionId": "1-_loansin_*_workflow_delete-CRUDL",
+        "resourceName": "/loansin/*/workflow/delete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "3001",
+        "permissionId": "1-personauthorities-CRUDL",
+        "resourceName": "personauthorities",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "5547",
+        "permissionId": "1-_concepts_*_workflow_undelete-CRUDL",
+        "resourceName": "/concepts/*/workflow/undelete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "5826",
+        "permissionId": "1-_loansout_*_workflow_delete-CRUDL",
+        "resourceName": "/loansout/*/workflow/delete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "5889",
+        "permissionId": "1-_organizations_*_workflow_unreplicate-CRUDL",
+        "resourceName": "/organizations/*/workflow/unreplicate",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "6078",
+        "permissionId": "1-_vocabularyitems_*_workflow_undelete-CRUDL",
+        "resourceName": "/vocabularyitems/*/workflow/undelete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "6150",
+        "permissionId": "1-_places_*_workflow_undelete-CRUDL",
+        "resourceName": "/places/*/workflow/undelete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "6186",
+        "permissionId": "1-_objectexit_*_workflow_undelete-CRUDL",
+        "resourceName": "/objectexit/*/workflow/undelete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "3004",
+        "permissionId": "1-loansin-CRUDL",
+        "resourceName": "loansin",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "5637",
+        "permissionId": "1-_conceptauthorities_*_workflow_unreplicate-CRUDL",
+        "resourceName": "/conceptauthorities/*/workflow/unreplicate",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "5835",
+        "permissionId": "1-_acquisitions_*_workflow_undelete-CRUDL",
+        "resourceName": "/acquisitions/*/workflow/undelete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "6159",
+        "permissionId": "1-_places_*_workflow_delete-CRUDL",
+        "resourceName": "/places/*/workflow/delete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "6366",
+        "permissionId": "1-_publicitems_*_workflow_undelete-CRUDL",
+        "resourceName": "/publicitems/*/workflow/undelete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "3014",
+        "permissionId": "1-exhibitions-CRUDL",
+        "resourceName": "exhibitions",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "5601",
+        "permissionId": "1-_conceptauthorities_*_workflow_undelete-CRUDL",
+        "resourceName": "/conceptauthorities/*/workflow/undelete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "5772",
+        "permissionId": "1-_locations_*_workflow_delete-CRUDL",
+        "resourceName": "/locations/*/workflow/delete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "6141",
+        "permissionId": "1-_exhibitions_*_workflow_delete-CRUDL",
+        "resourceName": "/exhibitions/*/workflow/delete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "6222",
+        "permissionId": "1-_workauthorities_*_workflow_undelete-CRUDL",
+        "resourceName": "/workauthorities/*/workflow/undelete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "6267",
+        "permissionId": "1-_citationauthorities_*_workflow_delete-CRUDL",
+        "resourceName": "/citationauthorities/*/workflow/delete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "6357",
+        "permissionId": "1-_media_*_workflow_delete-CRUDL",
+        "resourceName": "/media/*/workflow/delete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "6006",
+        "permissionId": "1-_vocabularies_*_workflow_delete-CRUDL",
+        "resourceName": "/vocabularies/*/workflow/delete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "3032",
+        "permissionId": "1-batch-CRUDL",
+        "resourceName": "batch",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "5853",
+        "permissionId": "1-_organizations_*_workflow_undelete-CRUDL",
+        "resourceName": "/organizations/*/workflow/undelete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "3042",
+        "permissionId": "1-authorization_permissions-CRUDL",
+        "resourceName": "authorization/permissions",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "5979",
+        "permissionId": "1-_vocabularies_*_workflow_undelete-CRUDL",
+        "resourceName": "/vocabularies/*/workflow/undelete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "3045",
+        "permissionId": "1-authorization_roles_permroles-CRUDL",
+        "resourceName": "authorization/roles/permroles",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "5556",
+        "permissionId": "1-_concepts_*_workflow_undeprecate-CRUDL",
+        "resourceName": "/concepts/*/workflow/undeprecate",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "6069",
+        "permissionId": "1-_movements_*_workflow_lock-CRUDL",
+        "resourceName": "/movements/*/workflow/lock",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "6105",
+        "permissionId": "1-_vocabularyitems_*_workflow_delete-CRUDL",
+        "resourceName": "/vocabularyitems/*/workflow/delete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "3041",
+        "permissionId": "1-authorization_roles-CRUDL",
+        "resourceName": "authorization/roles",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "3044",
+        "permissionId": "1-accounts_accountroles-CRUDL",
+        "resourceName": "accounts/accountroles",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "3016",
+        "permissionId": "1-placeauthorities-CRUDL",
+        "resourceName": "placeauthorities",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "5592",
+        "permissionId": "1-_concepts_*_workflow_replicate-CRUDL",
+        "resourceName": "/concepts/*/workflow/replicate",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "5880",
+        "permissionId": "1-_organizations_*_workflow_delete-CRUDL",
+        "resourceName": "/organizations/*/workflow/delete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "6123",
+        "permissionId": "1-_vocabularyitems_*_workflow_replicate-CRUDL",
+        "resourceName": "/vocabularyitems/*/workflow/replicate",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "2999",
+        "permissionId": "1-conceptauthorities-CRUDL",
+        "resourceName": "conceptauthorities",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "6438",
+        "permissionId": "1-_relations_*_workflow_undelete-CRUDL",
+        "resourceName": "/relations/*/workflow/undelete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "6492",
+        "permissionId": "1-_contacts_*_workflow_delete-CRUDL",
+        "resourceName": "/contacts/*/workflow/delete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "6213",
+        "permissionId": "1-_works_*_workflow_delete-CRUDL",
+        "resourceName": "/works/*/workflow/delete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "5673",
+        "permissionId": "1-_persons_*_workflow_deprecate-CRUDL",
+        "resourceName": "/persons/*/workflow/deprecate",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "6276",
+        "permissionId": "1-_intakes_*_workflow_undelete-CRUDL",
+        "resourceName": "/intakes/*/workflow/undelete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "3021",
+        "permissionId": "1-citationauthorities-CRUDL",
+        "resourceName": "citationauthorities",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "5682",
+        "permissionId": "1-_persons_*_workflow_delete-CRUDL",
+        "resourceName": "/persons/*/workflow/delete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "5727",
+        "permissionId": "1-_personauthorities_*_workflow_deprecate-CRUDL",
+        "resourceName": "/personauthorities/*/workflow/deprecate",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "5664",
+        "permissionId": "1-_persons_*_workflow_undeprecate-CRUDL",
+        "resourceName": "/persons/*/workflow/undeprecate",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "6087",
+        "permissionId": "1-_vocabularyitems_*_workflow_undeprecate-CRUDL",
+        "resourceName": "/vocabularyitems/*/workflow/undeprecate",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "3012",
+        "permissionId": "1-movements-CRUDL",
+        "resourceName": "movements",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "6339",
+        "permissionId": "1-_valuationcontrols_*_workflow_delete-CRUDL",
+        "resourceName": "/valuationcontrols/*/workflow/delete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "6384",
+        "permissionId": "1-_blobs_*_workflow_undelete-CRUDL",
+        "resourceName": "/blobs/*/workflow/undelete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "5790",
+        "permissionId": "1-_locationauthorities_*_workflow_delete-CRUDL",
+        "resourceName": "/locationauthorities/*/workflow/delete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "6024",
+        "permissionId": "1-_vocabularies_*_workflow_replicate-CRUDL",
+        "resourceName": "/vocabularies/*/workflow/replicate",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "5754",
+        "permissionId": "1-_personauthorities_*_workflow_replicate-CRUDL",
+        "resourceName": "/personauthorities/*/workflow/replicate",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "6060",
+        "permissionId": "1-_movements_*_workflow_delete-CRUDL",
+        "resourceName": "/movements/*/workflow/delete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "3027",
+        "permissionId": "1-idgenerators-CRUDL",
+        "resourceName": "idgenerators",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "5817",
+        "permissionId": "1-_loansout_*_workflow_undelete-CRUDL",
+        "resourceName": "/loansout/*/workflow/undelete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "3015",
+        "permissionId": "1-places-CRUDL",
+        "resourceName": "places",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "6231",
+        "permissionId": "1-_workauthorities_*_workflow_delete-CRUDL",
+        "resourceName": "/workauthorities/*/workflow/delete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "5700",
+        "permissionId": "1-_persons_*_workflow_replicate-CRUDL",
+        "resourceName": "/persons/*/workflow/replicate",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "6249",
+        "permissionId": "1-_citations_*_workflow_delete-CRUDL",
+        "resourceName": "/citations/*/workflow/delete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "6330",
+        "permissionId": "1-_valuationcontrols_*_workflow_undelete-CRUDL",
+        "resourceName": "/valuationcontrols/*/workflow/undelete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "3025",
+        "permissionId": "1-valuationcontrols-CRUDL",
+        "resourceName": "valuationcontrols",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "3038",
+        "permissionId": "1-dimensions-CRUDL",
+        "resourceName": "dimensions",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "6474",
+        "permissionId": "1-_dimensions_*_workflow_lock-CRUDL",
+        "resourceName": "/dimensions/*/workflow/lock",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "3034",
+        "permissionId": "1-workflow-CRUDL",
+        "resourceName": "workflow",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "6033",
+        "permissionId": "1-_conservation_*_workflow_undelete-CRUDL",
+        "resourceName": "/conservation/*/workflow/undelete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "6321",
+        "permissionId": "1-_groups_*_workflow_delete-CRUDL",
+        "resourceName": "/groups/*/workflow/delete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "3020",
+        "permissionId": "1-citations-CRUDL",
+        "resourceName": "citations",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "3022",
+        "permissionId": "1-intakes-CRUDL",
+        "resourceName": "intakes",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "5952",
+        "permissionId": "1-_orgauthorities_*_workflow_replicate-CRUDL",
+        "resourceName": "/orgauthorities/*/workflow/replicate",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "3031",
+        "permissionId": "1-blobs-CRUDL",
+        "resourceName": "blobs",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "3039",
+        "permissionId": "1-_dimensions_workflow_-CRUDL",
+        "resourceName": "/dimensions/workflow/",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "3017",
+        "permissionId": "1-objectexit-CRUDL",
+        "resourceName": "objectexit",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "6312",
+        "permissionId": "1-_groups_*_workflow_undelete-CRUDL",
+        "resourceName": "/groups/*/workflow/undelete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "3024",
+        "permissionId": "1-groups-CRUDL",
+        "resourceName": "groups",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "5565",
+        "permissionId": "1-_concepts_*_workflow_deprecate-CRUDL",
+        "resourceName": "/concepts/*/workflow/deprecate",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "3005",
+        "permissionId": "1-loansout-CRUDL",
+        "resourceName": "loansout",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "6402",
+        "permissionId": "1-_batch_*_workflow_undelete-CRUDL",
+        "resourceName": "/batch/*/workflow/undelete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "6375",
+        "permissionId": "1-_publicitems_*_workflow_delete-CRUDL",
+        "resourceName": "/publicitems/*/workflow/delete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "3037",
+        "permissionId": "1-relations-CRUDL",
+        "resourceName": "relations",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "5799",
+        "permissionId": "1-_loansin_*_workflow_undelete-CRUDL",
+        "resourceName": "/loansin/*/workflow/undelete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "5871",
+        "permissionId": "1-_organizations_*_workflow_deprecate-CRUDL",
+        "resourceName": "/organizations/*/workflow/deprecate",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "6447",
+        "permissionId": "1-_relations_*_workflow_delete-CRUDL",
+        "resourceName": "/relations/*/workflow/delete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "6195",
+        "permissionId": "1-_objectexit_*_workflow_delete-CRUDL",
+        "resourceName": "/objectexit/*/workflow/delete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "6204",
+        "permissionId": "1-_works_*_workflow_undelete-CRUDL",
+        "resourceName": "/works/*/workflow/undelete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "3018",
+        "permissionId": "1-works-CRUDL",
+        "resourceName": "works",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "5736",
+        "permissionId": "1-_personauthorities_*_workflow_delete-CRUDL",
+        "resourceName": "/personauthorities/*/workflow/delete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "2997",
+        "permissionId": "1-accounts-CRUDL",
+        "resourceName": "accounts",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "3007",
+        "permissionId": "1-organizations-CRUDL",
+        "resourceName": "organizations",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "5898",
+        "permissionId": "1-_organizations_*_workflow_replicate-CRUDL",
+        "resourceName": "/organizations/*/workflow/replicate",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "5763",
+        "permissionId": "1-_locations_*_workflow_undelete-CRUDL",
+        "resourceName": "/locations/*/workflow/undelete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "3006",
+        "permissionId": "1-acquisitions-CRUDL",
+        "resourceName": "acquisitions",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "5961",
+        "permissionId": "1-_collectionobjects_*_workflow_undelete-CRUDL",
+        "resourceName": "/collectionobjects/*/workflow/undelete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "6465",
+        "permissionId": "1-_dimensions_*_workflow_delete-CRUDL",
+        "resourceName": "/dimensions/*/workflow/delete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "3011",
+        "permissionId": "1-conservation-CRUDL",
+        "resourceName": "conservation",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "5943",
+        "permissionId": "1-_orgauthorities_*_workflow_unreplicate-CRUDL",
+        "resourceName": "/orgauthorities/*/workflow/unreplicate",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "5655",
+        "permissionId": "1-_persons_*_workflow_undelete-CRUDL",
+        "resourceName": "/persons/*/workflow/undelete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "3033",
+        "permissionId": "1-imports-CRUDL",
+        "resourceName": "imports",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "5916",
+        "permissionId": "1-_orgauthorities_*_workflow_undeprecate-CRUDL",
+        "resourceName": "/orgauthorities/*/workflow/undeprecate",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "3009",
+        "permissionId": "1-collectionobjects-CRUDL",
+        "resourceName": "collectionobjects",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "5646",
+        "permissionId": "1-_conceptauthorities_*_workflow_replicate-CRUDL",
+        "resourceName": "/conceptauthorities/*/workflow/replicate",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "5745",
+        "permissionId": "1-_personauthorities_*_workflow_unreplicate-CRUDL",
+        "resourceName": "/personauthorities/*/workflow/unreplicate",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "2998",
+        "permissionId": "1-concepts-CRUDL",
+        "resourceName": "concepts",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "6114",
+        "permissionId": "1-_vocabularyitems_*_workflow_unreplicate-CRUDL",
+        "resourceName": "/vocabularyitems/*/workflow/unreplicate",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "3008",
+        "permissionId": "1-orgauthorities-CRUDL",
+        "resourceName": "orgauthorities",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "3013",
+        "permissionId": "1-vocabularyitems-CRUDL",
+        "resourceName": "vocabularyitems",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "5583",
+        "permissionId": "1-_concepts_*_workflow_unreplicate-CRUDL",
+        "resourceName": "/concepts/*/workflow/unreplicate",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "6411",
+        "permissionId": "1-_batch_*_workflow_delete-CRUDL",
+        "resourceName": "/batch/*/workflow/delete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "5907",
+        "permissionId": "1-_orgauthorities_*_workflow_undelete-CRUDL",
+        "resourceName": "/orgauthorities/*/workflow/undelete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "5925",
+        "permissionId": "1-_orgauthorities_*_workflow_deprecate-CRUDL",
+        "resourceName": "/orgauthorities/*/workflow/deprecate",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "6051",
+        "permissionId": "1-_movements_*_workflow_undelete-CRUDL",
+        "resourceName": "/movements/*/workflow/undelete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "3040",
+        "permissionId": "1-contacts-CRUDL",
+        "resourceName": "contacts",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "6483",
+        "permissionId": "1-_contacts_*_workflow_undelete-CRUDL",
+        "resourceName": "/contacts/*/workflow/undelete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "6258",
+        "permissionId": "1-_citationauthorities_*_workflow_undelete-CRUDL",
+        "resourceName": "/citationauthorities/*/workflow/undelete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "3003",
+        "permissionId": "1-locationauthorities-CRUDL",
+        "resourceName": "locationauthorities",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "6348",
+        "permissionId": "1-_media_*_workflow_undelete-CRUDL",
+        "resourceName": "/media/*/workflow/undelete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "6240",
+        "permissionId": "1-_citations_*_workflow_undelete-CRUDL",
+        "resourceName": "/citations/*/workflow/undelete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "3026",
+        "permissionId": "1-media-CRUDL",
+        "resourceName": "media",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "3000",
+        "permissionId": "1-persons-CRUDL",
+        "resourceName": "persons",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "5970",
+        "permissionId": "1-_collectionobjects_*_workflow_delete-CRUDL",
+        "resourceName": "/collectionobjects/*/workflow/delete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "3029",
+        "permissionId": "1-publicitems-CRUDL",
+        "resourceName": "publicitems",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "6042",
+        "permissionId": "1-_conservation_*_workflow_delete-CRUDL",
+        "resourceName": "/conservation/*/workflow/delete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "6177",
+        "permissionId": "1-_placeauthorities_*_workflow_delete-CRUDL",
+        "resourceName": "/placeauthorities/*/workflow/delete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "3002",
+        "permissionId": "1-locations-CRUDL",
+        "resourceName": "locations",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "6303",
+        "permissionId": "1-_conditionchecks_*_workflow_delete-CRUDL",
+        "resourceName": "/conditionchecks/*/workflow/delete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "5610",
+        "permissionId": "1-_conceptauthorities_*_workflow_undeprecate-CRUDL",
+        "resourceName": "/conceptauthorities/*/workflow/undeprecate",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "5628",
+        "permissionId": "1-_conceptauthorities_*_workflow_delete-CRUDL",
+        "resourceName": "/conceptauthorities/*/workflow/delete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "5709",
+        "permissionId": "1-_personauthorities_*_workflow_undelete-CRUDL",
+        "resourceName": "/personauthorities/*/workflow/undelete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "3019",
+        "permissionId": "1-workauthorities-CRUDL",
+        "resourceName": "workauthorities",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "5997",
+        "permissionId": "1-_vocabularies_*_workflow_deprecate-CRUDL",
+        "resourceName": "/vocabularies/*/workflow/deprecate",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "6429",
+        "permissionId": "1-_reports_*_workflow_delete-CRUDL",
+        "resourceName": "/reports/*/workflow/delete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "6456",
+        "permissionId": "1-_dimensions_*_workflow_undelete-CRUDL",
+        "resourceName": "/dimensions/*/workflow/undelete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "5844",
+        "permissionId": "1-_acquisitions_*_workflow_delete-CRUDL",
+        "resourceName": "/acquisitions/*/workflow/delete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "5718",
+        "permissionId": "1-_personauthorities_*_workflow_undeprecate-CRUDL",
+        "resourceName": "/personauthorities/*/workflow/undeprecate",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "6132",
+        "permissionId": "1-_exhibitions_*_workflow_undelete-CRUDL",
+        "resourceName": "/exhibitions/*/workflow/undelete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "6393",
+        "permissionId": "1-_blobs_*_workflow_delete-CRUDL",
+        "resourceName": "/blobs/*/workflow/delete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "6285",
+        "permissionId": "1-_intakes_*_workflow_delete-CRUDL",
+        "resourceName": "/intakes/*/workflow/delete",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "3023",
+        "permissionId": "1-conditionchecks-CRUDL",
+        "resourceName": "conditionchecks",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "5862",
+        "permissionId": "1-_organizations_*_workflow_undeprecate-CRUDL",
+        "resourceName": "/organizations/*/workflow/undeprecate",
+        "actionGroup": "CRUDL"
+      },
+      {
+        "permRelationshipId": "6294",
+        "permissionId": "1-_conditionchecks_*_workflow_undelete-CRUDL",
+        "resourceName": "/conditionchecks/*/workflow/undelete",
+        "actionGroup": "CRUDL"
+      }
+    ]
+  }
+}
\ No newline at end of file
diff --git a/services/common/src/test/resources/test-data/xmljson/accountperms.xml b/services/common/src/test/resources/test-data/xmljson/accountperms.xml
new file mode 100644 (file)
index 0000000..67331d0
--- /dev/null
@@ -0,0 +1,944 @@
+<ns2:account_permission xmlns:ns2="http://collectionspace.org/services/authorization">
+    <account>
+        <accountId>1731b26a-3f5c-4df1-a1ae-32560a978d33</accountId>
+        <screenName>Administrator</screenName>
+        <userId>admin@core.collectionspace.org</userId>
+        <tenantId>1</tenantId>
+    </account>
+    <permission>
+        <permRelationshipId>6096</permRelationshipId>
+        <permissionId>1-_vocabularyitems_*_workflow_deprecate-CRUDL</permissionId>
+        <resourceName>/vocabularyitems/*/workflow/deprecate</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>3028</permRelationshipId>
+        <permissionId>1-id-CRUDL</permissionId>
+        <resourceName>id</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>5574</permRelationshipId>
+        <permissionId>1-_concepts_*_workflow_delete-CRUDL</permissionId>
+        <resourceName>/concepts/*/workflow/delete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>3035</permRelationshipId>
+        <permissionId>1-index-CRUDL</permissionId>
+        <resourceName>index</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>3036</permRelationshipId>
+        <permissionId>1-reports-CRUDL</permissionId>
+        <resourceName>reports</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>6015</permRelationshipId>
+        <permissionId>1-_vocabularies_*_workflow_unreplicate-CRUDL</permissionId>
+        <resourceName>/vocabularies/*/workflow/unreplicate</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>5934</permRelationshipId>
+        <permissionId>1-_orgauthorities_*_workflow_delete-CRUDL</permissionId>
+        <resourceName>/orgauthorities/*/workflow/delete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>5988</permRelationshipId>
+        <permissionId>1-_vocabularies_*_workflow_undeprecate-CRUDL</permissionId>
+        <resourceName>/vocabularies/*/workflow/undeprecate</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>5781</permRelationshipId>
+        <permissionId>1-_locationauthorities_*_workflow_undelete-CRUDL</permissionId>
+        <resourceName>/locationauthorities/*/workflow/undelete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>3046</permRelationshipId>
+        <permissionId>1-authorization_roles_accountroles-CRUDL</permissionId>
+        <resourceName>authorization/roles/accountroles</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>5691</permRelationshipId>
+        <permissionId>1-_persons_*_workflow_unreplicate-CRUDL</permissionId>
+        <resourceName>/persons/*/workflow/unreplicate</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>6420</permRelationshipId>
+        <permissionId>1-_reports_*_workflow_undelete-CRUDL</permissionId>
+        <resourceName>/reports/*/workflow/undelete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>3030</permRelationshipId>
+        <permissionId>1-servicegroups-CRUDL</permissionId>
+        <resourceName>servicegroups</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>3010</permRelationshipId>
+        <permissionId>1-vocabularies-CRUDL</permissionId>
+        <resourceName>vocabularies</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>5619</permRelationshipId>
+        <permissionId>1-_conceptauthorities_*_workflow_deprecate-CRUDL</permissionId>
+        <resourceName>/conceptauthorities/*/workflow/deprecate</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>3043</permRelationshipId>
+        <permissionId>1-authorization_permissions_permroles-CRUDL</permissionId>
+        <resourceName>authorization/permissions/permroles</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>6168</permRelationshipId>
+        <permissionId>1-_placeauthorities_*_workflow_undelete-CRUDL</permissionId>
+        <resourceName>/placeauthorities/*/workflow/undelete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>5808</permRelationshipId>
+        <permissionId>1-_loansin_*_workflow_delete-CRUDL</permissionId>
+        <resourceName>/loansin/*/workflow/delete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>3001</permRelationshipId>
+        <permissionId>1-personauthorities-CRUDL</permissionId>
+        <resourceName>personauthorities</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>5547</permRelationshipId>
+        <permissionId>1-_concepts_*_workflow_undelete-CRUDL</permissionId>
+        <resourceName>/concepts/*/workflow/undelete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>5826</permRelationshipId>
+        <permissionId>1-_loansout_*_workflow_delete-CRUDL</permissionId>
+        <resourceName>/loansout/*/workflow/delete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>5889</permRelationshipId>
+        <permissionId>1-_organizations_*_workflow_unreplicate-CRUDL</permissionId>
+        <resourceName>/organizations/*/workflow/unreplicate</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>6078</permRelationshipId>
+        <permissionId>1-_vocabularyitems_*_workflow_undelete-CRUDL</permissionId>
+        <resourceName>/vocabularyitems/*/workflow/undelete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>6150</permRelationshipId>
+        <permissionId>1-_places_*_workflow_undelete-CRUDL</permissionId>
+        <resourceName>/places/*/workflow/undelete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>6186</permRelationshipId>
+        <permissionId>1-_objectexit_*_workflow_undelete-CRUDL</permissionId>
+        <resourceName>/objectexit/*/workflow/undelete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>3004</permRelationshipId>
+        <permissionId>1-loansin-CRUDL</permissionId>
+        <resourceName>loansin</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>5637</permRelationshipId>
+        <permissionId>1-_conceptauthorities_*_workflow_unreplicate-CRUDL</permissionId>
+        <resourceName>/conceptauthorities/*/workflow/unreplicate</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>5835</permRelationshipId>
+        <permissionId>1-_acquisitions_*_workflow_undelete-CRUDL</permissionId>
+        <resourceName>/acquisitions/*/workflow/undelete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>6159</permRelationshipId>
+        <permissionId>1-_places_*_workflow_delete-CRUDL</permissionId>
+        <resourceName>/places/*/workflow/delete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>6366</permRelationshipId>
+        <permissionId>1-_publicitems_*_workflow_undelete-CRUDL</permissionId>
+        <resourceName>/publicitems/*/workflow/undelete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>3014</permRelationshipId>
+        <permissionId>1-exhibitions-CRUDL</permissionId>
+        <resourceName>exhibitions</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>5601</permRelationshipId>
+        <permissionId>1-_conceptauthorities_*_workflow_undelete-CRUDL</permissionId>
+        <resourceName>/conceptauthorities/*/workflow/undelete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>5772</permRelationshipId>
+        <permissionId>1-_locations_*_workflow_delete-CRUDL</permissionId>
+        <resourceName>/locations/*/workflow/delete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>6141</permRelationshipId>
+        <permissionId>1-_exhibitions_*_workflow_delete-CRUDL</permissionId>
+        <resourceName>/exhibitions/*/workflow/delete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>6222</permRelationshipId>
+        <permissionId>1-_workauthorities_*_workflow_undelete-CRUDL</permissionId>
+        <resourceName>/workauthorities/*/workflow/undelete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>6267</permRelationshipId>
+        <permissionId>1-_citationauthorities_*_workflow_delete-CRUDL</permissionId>
+        <resourceName>/citationauthorities/*/workflow/delete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>6357</permRelationshipId>
+        <permissionId>1-_media_*_workflow_delete-CRUDL</permissionId>
+        <resourceName>/media/*/workflow/delete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>6006</permRelationshipId>
+        <permissionId>1-_vocabularies_*_workflow_delete-CRUDL</permissionId>
+        <resourceName>/vocabularies/*/workflow/delete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>3032</permRelationshipId>
+        <permissionId>1-batch-CRUDL</permissionId>
+        <resourceName>batch</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>5853</permRelationshipId>
+        <permissionId>1-_organizations_*_workflow_undelete-CRUDL</permissionId>
+        <resourceName>/organizations/*/workflow/undelete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>3042</permRelationshipId>
+        <permissionId>1-authorization_permissions-CRUDL</permissionId>
+        <resourceName>authorization/permissions</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>5979</permRelationshipId>
+        <permissionId>1-_vocabularies_*_workflow_undelete-CRUDL</permissionId>
+        <resourceName>/vocabularies/*/workflow/undelete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>3045</permRelationshipId>
+        <permissionId>1-authorization_roles_permroles-CRUDL</permissionId>
+        <resourceName>authorization/roles/permroles</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>5556</permRelationshipId>
+        <permissionId>1-_concepts_*_workflow_undeprecate-CRUDL</permissionId>
+        <resourceName>/concepts/*/workflow/undeprecate</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>6069</permRelationshipId>
+        <permissionId>1-_movements_*_workflow_lock-CRUDL</permissionId>
+        <resourceName>/movements/*/workflow/lock</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>6105</permRelationshipId>
+        <permissionId>1-_vocabularyitems_*_workflow_delete-CRUDL</permissionId>
+        <resourceName>/vocabularyitems/*/workflow/delete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>3041</permRelationshipId>
+        <permissionId>1-authorization_roles-CRUDL</permissionId>
+        <resourceName>authorization/roles</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>3044</permRelationshipId>
+        <permissionId>1-accounts_accountroles-CRUDL</permissionId>
+        <resourceName>accounts/accountroles</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>3016</permRelationshipId>
+        <permissionId>1-placeauthorities-CRUDL</permissionId>
+        <resourceName>placeauthorities</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>5592</permRelationshipId>
+        <permissionId>1-_concepts_*_workflow_replicate-CRUDL</permissionId>
+        <resourceName>/concepts/*/workflow/replicate</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>5880</permRelationshipId>
+        <permissionId>1-_organizations_*_workflow_delete-CRUDL</permissionId>
+        <resourceName>/organizations/*/workflow/delete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>6123</permRelationshipId>
+        <permissionId>1-_vocabularyitems_*_workflow_replicate-CRUDL</permissionId>
+        <resourceName>/vocabularyitems/*/workflow/replicate</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>2999</permRelationshipId>
+        <permissionId>1-conceptauthorities-CRUDL</permissionId>
+        <resourceName>conceptauthorities</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>6438</permRelationshipId>
+        <permissionId>1-_relations_*_workflow_undelete-CRUDL</permissionId>
+        <resourceName>/relations/*/workflow/undelete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>6492</permRelationshipId>
+        <permissionId>1-_contacts_*_workflow_delete-CRUDL</permissionId>
+        <resourceName>/contacts/*/workflow/delete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>6213</permRelationshipId>
+        <permissionId>1-_works_*_workflow_delete-CRUDL</permissionId>
+        <resourceName>/works/*/workflow/delete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>5673</permRelationshipId>
+        <permissionId>1-_persons_*_workflow_deprecate-CRUDL</permissionId>
+        <resourceName>/persons/*/workflow/deprecate</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>6276</permRelationshipId>
+        <permissionId>1-_intakes_*_workflow_undelete-CRUDL</permissionId>
+        <resourceName>/intakes/*/workflow/undelete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>3021</permRelationshipId>
+        <permissionId>1-citationauthorities-CRUDL</permissionId>
+        <resourceName>citationauthorities</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>5682</permRelationshipId>
+        <permissionId>1-_persons_*_workflow_delete-CRUDL</permissionId>
+        <resourceName>/persons/*/workflow/delete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>5727</permRelationshipId>
+        <permissionId>1-_personauthorities_*_workflow_deprecate-CRUDL</permissionId>
+        <resourceName>/personauthorities/*/workflow/deprecate</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>5664</permRelationshipId>
+        <permissionId>1-_persons_*_workflow_undeprecate-CRUDL</permissionId>
+        <resourceName>/persons/*/workflow/undeprecate</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>6087</permRelationshipId>
+        <permissionId>1-_vocabularyitems_*_workflow_undeprecate-CRUDL</permissionId>
+        <resourceName>/vocabularyitems/*/workflow/undeprecate</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>3012</permRelationshipId>
+        <permissionId>1-movements-CRUDL</permissionId>
+        <resourceName>movements</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>6339</permRelationshipId>
+        <permissionId>1-_valuationcontrols_*_workflow_delete-CRUDL</permissionId>
+        <resourceName>/valuationcontrols/*/workflow/delete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>6384</permRelationshipId>
+        <permissionId>1-_blobs_*_workflow_undelete-CRUDL</permissionId>
+        <resourceName>/blobs/*/workflow/undelete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>5790</permRelationshipId>
+        <permissionId>1-_locationauthorities_*_workflow_delete-CRUDL</permissionId>
+        <resourceName>/locationauthorities/*/workflow/delete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>6024</permRelationshipId>
+        <permissionId>1-_vocabularies_*_workflow_replicate-CRUDL</permissionId>
+        <resourceName>/vocabularies/*/workflow/replicate</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>5754</permRelationshipId>
+        <permissionId>1-_personauthorities_*_workflow_replicate-CRUDL</permissionId>
+        <resourceName>/personauthorities/*/workflow/replicate</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>6060</permRelationshipId>
+        <permissionId>1-_movements_*_workflow_delete-CRUDL</permissionId>
+        <resourceName>/movements/*/workflow/delete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>3027</permRelationshipId>
+        <permissionId>1-idgenerators-CRUDL</permissionId>
+        <resourceName>idgenerators</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>5817</permRelationshipId>
+        <permissionId>1-_loansout_*_workflow_undelete-CRUDL</permissionId>
+        <resourceName>/loansout/*/workflow/undelete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>3015</permRelationshipId>
+        <permissionId>1-places-CRUDL</permissionId>
+        <resourceName>places</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>6231</permRelationshipId>
+        <permissionId>1-_workauthorities_*_workflow_delete-CRUDL</permissionId>
+        <resourceName>/workauthorities/*/workflow/delete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>5700</permRelationshipId>
+        <permissionId>1-_persons_*_workflow_replicate-CRUDL</permissionId>
+        <resourceName>/persons/*/workflow/replicate</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>6249</permRelationshipId>
+        <permissionId>1-_citations_*_workflow_delete-CRUDL</permissionId>
+        <resourceName>/citations/*/workflow/delete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>6330</permRelationshipId>
+        <permissionId>1-_valuationcontrols_*_workflow_undelete-CRUDL</permissionId>
+        <resourceName>/valuationcontrols/*/workflow/undelete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>3025</permRelationshipId>
+        <permissionId>1-valuationcontrols-CRUDL</permissionId>
+        <resourceName>valuationcontrols</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>3038</permRelationshipId>
+        <permissionId>1-dimensions-CRUDL</permissionId>
+        <resourceName>dimensions</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>6474</permRelationshipId>
+        <permissionId>1-_dimensions_*_workflow_lock-CRUDL</permissionId>
+        <resourceName>/dimensions/*/workflow/lock</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>3034</permRelationshipId>
+        <permissionId>1-workflow-CRUDL</permissionId>
+        <resourceName>workflow</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>6033</permRelationshipId>
+        <permissionId>1-_conservation_*_workflow_undelete-CRUDL</permissionId>
+        <resourceName>/conservation/*/workflow/undelete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>6321</permRelationshipId>
+        <permissionId>1-_groups_*_workflow_delete-CRUDL</permissionId>
+        <resourceName>/groups/*/workflow/delete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>3020</permRelationshipId>
+        <permissionId>1-citations-CRUDL</permissionId>
+        <resourceName>citations</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>3022</permRelationshipId>
+        <permissionId>1-intakes-CRUDL</permissionId>
+        <resourceName>intakes</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>5952</permRelationshipId>
+        <permissionId>1-_orgauthorities_*_workflow_replicate-CRUDL</permissionId>
+        <resourceName>/orgauthorities/*/workflow/replicate</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>3031</permRelationshipId>
+        <permissionId>1-blobs-CRUDL</permissionId>
+        <resourceName>blobs</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>3039</permRelationshipId>
+        <permissionId>1-_dimensions_workflow_-CRUDL</permissionId>
+        <resourceName>/dimensions/workflow/</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>3017</permRelationshipId>
+        <permissionId>1-objectexit-CRUDL</permissionId>
+        <resourceName>objectexit</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>6312</permRelationshipId>
+        <permissionId>1-_groups_*_workflow_undelete-CRUDL</permissionId>
+        <resourceName>/groups/*/workflow/undelete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>3024</permRelationshipId>
+        <permissionId>1-groups-CRUDL</permissionId>
+        <resourceName>groups</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>5565</permRelationshipId>
+        <permissionId>1-_concepts_*_workflow_deprecate-CRUDL</permissionId>
+        <resourceName>/concepts/*/workflow/deprecate</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>3005</permRelationshipId>
+        <permissionId>1-loansout-CRUDL</permissionId>
+        <resourceName>loansout</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>6402</permRelationshipId>
+        <permissionId>1-_batch_*_workflow_undelete-CRUDL</permissionId>
+        <resourceName>/batch/*/workflow/undelete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>6375</permRelationshipId>
+        <permissionId>1-_publicitems_*_workflow_delete-CRUDL</permissionId>
+        <resourceName>/publicitems/*/workflow/delete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>3037</permRelationshipId>
+        <permissionId>1-relations-CRUDL</permissionId>
+        <resourceName>relations</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>5799</permRelationshipId>
+        <permissionId>1-_loansin_*_workflow_undelete-CRUDL</permissionId>
+        <resourceName>/loansin/*/workflow/undelete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>5871</permRelationshipId>
+        <permissionId>1-_organizations_*_workflow_deprecate-CRUDL</permissionId>
+        <resourceName>/organizations/*/workflow/deprecate</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>6447</permRelationshipId>
+        <permissionId>1-_relations_*_workflow_delete-CRUDL</permissionId>
+        <resourceName>/relations/*/workflow/delete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>6195</permRelationshipId>
+        <permissionId>1-_objectexit_*_workflow_delete-CRUDL</permissionId>
+        <resourceName>/objectexit/*/workflow/delete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>6204</permRelationshipId>
+        <permissionId>1-_works_*_workflow_undelete-CRUDL</permissionId>
+        <resourceName>/works/*/workflow/undelete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>3018</permRelationshipId>
+        <permissionId>1-works-CRUDL</permissionId>
+        <resourceName>works</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>5736</permRelationshipId>
+        <permissionId>1-_personauthorities_*_workflow_delete-CRUDL</permissionId>
+        <resourceName>/personauthorities/*/workflow/delete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>2997</permRelationshipId>
+        <permissionId>1-accounts-CRUDL</permissionId>
+        <resourceName>accounts</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>3007</permRelationshipId>
+        <permissionId>1-organizations-CRUDL</permissionId>
+        <resourceName>organizations</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>5898</permRelationshipId>
+        <permissionId>1-_organizations_*_workflow_replicate-CRUDL</permissionId>
+        <resourceName>/organizations/*/workflow/replicate</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>5763</permRelationshipId>
+        <permissionId>1-_locations_*_workflow_undelete-CRUDL</permissionId>
+        <resourceName>/locations/*/workflow/undelete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>3006</permRelationshipId>
+        <permissionId>1-acquisitions-CRUDL</permissionId>
+        <resourceName>acquisitions</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>5961</permRelationshipId>
+        <permissionId>1-_collectionobjects_*_workflow_undelete-CRUDL</permissionId>
+        <resourceName>/collectionobjects/*/workflow/undelete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>6465</permRelationshipId>
+        <permissionId>1-_dimensions_*_workflow_delete-CRUDL</permissionId>
+        <resourceName>/dimensions/*/workflow/delete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>3011</permRelationshipId>
+        <permissionId>1-conservation-CRUDL</permissionId>
+        <resourceName>conservation</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>5943</permRelationshipId>
+        <permissionId>1-_orgauthorities_*_workflow_unreplicate-CRUDL</permissionId>
+        <resourceName>/orgauthorities/*/workflow/unreplicate</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>5655</permRelationshipId>
+        <permissionId>1-_persons_*_workflow_undelete-CRUDL</permissionId>
+        <resourceName>/persons/*/workflow/undelete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>3033</permRelationshipId>
+        <permissionId>1-imports-CRUDL</permissionId>
+        <resourceName>imports</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>5916</permRelationshipId>
+        <permissionId>1-_orgauthorities_*_workflow_undeprecate-CRUDL</permissionId>
+        <resourceName>/orgauthorities/*/workflow/undeprecate</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>3009</permRelationshipId>
+        <permissionId>1-collectionobjects-CRUDL</permissionId>
+        <resourceName>collectionobjects</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>5646</permRelationshipId>
+        <permissionId>1-_conceptauthorities_*_workflow_replicate-CRUDL</permissionId>
+        <resourceName>/conceptauthorities/*/workflow/replicate</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>5745</permRelationshipId>
+        <permissionId>1-_personauthorities_*_workflow_unreplicate-CRUDL</permissionId>
+        <resourceName>/personauthorities/*/workflow/unreplicate</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>2998</permRelationshipId>
+        <permissionId>1-concepts-CRUDL</permissionId>
+        <resourceName>concepts</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>6114</permRelationshipId>
+        <permissionId>1-_vocabularyitems_*_workflow_unreplicate-CRUDL</permissionId>
+        <resourceName>/vocabularyitems/*/workflow/unreplicate</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>3008</permRelationshipId>
+        <permissionId>1-orgauthorities-CRUDL</permissionId>
+        <resourceName>orgauthorities</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>3013</permRelationshipId>
+        <permissionId>1-vocabularyitems-CRUDL</permissionId>
+        <resourceName>vocabularyitems</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>5583</permRelationshipId>
+        <permissionId>1-_concepts_*_workflow_unreplicate-CRUDL</permissionId>
+        <resourceName>/concepts/*/workflow/unreplicate</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>6411</permRelationshipId>
+        <permissionId>1-_batch_*_workflow_delete-CRUDL</permissionId>
+        <resourceName>/batch/*/workflow/delete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>5907</permRelationshipId>
+        <permissionId>1-_orgauthorities_*_workflow_undelete-CRUDL</permissionId>
+        <resourceName>/orgauthorities/*/workflow/undelete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>5925</permRelationshipId>
+        <permissionId>1-_orgauthorities_*_workflow_deprecate-CRUDL</permissionId>
+        <resourceName>/orgauthorities/*/workflow/deprecate</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>6051</permRelationshipId>
+        <permissionId>1-_movements_*_workflow_undelete-CRUDL</permissionId>
+        <resourceName>/movements/*/workflow/undelete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>3040</permRelationshipId>
+        <permissionId>1-contacts-CRUDL</permissionId>
+        <resourceName>contacts</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>6483</permRelationshipId>
+        <permissionId>1-_contacts_*_workflow_undelete-CRUDL</permissionId>
+        <resourceName>/contacts/*/workflow/undelete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>6258</permRelationshipId>
+        <permissionId>1-_citationauthorities_*_workflow_undelete-CRUDL</permissionId>
+        <resourceName>/citationauthorities/*/workflow/undelete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>3003</permRelationshipId>
+        <permissionId>1-locationauthorities-CRUDL</permissionId>
+        <resourceName>locationauthorities</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>6348</permRelationshipId>
+        <permissionId>1-_media_*_workflow_undelete-CRUDL</permissionId>
+        <resourceName>/media/*/workflow/undelete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>6240</permRelationshipId>
+        <permissionId>1-_citations_*_workflow_undelete-CRUDL</permissionId>
+        <resourceName>/citations/*/workflow/undelete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>3026</permRelationshipId>
+        <permissionId>1-media-CRUDL</permissionId>
+        <resourceName>media</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>3000</permRelationshipId>
+        <permissionId>1-persons-CRUDL</permissionId>
+        <resourceName>persons</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>5970</permRelationshipId>
+        <permissionId>1-_collectionobjects_*_workflow_delete-CRUDL</permissionId>
+        <resourceName>/collectionobjects/*/workflow/delete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>3029</permRelationshipId>
+        <permissionId>1-publicitems-CRUDL</permissionId>
+        <resourceName>publicitems</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>6042</permRelationshipId>
+        <permissionId>1-_conservation_*_workflow_delete-CRUDL</permissionId>
+        <resourceName>/conservation/*/workflow/delete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>6177</permRelationshipId>
+        <permissionId>1-_placeauthorities_*_workflow_delete-CRUDL</permissionId>
+        <resourceName>/placeauthorities/*/workflow/delete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>3002</permRelationshipId>
+        <permissionId>1-locations-CRUDL</permissionId>
+        <resourceName>locations</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>6303</permRelationshipId>
+        <permissionId>1-_conditionchecks_*_workflow_delete-CRUDL</permissionId>
+        <resourceName>/conditionchecks/*/workflow/delete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>5610</permRelationshipId>
+        <permissionId>1-_conceptauthorities_*_workflow_undeprecate-CRUDL</permissionId>
+        <resourceName>/conceptauthorities/*/workflow/undeprecate</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>5628</permRelationshipId>
+        <permissionId>1-_conceptauthorities_*_workflow_delete-CRUDL</permissionId>
+        <resourceName>/conceptauthorities/*/workflow/delete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>5709</permRelationshipId>
+        <permissionId>1-_personauthorities_*_workflow_undelete-CRUDL</permissionId>
+        <resourceName>/personauthorities/*/workflow/undelete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>3019</permRelationshipId>
+        <permissionId>1-workauthorities-CRUDL</permissionId>
+        <resourceName>workauthorities</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>5997</permRelationshipId>
+        <permissionId>1-_vocabularies_*_workflow_deprecate-CRUDL</permissionId>
+        <resourceName>/vocabularies/*/workflow/deprecate</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>6429</permRelationshipId>
+        <permissionId>1-_reports_*_workflow_delete-CRUDL</permissionId>
+        <resourceName>/reports/*/workflow/delete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>6456</permRelationshipId>
+        <permissionId>1-_dimensions_*_workflow_undelete-CRUDL</permissionId>
+        <resourceName>/dimensions/*/workflow/undelete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>5844</permRelationshipId>
+        <permissionId>1-_acquisitions_*_workflow_delete-CRUDL</permissionId>
+        <resourceName>/acquisitions/*/workflow/delete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>5718</permRelationshipId>
+        <permissionId>1-_personauthorities_*_workflow_undeprecate-CRUDL</permissionId>
+        <resourceName>/personauthorities/*/workflow/undeprecate</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>6132</permRelationshipId>
+        <permissionId>1-_exhibitions_*_workflow_undelete-CRUDL</permissionId>
+        <resourceName>/exhibitions/*/workflow/undelete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>6393</permRelationshipId>
+        <permissionId>1-_blobs_*_workflow_delete-CRUDL</permissionId>
+        <resourceName>/blobs/*/workflow/delete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>6285</permRelationshipId>
+        <permissionId>1-_intakes_*_workflow_delete-CRUDL</permissionId>
+        <resourceName>/intakes/*/workflow/delete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>3023</permRelationshipId>
+        <permissionId>1-conditionchecks-CRUDL</permissionId>
+        <resourceName>conditionchecks</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>5862</permRelationshipId>
+        <permissionId>1-_organizations_*_workflow_undeprecate-CRUDL</permissionId>
+        <resourceName>/organizations/*/workflow/undeprecate</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+    <permission>
+        <permRelationshipId>6294</permRelationshipId>
+        <permissionId>1-_conditionchecks_*_workflow_undelete-CRUDL</permissionId>
+        <resourceName>/conditionchecks/*/workflow/undelete</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+    </permission>
+</ns2:account_permission>
diff --git a/services/common/src/test/resources/test-data/xmljson/collectionobject-list.json b/services/common/src/test/resources/test-data/xmljson/collectionobject-list.json
new file mode 100644 (file)
index 0000000..6a646b6
--- /dev/null
@@ -0,0 +1,348 @@
+{
+  "ns2:abstract-common-list": {
+    "@xmlns:ns2": "http://collectionspace.org/services/jaxb",
+    "pageNum": "0",
+    "pageSize": "40",
+    "itemsInPage": "40",
+    "totalItems": "41",
+    "fieldsReturned": "csid|uri|refName|updatedAt|workflowState|title|objectNumber|objectName|responsibleDepartment",
+    "list-item": [
+      {
+        "csid": "2ece74b2-2053-458c-a252",
+        "uri": "/collectionobjects/2ece74b2-2053-458c-a252",
+        "refName": "urn:cspace:core.collectionspace.org:collectionobjects:id(2ece74b2-2053-458c-a252)'2'",
+        "updatedAt": "2016-07-27T04:31:38.648Z",
+        "workflowState": "deleted",
+        "objectNumber": "2",
+        "objectName": "new OBJNAME",
+        "responsibleDepartment": "new DEPT"
+      },
+      {
+        "csid": "b6bc8b80-0a1a-4279-8d4d",
+        "uri": "/collectionobjects/b6bc8b80-0a1a-4279-8d4d",
+        "refName": "urn:cspace:core.collectionspace.org:collectionobjects:id(b6bc8b80-0a1a-4279-8d4d)'2'",
+        "updatedAt": "2016-07-27T04:31:38.222Z",
+        "workflowState": "deleted",
+        "objectNumber": "2",
+        "objectName": "new OBJNAME",
+        "responsibleDepartment": "new DEPT"
+      },
+      {
+        "csid": "af661f9f-6f9d-425e-b3d9",
+        "uri": "/collectionobjects/af661f9f-6f9d-425e-b3d9",
+        "refName": "urn:cspace:core.collectionspace.org:collectionobjects:id(af661f9f-6f9d-425e-b3d9)'1'",
+        "updatedAt": "2016-07-27T04:30:43.568Z",
+        "workflowState": "deleted",
+        "objectNumber": "1"
+      },
+      {
+        "csid": "75539775-b5db-4690-9d01",
+        "uri": "/collectionobjects/75539775-b5db-4690-9d01",
+        "refName": "urn:cspace:core.collectionspace.org:collectionobjects:id(75539775-b5db-4690-9d01)'1'",
+        "updatedAt": "2016-07-27T04:30:41.491Z",
+        "workflowState": "deleted",
+        "objectNumber": "1"
+      },
+      {
+        "csid": "2d15f7ed-5aff-4222-9d07",
+        "uri": "/collectionobjects/2d15f7ed-5aff-4222-9d07",
+        "refName": "urn:cspace:core.collectionspace.org:collectionobjects:id(2d15f7ed-5aff-4222-9d07)'1'",
+        "updatedAt": "2016-07-27T04:30:39.256Z",
+        "workflowState": "deleted",
+        "objectNumber": "1"
+      },
+      {
+        "csid": "4cfc4992-f25b-44f2-a083",
+        "uri": "/collectionobjects/4cfc4992-f25b-44f2-a083",
+        "refName": "urn:cspace:core.collectionspace.org:collectionobjects:id(4cfc4992-f25b-44f2-a083)'1'",
+        "updatedAt": "2016-07-27T04:30:37.419Z",
+        "workflowState": "deleted",
+        "objectNumber": "1"
+      },
+      {
+        "csid": "156d2b43-474d-4780-bd47",
+        "uri": "/collectionobjects/156d2b43-474d-4780-bd47",
+        "refName": "urn:cspace:core.collectionspace.org:collectionobjects:id(156d2b43-474d-4780-bd47)'1'",
+        "updatedAt": "2016-07-27T04:30:31.616Z",
+        "workflowState": "deleted",
+        "objectNumber": "1"
+      },
+      {
+        "csid": "917c4ef9-3c3f-4d14-af70",
+        "uri": "/collectionobjects/917c4ef9-3c3f-4d14-af70",
+        "refName": "urn:cspace:core.collectionspace.org:collectionobjects:id(917c4ef9-3c3f-4d14-af70)'1'",
+        "updatedAt": "2016-07-27T04:30:31.584Z",
+        "workflowState": "deleted",
+        "objectNumber": "1"
+      },
+      {
+        "csid": "87c905d5-5501-430f-b5f4",
+        "uri": "/collectionobjects/87c905d5-5501-430f-b5f4",
+        "refName": "urn:cspace:core.collectionspace.org:collectionobjects:id(87c905d5-5501-430f-b5f4)'1'",
+        "updatedAt": "2016-07-27T04:30:31.554Z",
+        "workflowState": "deleted",
+        "objectNumber": "1"
+      },
+      {
+        "csid": "1a31a1c0-9d88-4cd4-aead",
+        "uri": "/collectionobjects/1a31a1c0-9d88-4cd4-aead",
+        "refName": "urn:cspace:core.collectionspace.org:collectionobjects:id(1a31a1c0-9d88-4cd4-aead)'1'",
+        "updatedAt": "2016-07-27T04:30:28.838Z",
+        "workflowState": "deleted",
+        "objectNumber": "1"
+      },
+      {
+        "csid": "bc5975b2-1bc2-4b56-b761",
+        "uri": "/collectionobjects/bc5975b2-1bc2-4b56-b761",
+        "refName": "urn:cspace:core.collectionspace.org:collectionobjects:id(bc5975b2-1bc2-4b56-b761)'1'",
+        "updatedAt": "2016-07-27T04:30:28.812Z",
+        "workflowState": "deleted",
+        "objectNumber": "1"
+      },
+      {
+        "csid": "839e172c-d790-44a8-896a",
+        "uri": "/collectionobjects/839e172c-d790-44a8-896a",
+        "refName": "urn:cspace:core.collectionspace.org:collectionobjects:id(839e172c-d790-44a8-896a)'1'",
+        "updatedAt": "2016-07-27T04:30:28.773Z",
+        "workflowState": "deleted",
+        "objectNumber": "1"
+      },
+      {
+        "csid": "3869b0ee-9276-428d-954f",
+        "uri": "/collectionobjects/3869b0ee-9276-428d-954f",
+        "refName": "urn:cspace:core.collectionspace.org:collectionobjects:id(3869b0ee-9276-428d-954f)'1'",
+        "updatedAt": "2016-07-27T04:30:26.837Z",
+        "workflowState": "deleted",
+        "objectNumber": "1"
+      },
+      {
+        "csid": "86360825-a2ee-4d7e-b51d",
+        "uri": "/collectionobjects/86360825-a2ee-4d7e-b51d",
+        "refName": "urn:cspace:core.collectionspace.org:collectionobjects:id(86360825-a2ee-4d7e-b51d)'1'",
+        "updatedAt": "2016-07-27T04:30:26.812Z",
+        "workflowState": "deleted",
+        "objectNumber": "1"
+      },
+      {
+        "csid": "f346e6ee-bae9-4700-9e96",
+        "uri": "/collectionobjects/f346e6ee-bae9-4700-9e96",
+        "refName": "urn:cspace:core.collectionspace.org:collectionobjects:id(f346e6ee-bae9-4700-9e96)'1'",
+        "updatedAt": "2016-07-27T04:30:26.786Z",
+        "workflowState": "deleted",
+        "objectNumber": "1"
+      },
+      {
+        "csid": "f3782e3e-af7b-4f29-89a6",
+        "uri": "/collectionobjects/f3782e3e-af7b-4f29-89a6",
+        "refName": "urn:cspace:core.collectionspace.org:collectionobjects:id(f3782e3e-af7b-4f29-89a6)'1'",
+        "updatedAt": "2016-07-27T04:30:24.335Z",
+        "workflowState": "deleted",
+        "objectNumber": "1"
+      },
+      {
+        "csid": "ae25c04a-f044-45cd-96ff",
+        "uri": "/collectionobjects/ae25c04a-f044-45cd-96ff",
+        "refName": "urn:cspace:core.collectionspace.org:collectionobjects:id(ae25c04a-f044-45cd-96ff)'1'",
+        "updatedAt": "2016-07-27T04:30:24.310Z",
+        "workflowState": "deleted",
+        "objectNumber": "1"
+      },
+      {
+        "csid": "873b5a5b-6753-4eea-b0c3",
+        "uri": "/collectionobjects/873b5a5b-6753-4eea-b0c3",
+        "refName": "urn:cspace:core.collectionspace.org:collectionobjects:id(873b5a5b-6753-4eea-b0c3)'1'",
+        "updatedAt": "2016-07-27T04:30:24.285Z",
+        "workflowState": "deleted",
+        "objectNumber": "1"
+      },
+      {
+        "csid": "dacd5398-708a-4580-a994",
+        "uri": "/collectionobjects/dacd5398-708a-4580-a994",
+        "refName": "urn:cspace:core.collectionspace.org:collectionobjects:id(dacd5398-708a-4580-a994)'TestObject'",
+        "updatedAt": "2016-07-27T04:30:21.092Z",
+        "workflowState": "deleted",
+        "objectNumber": "TestObject"
+      },
+      {
+        "csid": "0a07c7a2-5fd6-43e7-ac64",
+        "uri": "/collectionobjects/0a07c7a2-5fd6-43e7-ac64",
+        "refName": "urn:cspace:core.collectionspace.org:collectionobjects:id(0a07c7a2-5fd6-43e7-ac64)'TestObject'",
+        "updatedAt": "2016-07-27T04:30:19.971Z",
+        "workflowState": "deleted",
+        "objectNumber": "TestObject"
+      },
+      {
+        "csid": "49b577d7-44c7-49a8-8790",
+        "uri": "/collectionobjects/49b577d7-44c7-49a8-8790",
+        "refName": "urn:cspace:core.collectionspace.org:collectionobjects:id(49b577d7-44c7-49a8-8790)'1'",
+        "updatedAt": "2016-07-27T04:30:18.964Z",
+        "workflowState": "deleted",
+        "objectNumber": "1"
+      },
+      {
+        "csid": "73af460b-7f51-40ad-8b84",
+        "uri": "/collectionobjects/73af460b-7f51-40ad-8b84",
+        "refName": "urn:cspace:core.collectionspace.org:collectionobjects:id(73af460b-7f51-40ad-8b84)'1'",
+        "updatedAt": "2016-07-27T04:30:18.935Z",
+        "workflowState": "deleted",
+        "objectNumber": "1"
+      },
+      {
+        "csid": "47d3251d-9019-4e46-be94",
+        "uri": "/collectionobjects/47d3251d-9019-4e46-be94",
+        "refName": "urn:cspace:core.collectionspace.org:collectionobjects:id(47d3251d-9019-4e46-be94)'1'",
+        "updatedAt": "2016-07-27T04:30:18.908Z",
+        "workflowState": "deleted",
+        "objectNumber": "1"
+      },
+      {
+        "csid": "0f21a77d-181e-4282-aac0",
+        "uri": "/collectionobjects/0f21a77d-181e-4282-aac0",
+        "refName": "urn:cspace:core.collectionspace.org:collectionobjects:id(0f21a77d-181e-4282-aac0)'4'",
+        "updatedAt": "2016-07-27T04:30:12.914Z",
+        "workflowState": "deleted",
+        "objectNumber": "4"
+      },
+      {
+        "csid": "6d5ed5d9-7d50-4378-89c0",
+        "uri": "/collectionobjects/6d5ed5d9-7d50-4378-89c0",
+        "refName": "urn:cspace:core.collectionspace.org:collectionobjects:id(6d5ed5d9-7d50-4378-89c0)'4'",
+        "updatedAt": "2016-07-27T04:30:11.336Z",
+        "workflowState": "project",
+        "objectNumber": "4"
+      },
+      {
+        "csid": "e19171dc-a9e5-40bc-927d",
+        "uri": "/collectionobjects/e19171dc-a9e5-40bc-927d",
+        "refName": "urn:cspace:core.collectionspace.org:collectionobjects:id(e19171dc-a9e5-40bc-927d)'3'",
+        "updatedAt": "2016-07-27T04:30:09.367Z",
+        "workflowState": "project",
+        "objectNumber": "3"
+      },
+      {
+        "csid": "710d2c75-a9dc-45f6-9cc1",
+        "uri": "/collectionobjects/710d2c75-a9dc-45f6-9cc1",
+        "refName": "urn:cspace:core.collectionspace.org:collectionobjects:id(710d2c75-a9dc-45f6-9cc1)'objectNumber2'",
+        "updatedAt": "2016-07-27T04:30:07.914Z",
+        "workflowState": "deleted",
+        "objectNumber": "objectNumber2"
+      },
+      {
+        "csid": "fc70b360-cfdd-4131-90e1",
+        "uri": "/collectionobjects/fc70b360-cfdd-4131-90e1",
+        "refName": "urn:cspace:core.collectionspace.org:collectionobjects:id(fc70b360-cfdd-4131-90e1)'1'",
+        "updatedAt": "2016-07-27T04:30:05.995Z",
+        "workflowState": "deleted",
+        "objectNumber": "1"
+      },
+      {
+        "csid": "c789c0c1-b1b5-4192-b70b",
+        "uri": "/collectionobjects/c789c0c1-b1b5-4192-b70b",
+        "refName": "urn:cspace:core.collectionspace.org:collectionobjects:id(c789c0c1-b1b5-4192-b70b)'objectNumber'",
+        "updatedAt": "2016-07-27T04:30:05.967Z",
+        "workflowState": "deleted",
+        "title": "aardvark title",
+        "objectNumber": "objectNumber"
+      },
+      {
+        "csid": "d57a545e-fc03-4d76-8206",
+        "uri": "/collectionobjects/d57a545e-fc03-4d76-8206",
+        "refName": "urn:cspace:core.collectionspace.org:collectionobjects:id(d57a545e-fc03-4d76-8206)'1'",
+        "updatedAt": "2016-07-27T04:30:04.915Z",
+        "workflowState": "deleted",
+        "objectNumber": "1"
+      },
+      {
+        "csid": "1ee68c99-d76d-4192-b229",
+        "uri": "/collectionobjects/1ee68c99-d76d-4192-b229",
+        "refName": "urn:cspace:core.collectionspace.org:collectionobjects:id(1ee68c99-d76d-4192-b229)'1'",
+        "updatedAt": "2016-07-27T04:30:04.884Z",
+        "workflowState": "deleted",
+        "objectNumber": "1"
+      },
+      {
+        "csid": "b9ab1401-3a7c-48e9-a611",
+        "uri": "/collectionobjects/b9ab1401-3a7c-48e9-a611",
+        "refName": "urn:cspace:core.collectionspace.org:collectionobjects:id(b9ab1401-3a7c-48e9-a611)'2010.1.9'",
+        "updatedAt": "2016-07-27T04:29:32.099Z",
+        "workflowState": "deleted",
+        "title": "Der Ring des Nibelungen",
+        "objectNumber": "2010.1.9",
+        "objectName": "objectName",
+        "responsibleDepartment": "ethnography1"
+      },
+      {
+        "csid": "a3068a72-6451-44e1-ada4",
+        "uri": "/collectionobjects/a3068a72-6451-44e1-ada4",
+        "refName": "urn:cspace:core.collectionspace.org:collectionobjects:id(a3068a72-6451-44e1-ada4)'2010.1.9'",
+        "updatedAt": "2016-07-27T04:29:11.224Z",
+        "workflowState": "deleted",
+        "objectNumber": "2010.1.9",
+        "responsibleDepartment": "ethnography1 a"
+      },
+      {
+        "csid": "46b9c971-59d6-4d81-8dd6",
+        "uri": "/collectionobjects/46b9c971-59d6-4d81-8dd6",
+        "refName": "urn:cspace:core.collectionspace.org:collectionobjects:id(46b9c971-59d6-4d81-8dd6)'2010.1.9'",
+        "updatedAt": "2016-07-27T04:29:11.195Z",
+        "workflowState": "deleted",
+        "objectNumber": "2010.1.9",
+        "responsibleDepartment": "ethnography1 a"
+      },
+      {
+        "csid": "0625dfcc-919e-4e1e-ab45",
+        "uri": "/collectionobjects/0625dfcc-919e-4e1e-ab45",
+        "refName": "urn:cspace:core.collectionspace.org:collectionobjects:id(0625dfcc-919e-4e1e-ab45)'2010.1.9'",
+        "updatedAt": "2016-07-27T04:29:11.165Z",
+        "workflowState": "deleted",
+        "title": "title",
+        "objectNumber": "2010.1.9",
+        "responsibleDepartment": "ethnography1"
+      },
+      {
+        "csid": "4c2104d1-e0c4-436e-847d",
+        "uri": "/collectionobjects/4c2104d1-e0c4-436e-847d",
+        "refName": "urn:cspace:core.collectionspace.org:collectionobjects:id(4c2104d1-e0c4-436e-847d)'objectNumber'",
+        "updatedAt": "2016-07-27T04:28:51.149Z",
+        "workflowState": "deleted",
+        "title": "aardvark title",
+        "objectNumber": "objectNumber"
+      },
+      {
+        "csid": "0a6e07d7-a264-4dec-8fbf",
+        "uri": "/collectionobjects/0a6e07d7-a264-4dec-8fbf",
+        "refName": "urn:cspace:core.collectionspace.org:collectionobjects:id(0a6e07d7-a264-4dec-8fbf)'2010.1.9'",
+        "updatedAt": "2016-07-27T04:28:51.130Z",
+        "workflowState": "deleted",
+        "title": "title",
+        "objectNumber": "2010.1.9",
+        "responsibleDepartment": "ethnography1"
+      },
+      {
+        "csid": "92a05139-73f3-402c-97b8",
+        "uri": "/collectionobjects/92a05139-73f3-402c-97b8",
+        "refName": "urn:cspace:core.collectionspace.org:collectionobjects:id(92a05139-73f3-402c-97b8)'32'",
+        "updatedAt": "2016-07-27T04:28:33.836Z",
+        "workflowState": "project",
+        "objectNumber": "32",
+        "objectName": "Left-handed screwdriver"
+      },
+      {
+        "csid": "53c451b7-b60c-45ac-818c",
+        "uri": "/collectionobjects/53c451b7-b60c-45ac-818c",
+        "refName": "urn:cspace:core.collectionspace.org:collectionobjects:id(53c451b7-b60c-45ac-818c)'1'",
+        "updatedAt": "2016-07-27T04:27:15.302Z",
+        "workflowState": "deleted",
+        "objectNumber": "1"
+      },
+      {
+        "csid": "297614ff-6c95-4445-a938",
+        "uri": "/collectionobjects/297614ff-6c95-4445-a938",
+        "refName": "urn:cspace:core.collectionspace.org:collectionobjects:id(297614ff-6c95-4445-a938)'1'",
+        "updatedAt": "2016-07-27T04:27:15.281Z",
+        "workflowState": "deleted",
+        "objectNumber": "1"
+      }
+    ]
+  }
+}
\ No newline at end of file
diff --git a/services/common/src/test/resources/test-data/xmljson/collectionobject-list.xml b/services/common/src/test/resources/test-data/xmljson/collectionobject-list.xml
new file mode 100644 (file)
index 0000000..df889b4
--- /dev/null
@@ -0,0 +1,343 @@
+<ns2:abstract-common-list xmlns:ns2="http://collectionspace.org/services/jaxb">
+    <pageNum>0</pageNum>
+    <pageSize>40</pageSize>
+    <itemsInPage>40</itemsInPage>
+    <totalItems>41</totalItems>
+    <fieldsReturned>csid|uri|refName|updatedAt|workflowState|title|objectNumber|objectName|responsibleDepartment</fieldsReturned>
+    <list-item>
+        <csid>2ece74b2-2053-458c-a252</csid>
+        <uri>/collectionobjects/2ece74b2-2053-458c-a252</uri>
+        <refName>urn:cspace:core.collectionspace.org:collectionobjects:id(2ece74b2-2053-458c-a252)'2'</refName>
+        <updatedAt>2016-07-27T04:31:38.648Z</updatedAt>
+        <workflowState>deleted</workflowState>
+        <objectNumber>2</objectNumber>
+        <objectName>new OBJNAME</objectName>
+        <responsibleDepartment>new DEPT</responsibleDepartment>
+    </list-item>
+    <list-item>
+        <csid>b6bc8b80-0a1a-4279-8d4d</csid>
+        <uri>/collectionobjects/b6bc8b80-0a1a-4279-8d4d</uri>
+        <refName>urn:cspace:core.collectionspace.org:collectionobjects:id(b6bc8b80-0a1a-4279-8d4d)'2'</refName>
+        <updatedAt>2016-07-27T04:31:38.222Z</updatedAt>
+        <workflowState>deleted</workflowState>
+        <objectNumber>2</objectNumber>
+        <objectName>new OBJNAME</objectName>
+        <responsibleDepartment>new DEPT</responsibleDepartment>
+    </list-item>
+    <list-item>
+        <csid>af661f9f-6f9d-425e-b3d9</csid>
+        <uri>/collectionobjects/af661f9f-6f9d-425e-b3d9</uri>
+        <refName>urn:cspace:core.collectionspace.org:collectionobjects:id(af661f9f-6f9d-425e-b3d9)'1'</refName>
+        <updatedAt>2016-07-27T04:30:43.568Z</updatedAt>
+        <workflowState>deleted</workflowState>
+        <objectNumber>1</objectNumber>
+    </list-item>
+    <list-item>
+        <csid>75539775-b5db-4690-9d01</csid>
+        <uri>/collectionobjects/75539775-b5db-4690-9d01</uri>
+        <refName>urn:cspace:core.collectionspace.org:collectionobjects:id(75539775-b5db-4690-9d01)'1'</refName>
+        <updatedAt>2016-07-27T04:30:41.491Z</updatedAt>
+        <workflowState>deleted</workflowState>
+        <objectNumber>1</objectNumber>
+    </list-item>
+    <list-item>
+        <csid>2d15f7ed-5aff-4222-9d07</csid>
+        <uri>/collectionobjects/2d15f7ed-5aff-4222-9d07</uri>
+        <refName>urn:cspace:core.collectionspace.org:collectionobjects:id(2d15f7ed-5aff-4222-9d07)'1'</refName>
+        <updatedAt>2016-07-27T04:30:39.256Z</updatedAt>
+        <workflowState>deleted</workflowState>
+        <objectNumber>1</objectNumber>
+    </list-item>
+    <list-item>
+        <csid>4cfc4992-f25b-44f2-a083</csid>
+        <uri>/collectionobjects/4cfc4992-f25b-44f2-a083</uri>
+        <refName>urn:cspace:core.collectionspace.org:collectionobjects:id(4cfc4992-f25b-44f2-a083)'1'</refName>
+        <updatedAt>2016-07-27T04:30:37.419Z</updatedAt>
+        <workflowState>deleted</workflowState>
+        <objectNumber>1</objectNumber>
+    </list-item>
+    <list-item>
+        <csid>156d2b43-474d-4780-bd47</csid>
+        <uri>/collectionobjects/156d2b43-474d-4780-bd47</uri>
+        <refName>urn:cspace:core.collectionspace.org:collectionobjects:id(156d2b43-474d-4780-bd47)'1'</refName>
+        <updatedAt>2016-07-27T04:30:31.616Z</updatedAt>
+        <workflowState>deleted</workflowState>
+        <objectNumber>1</objectNumber>
+    </list-item>
+    <list-item>
+        <csid>917c4ef9-3c3f-4d14-af70</csid>
+        <uri>/collectionobjects/917c4ef9-3c3f-4d14-af70</uri>
+        <refName>urn:cspace:core.collectionspace.org:collectionobjects:id(917c4ef9-3c3f-4d14-af70)'1'</refName>
+        <updatedAt>2016-07-27T04:30:31.584Z</updatedAt>
+        <workflowState>deleted</workflowState>
+        <objectNumber>1</objectNumber>
+    </list-item>
+    <list-item>
+        <csid>87c905d5-5501-430f-b5f4</csid>
+        <uri>/collectionobjects/87c905d5-5501-430f-b5f4</uri>
+        <refName>urn:cspace:core.collectionspace.org:collectionobjects:id(87c905d5-5501-430f-b5f4)'1'</refName>
+        <updatedAt>2016-07-27T04:30:31.554Z</updatedAt>
+        <workflowState>deleted</workflowState>
+        <objectNumber>1</objectNumber>
+    </list-item>
+    <list-item>
+        <csid>1a31a1c0-9d88-4cd4-aead</csid>
+        <uri>/collectionobjects/1a31a1c0-9d88-4cd4-aead</uri>
+        <refName>urn:cspace:core.collectionspace.org:collectionobjects:id(1a31a1c0-9d88-4cd4-aead)'1'</refName>
+        <updatedAt>2016-07-27T04:30:28.838Z</updatedAt>
+        <workflowState>deleted</workflowState>
+        <objectNumber>1</objectNumber>
+    </list-item>
+    <list-item>
+        <csid>bc5975b2-1bc2-4b56-b761</csid>
+        <uri>/collectionobjects/bc5975b2-1bc2-4b56-b761</uri>
+        <refName>urn:cspace:core.collectionspace.org:collectionobjects:id(bc5975b2-1bc2-4b56-b761)'1'</refName>
+        <updatedAt>2016-07-27T04:30:28.812Z</updatedAt>
+        <workflowState>deleted</workflowState>
+        <objectNumber>1</objectNumber>
+    </list-item>
+    <list-item>
+        <csid>839e172c-d790-44a8-896a</csid>
+        <uri>/collectionobjects/839e172c-d790-44a8-896a</uri>
+        <refName>urn:cspace:core.collectionspace.org:collectionobjects:id(839e172c-d790-44a8-896a)'1'</refName>
+        <updatedAt>2016-07-27T04:30:28.773Z</updatedAt>
+        <workflowState>deleted</workflowState>
+        <objectNumber>1</objectNumber>
+    </list-item>
+    <list-item>
+        <csid>3869b0ee-9276-428d-954f</csid>
+        <uri>/collectionobjects/3869b0ee-9276-428d-954f</uri>
+        <refName>urn:cspace:core.collectionspace.org:collectionobjects:id(3869b0ee-9276-428d-954f)'1'</refName>
+        <updatedAt>2016-07-27T04:30:26.837Z</updatedAt>
+        <workflowState>deleted</workflowState>
+        <objectNumber>1</objectNumber>
+    </list-item>
+    <list-item>
+        <csid>86360825-a2ee-4d7e-b51d</csid>
+        <uri>/collectionobjects/86360825-a2ee-4d7e-b51d</uri>
+        <refName>urn:cspace:core.collectionspace.org:collectionobjects:id(86360825-a2ee-4d7e-b51d)'1'</refName>
+        <updatedAt>2016-07-27T04:30:26.812Z</updatedAt>
+        <workflowState>deleted</workflowState>
+        <objectNumber>1</objectNumber>
+    </list-item>
+    <list-item>
+        <csid>f346e6ee-bae9-4700-9e96</csid>
+        <uri>/collectionobjects/f346e6ee-bae9-4700-9e96</uri>
+        <refName>urn:cspace:core.collectionspace.org:collectionobjects:id(f346e6ee-bae9-4700-9e96)'1'</refName>
+        <updatedAt>2016-07-27T04:30:26.786Z</updatedAt>
+        <workflowState>deleted</workflowState>
+        <objectNumber>1</objectNumber>
+    </list-item>
+    <list-item>
+        <csid>f3782e3e-af7b-4f29-89a6</csid>
+        <uri>/collectionobjects/f3782e3e-af7b-4f29-89a6</uri>
+        <refName>urn:cspace:core.collectionspace.org:collectionobjects:id(f3782e3e-af7b-4f29-89a6)'1'</refName>
+        <updatedAt>2016-07-27T04:30:24.335Z</updatedAt>
+        <workflowState>deleted</workflowState>
+        <objectNumber>1</objectNumber>
+    </list-item>
+    <list-item>
+        <csid>ae25c04a-f044-45cd-96ff</csid>
+        <uri>/collectionobjects/ae25c04a-f044-45cd-96ff</uri>
+        <refName>urn:cspace:core.collectionspace.org:collectionobjects:id(ae25c04a-f044-45cd-96ff)'1'</refName>
+        <updatedAt>2016-07-27T04:30:24.310Z</updatedAt>
+        <workflowState>deleted</workflowState>
+        <objectNumber>1</objectNumber>
+    </list-item>
+    <list-item>
+        <csid>873b5a5b-6753-4eea-b0c3</csid>
+        <uri>/collectionobjects/873b5a5b-6753-4eea-b0c3</uri>
+        <refName>urn:cspace:core.collectionspace.org:collectionobjects:id(873b5a5b-6753-4eea-b0c3)'1'</refName>
+        <updatedAt>2016-07-27T04:30:24.285Z</updatedAt>
+        <workflowState>deleted</workflowState>
+        <objectNumber>1</objectNumber>
+    </list-item>
+    <list-item>
+        <csid>dacd5398-708a-4580-a994</csid>
+        <uri>/collectionobjects/dacd5398-708a-4580-a994</uri>
+        <refName>urn:cspace:core.collectionspace.org:collectionobjects:id(dacd5398-708a-4580-a994)'TestObject'</refName>
+        <updatedAt>2016-07-27T04:30:21.092Z</updatedAt>
+        <workflowState>deleted</workflowState>
+        <objectNumber>TestObject</objectNumber>
+    </list-item>
+    <list-item>
+        <csid>0a07c7a2-5fd6-43e7-ac64</csid>
+        <uri>/collectionobjects/0a07c7a2-5fd6-43e7-ac64</uri>
+        <refName>urn:cspace:core.collectionspace.org:collectionobjects:id(0a07c7a2-5fd6-43e7-ac64)'TestObject'</refName>
+        <updatedAt>2016-07-27T04:30:19.971Z</updatedAt>
+        <workflowState>deleted</workflowState>
+        <objectNumber>TestObject</objectNumber>
+    </list-item>
+    <list-item>
+        <csid>49b577d7-44c7-49a8-8790</csid>
+        <uri>/collectionobjects/49b577d7-44c7-49a8-8790</uri>
+        <refName>urn:cspace:core.collectionspace.org:collectionobjects:id(49b577d7-44c7-49a8-8790)'1'</refName>
+        <updatedAt>2016-07-27T04:30:18.964Z</updatedAt>
+        <workflowState>deleted</workflowState>
+        <objectNumber>1</objectNumber>
+    </list-item>
+    <list-item>
+        <csid>73af460b-7f51-40ad-8b84</csid>
+        <uri>/collectionobjects/73af460b-7f51-40ad-8b84</uri>
+        <refName>urn:cspace:core.collectionspace.org:collectionobjects:id(73af460b-7f51-40ad-8b84)'1'</refName>
+        <updatedAt>2016-07-27T04:30:18.935Z</updatedAt>
+        <workflowState>deleted</workflowState>
+        <objectNumber>1</objectNumber>
+    </list-item>
+    <list-item>
+        <csid>47d3251d-9019-4e46-be94</csid>
+        <uri>/collectionobjects/47d3251d-9019-4e46-be94</uri>
+        <refName>urn:cspace:core.collectionspace.org:collectionobjects:id(47d3251d-9019-4e46-be94)'1'</refName>
+        <updatedAt>2016-07-27T04:30:18.908Z</updatedAt>
+        <workflowState>deleted</workflowState>
+        <objectNumber>1</objectNumber>
+    </list-item>
+    <list-item>
+        <csid>0f21a77d-181e-4282-aac0</csid>
+        <uri>/collectionobjects/0f21a77d-181e-4282-aac0</uri>
+        <refName>urn:cspace:core.collectionspace.org:collectionobjects:id(0f21a77d-181e-4282-aac0)'4'</refName>
+        <updatedAt>2016-07-27T04:30:12.914Z</updatedAt>
+        <workflowState>deleted</workflowState>
+        <objectNumber>4</objectNumber>
+    </list-item>
+    <list-item>
+        <csid>6d5ed5d9-7d50-4378-89c0</csid>
+        <uri>/collectionobjects/6d5ed5d9-7d50-4378-89c0</uri>
+        <refName>urn:cspace:core.collectionspace.org:collectionobjects:id(6d5ed5d9-7d50-4378-89c0)'4'</refName>
+        <updatedAt>2016-07-27T04:30:11.336Z</updatedAt>
+        <workflowState>project</workflowState>
+        <objectNumber>4</objectNumber>
+    </list-item>
+    <list-item>
+        <csid>e19171dc-a9e5-40bc-927d</csid>
+        <uri>/collectionobjects/e19171dc-a9e5-40bc-927d</uri>
+        <refName>urn:cspace:core.collectionspace.org:collectionobjects:id(e19171dc-a9e5-40bc-927d)'3'</refName>
+        <updatedAt>2016-07-27T04:30:09.367Z</updatedAt>
+        <workflowState>project</workflowState>
+        <objectNumber>3</objectNumber>
+    </list-item>
+    <list-item>
+        <csid>710d2c75-a9dc-45f6-9cc1</csid>
+        <uri>/collectionobjects/710d2c75-a9dc-45f6-9cc1</uri>
+        <refName>urn:cspace:core.collectionspace.org:collectionobjects:id(710d2c75-a9dc-45f6-9cc1)'objectNumber2'</refName>
+        <updatedAt>2016-07-27T04:30:07.914Z</updatedAt>
+        <workflowState>deleted</workflowState>
+        <objectNumber>objectNumber2</objectNumber>
+    </list-item>
+    <list-item>
+        <csid>fc70b360-cfdd-4131-90e1</csid>
+        <uri>/collectionobjects/fc70b360-cfdd-4131-90e1</uri>
+        <refName>urn:cspace:core.collectionspace.org:collectionobjects:id(fc70b360-cfdd-4131-90e1)'1'</refName>
+        <updatedAt>2016-07-27T04:30:05.995Z</updatedAt>
+        <workflowState>deleted</workflowState>
+        <objectNumber>1</objectNumber>
+    </list-item>
+    <list-item>
+        <csid>c789c0c1-b1b5-4192-b70b</csid>
+        <uri>/collectionobjects/c789c0c1-b1b5-4192-b70b</uri>
+        <refName>urn:cspace:core.collectionspace.org:collectionobjects:id(c789c0c1-b1b5-4192-b70b)'objectNumber'</refName>
+        <updatedAt>2016-07-27T04:30:05.967Z</updatedAt>
+        <workflowState>deleted</workflowState>
+        <title>aardvark title</title>
+        <objectNumber>objectNumber</objectNumber>
+    </list-item>
+    <list-item>
+        <csid>d57a545e-fc03-4d76-8206</csid>
+        <uri>/collectionobjects/d57a545e-fc03-4d76-8206</uri>
+        <refName>urn:cspace:core.collectionspace.org:collectionobjects:id(d57a545e-fc03-4d76-8206)'1'</refName>
+        <updatedAt>2016-07-27T04:30:04.915Z</updatedAt>
+        <workflowState>deleted</workflowState>
+        <objectNumber>1</objectNumber>
+    </list-item>
+    <list-item>
+        <csid>1ee68c99-d76d-4192-b229</csid>
+        <uri>/collectionobjects/1ee68c99-d76d-4192-b229</uri>
+        <refName>urn:cspace:core.collectionspace.org:collectionobjects:id(1ee68c99-d76d-4192-b229)'1'</refName>
+        <updatedAt>2016-07-27T04:30:04.884Z</updatedAt>
+        <workflowState>deleted</workflowState>
+        <objectNumber>1</objectNumber>
+    </list-item>
+    <list-item>
+        <csid>b9ab1401-3a7c-48e9-a611</csid>
+        <uri>/collectionobjects/b9ab1401-3a7c-48e9-a611</uri>
+        <refName>urn:cspace:core.collectionspace.org:collectionobjects:id(b9ab1401-3a7c-48e9-a611)'2010.1.9'</refName>
+        <updatedAt>2016-07-27T04:29:32.099Z</updatedAt>
+        <workflowState>deleted</workflowState>
+        <title>Der Ring des Nibelungen</title>
+        <objectNumber>2010.1.9</objectNumber>
+        <objectName>objectName</objectName>
+        <responsibleDepartment>ethnography1</responsibleDepartment>
+    </list-item>
+    <list-item>
+        <csid>a3068a72-6451-44e1-ada4</csid>
+        <uri>/collectionobjects/a3068a72-6451-44e1-ada4</uri>
+        <refName>urn:cspace:core.collectionspace.org:collectionobjects:id(a3068a72-6451-44e1-ada4)'2010.1.9'</refName>
+        <updatedAt>2016-07-27T04:29:11.224Z</updatedAt>
+        <workflowState>deleted</workflowState>
+        <objectNumber>2010.1.9</objectNumber>
+        <responsibleDepartment>ethnography1 a</responsibleDepartment>
+    </list-item>
+    <list-item>
+        <csid>46b9c971-59d6-4d81-8dd6</csid>
+        <uri>/collectionobjects/46b9c971-59d6-4d81-8dd6</uri>
+        <refName>urn:cspace:core.collectionspace.org:collectionobjects:id(46b9c971-59d6-4d81-8dd6)'2010.1.9'</refName>
+        <updatedAt>2016-07-27T04:29:11.195Z</updatedAt>
+        <workflowState>deleted</workflowState>
+        <objectNumber>2010.1.9</objectNumber>
+        <responsibleDepartment>ethnography1 a</responsibleDepartment>
+    </list-item>
+    <list-item>
+        <csid>0625dfcc-919e-4e1e-ab45</csid>
+        <uri>/collectionobjects/0625dfcc-919e-4e1e-ab45</uri>
+        <refName>urn:cspace:core.collectionspace.org:collectionobjects:id(0625dfcc-919e-4e1e-ab45)'2010.1.9'</refName>
+        <updatedAt>2016-07-27T04:29:11.165Z</updatedAt>
+        <workflowState>deleted</workflowState>
+        <title>title</title>
+        <objectNumber>2010.1.9</objectNumber>
+        <responsibleDepartment>ethnography1</responsibleDepartment>
+    </list-item>
+    <list-item>
+        <csid>4c2104d1-e0c4-436e-847d</csid>
+        <uri>/collectionobjects/4c2104d1-e0c4-436e-847d</uri>
+        <refName>urn:cspace:core.collectionspace.org:collectionobjects:id(4c2104d1-e0c4-436e-847d)'objectNumber'</refName>
+        <updatedAt>2016-07-27T04:28:51.149Z</updatedAt>
+        <workflowState>deleted</workflowState>
+        <title>aardvark title</title>
+        <objectNumber>objectNumber</objectNumber>
+    </list-item>
+    <list-item>
+        <csid>0a6e07d7-a264-4dec-8fbf</csid>
+        <uri>/collectionobjects/0a6e07d7-a264-4dec-8fbf</uri>
+        <refName>urn:cspace:core.collectionspace.org:collectionobjects:id(0a6e07d7-a264-4dec-8fbf)'2010.1.9'</refName>
+        <updatedAt>2016-07-27T04:28:51.130Z</updatedAt>
+        <workflowState>deleted</workflowState>
+        <title>title</title>
+        <objectNumber>2010.1.9</objectNumber>
+        <responsibleDepartment>ethnography1</responsibleDepartment>
+    </list-item>
+    <list-item>
+        <csid>92a05139-73f3-402c-97b8</csid>
+        <uri>/collectionobjects/92a05139-73f3-402c-97b8</uri>
+        <refName>urn:cspace:core.collectionspace.org:collectionobjects:id(92a05139-73f3-402c-97b8)'32'</refName>
+        <updatedAt>2016-07-27T04:28:33.836Z</updatedAt>
+        <workflowState>project</workflowState>
+        <objectNumber>32</objectNumber>
+        <objectName>Left-handed screwdriver</objectName>
+    </list-item>
+    <list-item>
+        <csid>53c451b7-b60c-45ac-818c</csid>
+        <uri>/collectionobjects/53c451b7-b60c-45ac-818c</uri>
+        <refName>urn:cspace:core.collectionspace.org:collectionobjects:id(53c451b7-b60c-45ac-818c)'1'</refName>
+        <updatedAt>2016-07-27T04:27:15.302Z</updatedAt>
+        <workflowState>deleted</workflowState>
+        <objectNumber>1</objectNumber>
+    </list-item>
+    <list-item>
+        <csid>297614ff-6c95-4445-a938</csid>
+        <uri>/collectionobjects/297614ff-6c95-4445-a938</uri>
+        <refName>urn:cspace:core.collectionspace.org:collectionobjects:id(297614ff-6c95-4445-a938)'1'</refName>
+        <updatedAt>2016-07-27T04:27:15.281Z</updatedAt>
+        <workflowState>deleted</workflowState>
+        <objectNumber>1</objectNumber>
+    </list-item>
+</ns2:abstract-common-list>
diff --git a/services/common/src/test/resources/test-data/xmljson/collectionobject.json b/services/common/src/test/resources/test-data/xmljson/collectionobject.json
new file mode 100644 (file)
index 0000000..26dd95b
--- /dev/null
@@ -0,0 +1,43 @@
+{
+  "document": {
+    "@name": "collectionobjects",
+    "ns2:collectionspace_core": {
+      "@xmlns:ns2": "http://collectionspace.org/collectionspace_core/",
+      "@xmlns:xsi": "http://www.w3.org/2001/XMLSchema-instance",
+      "tenantId": "1",
+      "updatedAt": "2016-07-27T04:31:38.648Z",
+      "workflowState": "deleted",
+      "createdBy": "admin@core.collectionspace.org",
+      "createdAt": "2016-07-27T04:31:38.290Z",
+      "refName": "urn:cspace:core.collectionspace.org:collectionobjects:id(2ece74b2-2053-458c-a252)'2'",
+      "uri": "/collectionobjects/2ece74b2-2053-458c-a252",
+      "updatedBy": "admin@core.collectionspace.org"
+    },
+    "ns2:collectionobjects_common": {
+      "@xmlns:ns2": "http://collectionspace.org/services/collectionobject",
+      "@xmlns:xsi": "http://www.w3.org/2001/XMLSchema-instance",
+      "responsibleDepartments": {
+        "responsibleDepartment": "new DEPT"
+      },
+      "objectNameList": {
+        "objectNameGroup": {
+          "objectName": "new OBJNAME"
+        }
+      },
+      "comments": {
+        "comment": "new COMMENTS"
+      },
+      "objectNumber": "2",
+      "distinguishingFeatures": "new DISTFEATURES"
+    },
+    "ns2:account_permission": {
+      "@xmlns:ns2": "http://collectionspace.org/services/authorization",
+      "account": {
+        "accountId": "cfc9f870-9c90-4cb7-97ca-96cbd086bbd4",
+        "screenName": "Administrator",
+        "userId": "admin@core.collectionspace.org",
+        "tenantId": "1"
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/services/common/src/test/resources/test-data/xmljson/collectionobject.xml b/services/common/src/test/resources/test-data/xmljson/collectionobject.xml
new file mode 100644 (file)
index 0000000..56ffcd8
--- /dev/null
@@ -0,0 +1,146 @@
+<document name="collectionobjects">
+    <ns2:collectionspace_core xmlns:ns2="http://collectionspace.org/collectionspace_core/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+        <tenantId>1</tenantId>
+        <updatedAt>2016-07-27T04:31:38.648Z</updatedAt>
+        <workflowState>deleted</workflowState>
+        <createdBy>admin@core.collectionspace.org</createdBy>
+        <createdAt>2016-07-27T04:31:38.290Z</createdAt>
+        <refName>urn:cspace:core.collectionspace.org:collectionobjects:id(2ece74b2-2053-458c-a252)'2'</refName>
+        <uri>/collectionobjects/2ece74b2-2053-458c-a252</uri>
+        <updatedBy>admin@core.collectionspace.org</updatedBy>
+    </ns2:collectionspace_core>
+    <ns2:collectionobjects_common xmlns:ns2="http://collectionspace.org/services/collectionobject" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+        <objectProductionDateGroupList/>
+        <fieldCollectionMethods/>
+        <titleGroupList/>
+        <assocEventPeoples/>
+        <nonTextualInscriptionGroupList/>
+        <assocActivityGroupList/>
+        <responsibleDepartments>
+            <responsibleDepartment>new DEPT</responsibleDepartment>
+        </responsibleDepartments>
+        <assocOrganizationGroupList/>
+        <measuredPartGroupList/>
+        <contentPositions/>
+        <styles/>
+        <assocObjectGroupList/>
+        <assocPeopleGroupList/>
+        <objectProductionOrganizationGroupList/>
+        <ownershipDateGroupList/>
+        <owners/>
+        <objectProductionReasons/>
+        <contentLanguages/>
+        <otherNumberList/>
+        <assocCulturalContextGroupList/>
+        <objectProductionPersonGroupList/>
+        <objectNameList>
+            <objectNameGroup>
+                <objectNameCurrency/>
+                <objectNameLanguage/>
+                <objectName>new OBJNAME</objectName>
+                <objectNameSystem/>
+                <objectNameType/>
+                <objectNameNote/>
+                <objectNameLevel/>
+            </objectNameGroup>
+        </objectNameList>
+        <objectStatusList/>
+        <assocDateGroupList/>
+        <viewersReferences/>
+        <assocEventPersons/>
+        <assocPlaceGroupList/>
+        <comments>
+            <comment>new COMMENTS</comment>
+        </comments>
+        <textualInscriptionGroupList/>
+        <briefDescriptions/>
+        <contentOrganizations/>
+        <objectProductionPlaceGroupList/>
+        <contentActivities/>
+        <contentPersons/>
+        <contentScripts/>
+        <objectNumber>2</objectNumber>
+        <colors/>
+        <ownersReferences/>
+        <contentConcepts/>
+        <fieldColEventNames/>
+        <techniqueGroupList/>
+        <assocEventPlaces/>
+        <fieldCollectionDateGroup>
+            <dateEarliestSingleQualifier/>
+            <scalarValuesComputed/>
+            <dateLatestDay/>
+            <dateLatestYear/>
+            <dateAssociation/>
+            <dateEarliestSingleEra/>
+            <dateDisplayDate/>
+            <dateEarliestSingleCertainty/>
+            <dateLatestEra/>
+            <dateEarliestSingleQualifierValue/>
+            <dateLatestCertainty/>
+            <dateEarliestSingleYear/>
+            <dateLatestQualifier/>
+            <dateLatestQualifierValue/>
+            <dateEarliestSingleQualifierUnit/>
+            <datePeriod/>
+            <dateEarliestScalarValue/>
+            <dateLatestMonth/>
+            <dateNote/>
+            <dateLatestScalarValue/>
+            <dateLatestQualifierUnit/>
+            <dateEarliestSingleDay/>
+            <dateEarliestSingleMonth/>
+        </fieldCollectionDateGroup>
+        <contentPlaces/>
+        <contentPeoples/>
+        <objectComponentGroupList/>
+        <technicalAttributeGroupList/>
+        <referenceGroupList/>
+        <fieldCollectionSources/>
+        <forms/>
+        <distinguishingFeatures>new DISTFEATURES</distinguishingFeatures>
+        <assocConceptGroupList/>
+        <contentDateGroup>
+            <dateEarliestSingleQualifier/>
+            <scalarValuesComputed/>
+            <dateLatestDay/>
+            <dateLatestYear/>
+            <dateAssociation/>
+            <dateEarliestSingleEra/>
+            <dateDisplayDate/>
+            <dateEarliestSingleCertainty/>
+            <dateLatestEra/>
+            <dateEarliestSingleQualifierValue/>
+            <dateLatestCertainty/>
+            <dateEarliestSingleYear/>
+            <dateLatestQualifier/>
+            <dateLatestQualifierValue/>
+            <dateEarliestSingleQualifierUnit/>
+            <datePeriod/>
+            <dateEarliestScalarValue/>
+            <dateLatestMonth/>
+            <dateNote/>
+            <dateLatestScalarValue/>
+            <dateLatestQualifierUnit/>
+            <dateEarliestSingleDay/>
+            <dateEarliestSingleMonth/>
+        </contentDateGroup>
+        <usageGroupList/>
+        <fieldCollectors/>
+        <assocPersonGroupList/>
+        <assocEventOrganizations/>
+        <contentEventNameGroupList/>
+        <contentOtherGroupList/>
+        <materialGroupList/>
+        <contentObjectGroupList/>
+        <objectProductionPeopleGroupList/>
+    </ns2:collectionobjects_common>
+    <ns2:account_permission xmlns:ns2="http://collectionspace.org/services/authorization">
+        <account>
+            <accountId>cfc9f870-9c90-4cb7-97ca-96cbd086bbd4</accountId>
+            <screenName>Administrator</screenName>
+            <userId>admin@core.collectionspace.org</userId>
+            <tenantId>1</tenantId>
+        </account>
+    </ns2:account_permission>
+</document>
diff --git a/services/common/src/test/resources/test-data/xmljson/permissions.json b/services/common/src/test/resources/test-data/xmljson/permissions.json
new file mode 100644 (file)
index 0000000..ee26eaf
--- /dev/null
@@ -0,0 +1,127 @@
+{
+  "ns2:permissions_list": {
+    "@xmlns:ns2": "http://collectionspace.org/services/authorization/perms",
+    "permission": [
+      {
+        "@csid": "15-idgenerators-CRUDL",
+        "description": "Generated admin permission.",
+        "resourceName": "idgenerators",
+        "actionGroup": "CRUDL",
+        "action": [
+          {
+            "@Hjid": "1",
+            "name": "CREATE",
+            "objectIdentity": "1159431374",
+            "objectIdentityResource": "15:idgenerators#create"
+          },
+          {
+            "@Hjid": "2",
+            "name": "READ",
+            "objectIdentity": "-615118360",
+            "objectIdentityResource": "15:idgenerators#read"
+          },
+          {
+            "@Hjid": "3",
+            "name": "UPDATE",
+            "objectIdentity": "1672879259",
+            "objectIdentityResource": "15:idgenerators#update"
+          },
+          {
+            "@Hjid": "4",
+            "name": "DELETE",
+            "objectIdentity": "1176267133",
+            "objectIdentityResource": "15:idgenerators#delete"
+          },
+          {
+            "@Hjid": "5",
+            "name": "SEARCH",
+            "objectIdentity": "1605388666",
+            "objectIdentityResource": "15:idgenerators#search"
+          }
+        ],
+        "effect": "PERMIT",
+        "createdAt": "2012-06-11T23:19:09.066"
+      },
+      {
+        "@csid": "15-id-CRUDL",
+        "description": "Generated admin permission.",
+        "resourceName": "id",
+        "actionGroup": "CRUDL",
+        "action": [
+          {
+            "@Hjid": "6",
+            "name": "CREATE",
+            "objectIdentity": "-203156594",
+            "objectIdentityResource": "15:id#create"
+          },
+          {
+            "@Hjid": "7",
+            "name": "READ",
+            "objectIdentity": "1551059112",
+            "objectIdentityResource": "15:id#read"
+          },
+          {
+            "@Hjid": "8",
+            "name": "UPDATE",
+            "objectIdentity": "310291291",
+            "objectIdentityResource": "15:id#update"
+          },
+          {
+            "@Hjid": "9",
+            "name": "DELETE",
+            "objectIdentity": "-186320835",
+            "objectIdentityResource": "15:id#delete"
+          },
+          {
+            "@Hjid": "10",
+            "name": "SEARCH",
+            "objectIdentity": "242800698",
+            "objectIdentityResource": "15:id#search"
+          }
+        ],
+        "effect": "PERMIT",
+        "createdAt": "2012-06-11T23:19:09.068"
+      },
+      {
+        "@csid": "15-servicegroups-CRUDL",
+        "description": "Generated admin permission.",
+        "resourceName": "servicegroups",
+        "actionGroup": "CRUDL",
+        "action": [
+          {
+            "@Hjid": "11",
+            "name": "CREATE",
+            "objectIdentity": "1035471244",
+            "objectIdentityResource": "15:servicegroups#create"
+          },
+          {
+            "@Hjid": "12",
+            "name": "READ",
+            "objectIdentity": "1042851366",
+            "objectIdentityResource": "15:servicegroups#read"
+          },
+          {
+            "@Hjid": "13",
+            "name": "UPDATE",
+            "objectIdentity": "1548919129",
+            "objectIdentityResource": "15:servicegroups#update"
+          },
+          {
+            "@Hjid": "14",
+            "name": "DELETE",
+            "objectIdentity": "1052307003",
+            "objectIdentityResource": "15:servicegroups#delete"
+          },
+          {
+            "@Hjid": "15",
+            "name": "SEARCH",
+            "objectIdentity": "1481428536",
+            "objectIdentityResource": "15:servicegroups#search"
+          }
+        ],
+        "effect": "PERMIT",
+        "createdAt": "2012-06-11T23:19:09.068"
+      }
+    ]
+  }
+}
\ No newline at end of file
diff --git a/services/common/src/test/resources/test-data/xmljson/permissions.xml b/services/common/src/test/resources/test-data/xmljson/permissions.xml
new file mode 100644 (file)
index 0000000..a87719a
--- /dev/null
@@ -0,0 +1,98 @@
+<ns2:permissions_list xmlns:ns2="http://collectionspace.org/services/authorization/perms">
+    <permission csid="15-idgenerators-CRUDL">
+        <description>Generated admin permission.</description>
+        <resourceName>idgenerators</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+        <action Hjid="1">
+            <name>CREATE</name>
+            <objectIdentity>1159431374</objectIdentity>
+            <objectIdentityResource>15:idgenerators#create</objectIdentityResource>
+        </action>
+        <action Hjid="2">
+            <name>READ</name>
+            <objectIdentity>-615118360</objectIdentity>
+            <objectIdentityResource>15:idgenerators#read</objectIdentityResource>
+        </action>
+        <action Hjid="3">
+            <name>UPDATE</name>
+            <objectIdentity>1672879259</objectIdentity>
+            <objectIdentityResource>15:idgenerators#update</objectIdentityResource>
+        </action>
+        <action Hjid="4">
+            <name>DELETE</name>
+            <objectIdentity>1176267133</objectIdentity>
+            <objectIdentityResource>15:idgenerators#delete</objectIdentityResource>
+        </action>
+        <action Hjid="5">
+            <name>SEARCH</name>
+            <objectIdentity>1605388666</objectIdentity>
+            <objectIdentityResource>15:idgenerators#search</objectIdentityResource>
+        </action>
+        <effect>PERMIT</effect>
+        <createdAt>2012-06-11T23:19:09.066</createdAt>
+    </permission>
+    <permission csid="15-id-CRUDL">
+        <description>Generated admin permission.</description>
+        <resourceName>id</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+        <action Hjid="6">
+            <name>CREATE</name>
+            <objectIdentity>-203156594</objectIdentity>
+            <objectIdentityResource>15:id#create</objectIdentityResource>
+        </action>
+        <action Hjid="7">
+            <name>READ</name>
+            <objectIdentity>1551059112</objectIdentity>
+            <objectIdentityResource>15:id#read</objectIdentityResource>
+        </action>
+        <action Hjid="8">
+            <name>UPDATE</name>
+            <objectIdentity>310291291</objectIdentity>
+            <objectIdentityResource>15:id#update</objectIdentityResource>
+        </action>
+        <action Hjid="9">
+            <name>DELETE</name>
+            <objectIdentity>-186320835</objectIdentity>
+            <objectIdentityResource>15:id#delete</objectIdentityResource>
+        </action>
+        <action Hjid="10">
+            <name>SEARCH</name>
+            <objectIdentity>242800698</objectIdentity>
+            <objectIdentityResource>15:id#search</objectIdentityResource>
+        </action>
+        <effect>PERMIT</effect>
+        <createdAt>2012-06-11T23:19:09.068</createdAt>
+    </permission>
+    <permission csid="15-servicegroups-CRUDL">
+        <description>Generated admin permission.</description>
+        <resourceName>servicegroups</resourceName>
+        <actionGroup>CRUDL</actionGroup>
+        <action Hjid="11">
+            <name>CREATE</name>
+            <objectIdentity>1035471244</objectIdentity>
+            <objectIdentityResource>15:servicegroups#create</objectIdentityResource>
+        </action>
+        <action Hjid="12">
+            <name>READ</name>
+            <objectIdentity>1042851366</objectIdentity>
+            <objectIdentityResource>15:servicegroups#read</objectIdentityResource>
+        </action>
+        <action Hjid="13">
+            <name>UPDATE</name>
+            <objectIdentity>1548919129</objectIdentity>
+            <objectIdentityResource>15:servicegroups#update</objectIdentityResource>
+        </action>
+        <action Hjid="14">
+            <name>DELETE</name>
+            <objectIdentity>1052307003</objectIdentity>
+            <objectIdentityResource>15:servicegroups#delete</objectIdentityResource>
+        </action>
+        <action Hjid="15">
+            <name>SEARCH</name>
+            <objectIdentity>1481428536</objectIdentity>
+            <objectIdentityResource>15:servicegroups#search</objectIdentityResource>
+        </action>
+        <effect>PERMIT</effect>
+        <createdAt>2012-06-11T23:19:09.068</createdAt>
+    </permission>
+</ns2:permissions_list>
index 0d7273271260ff703cb6ffe4b298dc4062040b23..a008f4ddb8d9bbf14ee0500cb2696484d146433b 100644 (file)
@@ -1,3 +1,58 @@
-{ 
-  "foo": "bar"
-}
+{
+  "document": {
+    "@name": "examples",
+    "ns:collectionspace_core": {
+      "@xmlns:ns": "http://collectionspace.org/collectionspace_core/",
+      "tenantId": "123",
+      "workflowState": "project",
+      "createdAt": "2016-07-27T04:31:38.290Z",
+      "createdBy": "someone@collectionspace.org",
+      "updatedAt": "2016-07-27T04:31:38.648Z",
+      "updatedBy": "user@collectionspace.org",
+      "uri": "/examples/2ece74b2-2053-458c-a252"
+    },
+    "ns:examples_common": {
+      "@xmlns:ns": "http://collectionspace.org/services/example",
+      "scalar": "This is a scalar field value",
+      "struct": {
+        "field1": "A value in a structured field",
+        "field2": "Another structured field value",
+        "nestedstruct": {
+          "id": "123abc",
+          "description": "A nested structured field value"
+        }
+      },
+      "repeat": {
+        "item": [
+          "repeating scalar field value 1",
+          "repeating scalar field value 2",
+          "repeating scalar field value 3",
+          "repeating scalar field value 4"
+        ]
+      },
+      "repeatstruct": {
+        "innerstruct": [
+          {
+            "name": "Big Bird",
+            "color": "yellow"
+          },
+          {
+            "name": "Cookie Monster",
+            "color": "blue"
+          },
+          {
+            "name": "Elmo",
+            "age": "3",
+            "nestedrepeat": {
+              "nrval": [
+                "a",
+                "b",
+                "c"
+              ]
+            }
+          }
+        ]
+      }
+    }
+  }
+}
\ No newline at end of file
index 58ca7f67e3a53ce1e1adf6d9ffa47ca2fdc29c29..ff18c8aaf84d1e806e729159aa4c6099a3e27cb1 100644 (file)
@@ -24,6 +24,7 @@
             <item>repeating scalar field value 3</item>
             <item>repeating scalar field value 4</item>
         </repeat>
+        <empty></empty>
         <repeatstruct>
             <innerstruct>
                 <name>Big Bird</name>
@@ -43,5 +44,8 @@
                 </nestedrepeat>
             </innerstruct>
         </repeatstruct>
+        <emptytop>
+            <emptynested></emptynested>
+        </emptytop>
     </ns:examples_common>
 </document>
diff --git a/services/common/src/test/resources/test-data/xmljson/vocabulary-items.json b/services/common/src/test/resources/test-data/xmljson/vocabulary-items.json
new file mode 100644 (file)
index 0000000..fb57f6a
--- /dev/null
@@ -0,0 +1,62 @@
+{
+  "ns2:abstract-common-list": {
+    "@xmlns:ns2": "http://collectionspace.org/services/jaxb",
+    "pageNum": "0",
+    "pageSize": "5",
+    "itemsInPage": "5",
+    "totalItems": "32",
+    "fieldsReturned": "csid|uri|refName|updatedAt|workflowState|order|termStatus|displayName|shortIdentifier",
+    "list-item": [
+      {
+        "csid": "45377b7e-8071-4f37-8cae",
+        "uri": "/vocabularies/f5992afc-d5e6-49c2-99d4/items/45377b7e-8071-4f37-8cae",
+        "refName": "urn:cspace:pahma.cspace.berkeley.edu:vocabularies:name(languages):item:name(grc)'Ancient Greek'",
+        "updatedAt": "2014-04-24T16:33:14Z",
+        "workflowState": "project",
+        "termStatus": "active",
+        "displayName": "Ancient Greek",
+        "shortIdentifier": "grc"
+      },
+      {
+        "csid": "9fe02421-612d-4de3-a917",
+        "uri": "/vocabularies/f5992afc-d5e6-49c2-99d4/items/9fe02421-612d-4de3-a917",
+        "refName": "urn:cspace:pahma.cspace.berkeley.edu:vocabularies:name(languages):item:name(ara)'Arabic'",
+        "updatedAt": "2014-04-24T16:33:11Z",
+        "workflowState": "project",
+        "termStatus": "active",
+        "displayName": "Arabic",
+        "shortIdentifier": "ara"
+      },
+      {
+        "csid": "7ee9de49-fe9b-462c-9332",
+        "uri": "/vocabularies/f5992afc-d5e6-49c2-99d4/items/7ee9de49-fe9b-462c-9332",
+        "refName": "urn:cspace:pahma.cspace.berkeley.edu:vocabularies:name(languages):item:name(hye)'Armenian'",
+        "updatedAt": "2014-04-24T16:33:12Z",
+        "workflowState": "project",
+        "termStatus": "active",
+        "displayName": "Armenian",
+        "shortIdentifier": "hye"
+      },
+      {
+        "csid": "a1f8c72a-0995-41c7-a9fd",
+        "uri": "/vocabularies/f5992afc-d5e6-49c2-99d4/items/a1f8c72a-0995-41c7-a9fd",
+        "refName": "urn:cspace:pahma.cspace.berkeley.edu:vocabularies:name(languages):item:name(zho)'Chinese'",
+        "updatedAt": "2014-04-24T16:33:12Z",
+        "workflowState": "project",
+        "termStatus": "active",
+        "displayName": "Chinese",
+        "shortIdentifier": "zho"
+      },
+      {
+        "csid": "b468854e-1978-44e8-8e1d",
+        "uri": "/vocabularies/f5992afc-d5e6-49c2-99d4/items/b468854e-1978-44e8-8e1d",
+        "refName": "urn:cspace:pahma.cspace.berkeley.edu:vocabularies:name(languages):item:name(Coptic1398357194892)'Coptic'",
+        "updatedAt": "2014-04-24T16:33:14Z",
+        "workflowState": "project",
+        "termStatus": "active",
+        "displayName": "Coptic",
+        "shortIdentifier": "Coptic1398357194892"
+      }
+    ]
+  }
+}
\ No newline at end of file
diff --git a/services/common/src/test/resources/test-data/xmljson/vocabulary-items.xml b/services/common/src/test/resources/test-data/xmljson/vocabulary-items.xml
new file mode 100644 (file)
index 0000000..8b52656
--- /dev/null
@@ -0,0 +1,57 @@
+<ns2:abstract-common-list xmlns:ns2="http://collectionspace.org/services/jaxb">
+    <pageNum>0</pageNum>
+    <pageSize>5</pageSize>
+    <itemsInPage>5</itemsInPage>
+    <totalItems>32</totalItems>
+    <fieldsReturned>csid|uri|refName|updatedAt|workflowState|order|termStatus|displayName|shortIdentifier</fieldsReturned>
+    <list-item>
+        <csid>45377b7e-8071-4f37-8cae</csid>
+        <uri>/vocabularies/f5992afc-d5e6-49c2-99d4/items/45377b7e-8071-4f37-8cae</uri>
+        <refName>urn:cspace:pahma.cspace.berkeley.edu:vocabularies:name(languages):item:name(grc)'Ancient Greek'</refName>
+        <updatedAt>2014-04-24T16:33:14Z</updatedAt>
+        <workflowState>project</workflowState>
+        <termStatus>active</termStatus>
+        <displayName>Ancient Greek</displayName>
+        <shortIdentifier>grc</shortIdentifier>
+    </list-item>
+    <list-item>
+        <csid>9fe02421-612d-4de3-a917</csid>
+        <uri>/vocabularies/f5992afc-d5e6-49c2-99d4/items/9fe02421-612d-4de3-a917</uri>
+        <refName>urn:cspace:pahma.cspace.berkeley.edu:vocabularies:name(languages):item:name(ara)'Arabic'</refName>
+        <updatedAt>2014-04-24T16:33:11Z</updatedAt>
+        <workflowState>project</workflowState>
+        <termStatus>active</termStatus>
+        <displayName>Arabic</displayName>
+        <shortIdentifier>ara</shortIdentifier>
+    </list-item>
+    <list-item>
+        <csid>7ee9de49-fe9b-462c-9332</csid>
+        <uri>/vocabularies/f5992afc-d5e6-49c2-99d4/items/7ee9de49-fe9b-462c-9332</uri>
+        <refName>urn:cspace:pahma.cspace.berkeley.edu:vocabularies:name(languages):item:name(hye)'Armenian'</refName>
+        <updatedAt>2014-04-24T16:33:12Z</updatedAt>
+        <workflowState>project</workflowState>
+        <termStatus>active</termStatus>
+        <displayName>Armenian</displayName>
+        <shortIdentifier>hye</shortIdentifier>
+    </list-item>
+    <list-item>
+        <csid>a1f8c72a-0995-41c7-a9fd</csid>
+        <uri>/vocabularies/f5992afc-d5e6-49c2-99d4/items/a1f8c72a-0995-41c7-a9fd</uri>
+        <refName>urn:cspace:pahma.cspace.berkeley.edu:vocabularies:name(languages):item:name(zho)'Chinese'</refName>
+        <updatedAt>2014-04-24T16:33:12Z</updatedAt>
+        <workflowState>project</workflowState>
+        <termStatus>active</termStatus>
+        <displayName>Chinese</displayName>
+        <shortIdentifier>zho</shortIdentifier>
+    </list-item>
+    <list-item>
+        <csid>b468854e-1978-44e8-8e1d</csid>
+        <uri>/vocabularies/f5992afc-d5e6-49c2-99d4/items/b468854e-1978-44e8-8e1d</uri>
+        <refName>urn:cspace:pahma.cspace.berkeley.edu:vocabularies:name(languages):item:name(Coptic1398357194892)'Coptic'</refName>
+        <updatedAt>2014-04-24T16:33:14Z</updatedAt>
+        <workflowState>project</workflowState>
+        <termStatus>active</termStatus>
+        <displayName>Coptic</displayName>
+        <shortIdentifier>Coptic1398357194892</shortIdentifier>
+    </list-item>
+</ns2:abstract-common-list>