Thanks for the responses, everyone, but I gave up on doing it the conventional way and created this after rule instead haha
import java.util.*;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathFactory;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import java.io.StringReader;
import org.w3c.dom.NodeList;
if (!rawResponseObject.equals("")) {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(new InputSource(new StringReader(rawResponseObject)));
XPathFactory xPathFactory = XPathFactory.newInstance();
XPath xpath = xPathFactory.newXPath();
String expression = "/DATA_DS/GL_USER";
XPathExpression xPathExpression = xpath.compile(expression);
NodeList entitlements = (NodeList) xPathExpression.evaluate(doc,javax.xml.xpath.XPathConstants.NODESET);
Map processedResponse = new HashMap();
String USER_ROLE_XID;
String IS_RESERVED;
String GL_LEVEL;
String USER_ROLE_GID;
String DATA_SOURCE_PROFILE_GID;
String VPD_PROFILE_GID;
String VPD_DOMAIN_NAME;
String DOMAIN_NAME;
for (int i = 1; i <= entitlements.getLength(); i++) {
USER_ROLE_XID = xpath.compile("/DATA_DS/GL_USER["+i+"]/USER_ROLE_XID").evaluate(doc);
IS_RESERVED = xpath.compile("/DATA_DS/GL_USER["+i+"]/IS_RESERVED").evaluate(doc);
GL_LEVEL = xpath.compile("/DATA_DS/GL_USER["+i+"]/GL_LEVEL").evaluate(doc);
USER_ROLE_GID = xpath.compile("/DATA_DS/GL_USER["+i+"]/USER_ROLE_GID").evaluate(doc);
DATA_SOURCE_PROFILE_GID = xpath.compile("/DATA_DS/GL_USER["+i+"]/DATA_SOURCE_PROFILE_GID").evaluate(doc);
VPD_PROFILE_GID = xpath.compile("/DATA_DS/GL_USER["+i+"]/VPD_PROFILE_GID").evaluate(doc);
VPD_DOMAIN_NAME = xpath.compile("/DATA_DS/GL_USER["+i+"]/VPD_DOMAIN_NAME").evaluate(doc);
DOMAIN_NAME = xpath.compile("/DATA_DS/GL_USER["+i+"]/DOMAIN_NAME").evaluate(doc);
processedResponse.put("Role", USER_ROLE_XID);
processedResponse.put("IS_RESERVED", IS_RESERVED);
processedResponse.put("GL_LEVEL", GL_LEVEL);
processedResponse.put("USER_ROLE_GID", USER_ROLE_GID);
processedResponse.put("DATA_SOURCE_PROFILE_GID", DATA_SOURCE_PROFILE_GID);
processedResponse.put("VPD_PROFILE_GID", VPD_PROFILE_GID);
processedResponse.put("VPD_DOMAIN_NAME", VPD_DOMAIN_NAME);
processedResponse.put("DOMAIN_NAME", DOMAIN_NAME);
processedResponseObject.add(processedResponse);
processedResponse = new HashMap();
}
}
Map updatedMapInfo = new HashMap();
updatedMapInfo.put("data", processedResponseObject);
return updatedMapInfo;