@SuppressWarnings("unchecked") public Packet secureResponse(Packet retPacket, Subject serviceSubject, Map sharedState) throws XWSSecurityException { boolean isSCIssueMessage = (sharedState.get("IS_SC_ISSUE") != null) ? true : false; boolean isSCCancelMessage = (sharedState.get("IS_SC_CANCEL") != null) ? true : false; boolean isTrustMessage = (sharedState.get("IS_TRUST_MESSAGE") != null) ? true : false; Packet packet = (Packet) sharedState.get("VALIDATE_REQ_PACKET"); Boolean thereWasAFaultSTR = (Boolean) sharedState.get("THERE_WAS_A_FAULT"); boolean thereWasAFault = (thereWasAFaultSTR != null) ? thereWasAFaultSTR.booleanValue() : false; if (thereWasAFault) { return retPacket; } /* TODO:this piece of code present since payload should be read once*/ if (!optimized) { try { SOAPMessage sm = retPacket.getMessage().readAsSOAPMessage(); Message newMsg = Messages.create(sm); retPacket.setMessage(newMsg); } catch (SOAPException ex) { throw new WebServiceException(ex); } } // ---------------OUTBOUND SECURITY PROCESSING---------- ProcessingContext ctx = initializeOutgoingProcessingContext(retPacket, isSCIssueMessage); ctx.setExtraneousProperty("SessionManager", sessionManager); Message msg = retPacket.getMessage(); try { if (ctx.getSecurityPolicy() != null && ((MessagePolicy) ctx.getSecurityPolicy()).size() > 0) { if (!optimized) { SOAPMessage soapMessage = msg.readAsSOAPMessage(); soapMessage = secureOutboundMessage(soapMessage, ctx); msg = Messages.create(soapMessage); } else { msg = secureOutboundMessage(msg, ctx); } } } catch (WssSoapFaultException ex) { sharedState.put("THERE_WAS_A_FAULT", Boolean.valueOf(true)); msg = Messages.create(getSOAPFault(ex)); } catch (SOAPException se) { // internal error log.log(Level.SEVERE, LogStringsMessages.WSITPVD_0029_ERROR_SECURING_OUTBOUND_MSG(), se); throw new WebServiceException( LogStringsMessages.WSITPVD_0029_ERROR_SECURING_OUTBOUND_MSG(), se); } finally { if (isSCCancel(retPacket)) { removeContext(packet); } } resetCachedOperation(retPacket); retPacket.setMessage(msg); return retPacket; }