+ private void processRawXacmlReq() throws PolicyDecisionException {
+ Request pdpRequest = null;
+ Response pdpResponse = null;
+ // Process Result.
+ try {
+ PDPServices pdpServices = new PDPServices();
+ pdpServices.setRequestType(PDPServices.DECISION_RAW_XACML);
+ String rawXacmlReq = decisionAttributes.get(PDPServices.DECISION_RAW_XACML);
+ if (StringUtils.isBlank(rawXacmlReq)) {
+ LOGGER.error("Raw XACML request cannot be empty.");
+ throw new PolicyDecisionException(
+ "Raw XACML request cannot be empty. Please provide the XACML request in "
+ + PDPServices.DECISION_RAW_XACML);
+ }
+ String rawXacmlReqMode = decisionAttributes.get(PDPServices.DECISION_RAW_XACML_TYPE);
+ String reqType = PDPServices.DECISION_RAW_XACML_XML_TYPE;
+ if (!StringUtils.isBlank(rawXacmlReqMode)
+ && PDPServices.DECISION_RAW_XACML_JSON_TYPE.equalsIgnoreCase(rawXacmlReqMode.trim())) {
+ pdpRequest = JSONRequest.load(rawXacmlReq);
+ reqType = PDPServices.DECISION_RAW_XACML_JSON_TYPE;
+ } else {
+ pdpRequest = DOMRequest.load(StringEscapeUtils.unescapeXml(rawXacmlReq));
+ pdpServices.setRequestFormat(PDPServices.DECISION_RAW_XACML_XML_TYPE);
+ }
+
+ status = HttpStatus.OK;
+ pdpResponse = pdpServices.callPdp(pdpRequest, getRequestUuid());
+
+ String outgoingResponseString = null;
+ if (PDPServices.DECISION_RAW_XACML_JSON_TYPE.equalsIgnoreCase(reqType)) {
+ outgoingResponseString = JSONResponse.toString(pdpResponse, false);
+ } else {
+ outgoingResponseString = DOMResponse.toString(pdpResponse, false);
+ if (!StringUtils.isBlank(outgoingResponseString)) {
+ outgoingResponseString = StringEscapeUtils.escapeXml10(outgoingResponseString);
+ }
+ }
+
+ LOGGER.info("processRawXacmlReq - Request - \n" + rawXacmlReq + "\n Reponse:\n" + outgoingResponseString);
+ StdDecisionResponse decisionResp = new StdDecisionResponse();
+ if (!StringUtils.isBlank(outgoingResponseString)
+ && outgoingResponseString.contains(Decision.PERMIT.toString())) {
+ decisionResp.setDecision(PolicyDecision.PERMIT);
+ } else if (!StringUtils.isBlank(outgoingResponseString)
+ && outgoingResponseString.contains(Decision.DENY.toString())) {
+ decisionResp.setDecision(PolicyDecision.DENY);
+ } else {
+ decisionResp.setDecision(PolicyDecision.ERROR);
+ }
+ decisionResp.setDetails(outgoingResponseString);
+ this.decisionResponse = decisionResp;
+ } catch (Exception e) {
+ LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + e);
+ status = HttpStatus.BAD_REQUEST;
+ throw new PolicyDecisionException(e);
+ }
+ }
+
+ private DecisionResponse decisionResult(Collection<PDPResponse> generateRequest) {