/* (non-Javadoc) * @see javax.servlet.http.HttpServlet#service(javax.servlet.ServletRequest, javax.servlet.ServletResponse) */ @SuppressWarnings("unchecked") public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) res; String result = (String) request.getAttribute("RESULT"); Boolean error = (Boolean) request.getAttribute("ERROR"); if (result == null && error == null) { String tmp = request.getRequestURI(); if (request.getQueryString() == null) { response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Invalid or empty url"); } else { tmp += "?"; } // eg: admin&admin String[] params = request.getQueryString().split("&"); if (params.length < 2) { response.sendError( HttpServletResponse.SC_BAD_REQUEST, "Invalid url: " + request.getQueryString()); } final ByteArrayOutputStream importData = parseInputStream(request, response); try { final BasePolicyServiceConsumer consumer = new BasePolicyServiceConsumer(); consumer.getService().getInvokerOptions().setTransportName("HTTP11"); consumer.getService().setSessionTransportHeader(SECURITY_TOKEN_HEADER, SECURITY_TOKEN); if (importData != null) { if (tmp.startsWith(impPolicyPrefix)) { String partialURL = getPartialUrl("createPolicy", RequestFormat.JSON, params); URL url = new URL( policyServiceURL + tmp.substring(impPolicyPrefix.length()).toString() + partialURL); consumer.getService().setServiceLocation(url); PolicySet policySet = unmarshalXmlPolicyData(importData); StringBuffer policiesNotStored = new StringBuffer(); if (policySet.getPolicy().isEmpty()) { response.sendError(HttpServletResponse.SC_NOT_FOUND, "No policies to import"); } CreatePolicyResponse createPolicyResponse; for (Policy policy : policySet.getPolicy()) { policy.setPolicyId(null); if ("RL".equalsIgnoreCase(policy.getPolicyType())) { List<Rule> rules = policy.getRule(); for (Rule rule : rules) { rule.setRuleName(policy.getPolicyName()); } } CreatePolicyRequest createPolicyRequest = new CreatePolicyRequest(); createPolicyRequest.setPolicy(policy); createPolicyResponse = (CreatePolicyResponse) consumer .getService() .createDispatch("createPolicy") .invoke(createPolicyRequest); if (createPolicyResponse.getErrorMessage() != null) { policiesNotStored.append(policy.getPolicyName() + ": "); for (CommonErrorData error2 : createPolicyResponse.getErrorMessage().getError()) { policiesNotStored.append(error2.getMessage() + "\n"); } } } if (policiesNotStored.length() > 0) { response.sendError( HttpServletResponse.SC_CONFLICT, "The following policies have not been stored: \n" + policiesNotStored.toString()); } } else if (tmp.startsWith(impSGPrefix)) { String partialURL = getPartialUrl("createSubjectGroups", RequestFormat.JSON, params); URL url = new URL( policyServiceURL + tmp.substring(impSGPrefix.length()).toString() + partialURL); consumer.getService().setServiceLocation(url); List<SubjectGroup> subjectGroups = unmarshalXmlSGData(importData); StringBuffer sgNotStored = new StringBuffer(); if (subjectGroups.isEmpty()) { response.sendError(HttpServletResponse.SC_NOT_FOUND, "No Subject Group to import"); } CreateSubjectGroupsResponse createSGResponse; for (SubjectGroup subjectGroup : subjectGroups) { subjectGroup.setSubjectMatch(null); CreateSubjectGroupsRequest createSGRequest = new CreateSubjectGroupsRequest(); createSGRequest.getSubjectGroups().add(subjectGroup); createSGResponse = consumer.createSubjectGroups(createSGRequest); if (createSGResponse.getErrorMessage() != null) { sgNotStored.append(subjectGroup.getSubjectGroupName() + ": "); for (CommonErrorData error2 : createSGResponse.getErrorMessage().getError()) { sgNotStored.append(error2.getMessage() + "\n"); } } } if (sgNotStored.length() > 0) { response.sendError( HttpServletResponse.SC_CONFLICT, "The following Subject Groups have not been stored: \n" + sgNotStored.toString()); } } else { response.sendError( HttpServletResponse.SC_BAD_REQUEST, "Invalid url for download: " + tmp); return; } return; } } catch (JAXBException e) { response.sendError( HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Unable to parse imported file"); } catch (ServiceException e1) { response.sendError( HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Unable to invoke PolicyService"); } } if (error != null) { response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); } }