/*
* Copyright (c) 2005-2010, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
* WSO2 Inc. licenses this file to you under the Apache License,
* Version 2.0 (the "License"); you may not use this file except
* in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.wso2.carbon.identity.entitlement.mediator;
import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMNamespace;
import org.apache.axiom.om.OMNode;
import org.apache.axiom.om.impl.llom.util.AXIOMUtil;
import org.apache.axiom.soap.SOAP11Constants;
import org.apache.axiom.soap.SOAP12Constants;
import org.apache.axiom.soap.SOAPEnvelope;
import org.apache.axiom.soap.SOAPFactory;
import org.apache.axis2.AxisFault;
import org.apache.axis2.context.ConfigurationContext;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.synapse.ContinuationState;
import org.apache.synapse.ManagedLifecycle;
import org.apache.synapse.Mediator;
import org.apache.synapse.MessageContext;
import org.apache.synapse.SynapseConstants;
import org.apache.synapse.SynapseException;
import org.apache.synapse.SynapseLog;
import org.apache.synapse.config.SynapseConfiguration;
import org.apache.synapse.continuation.ContinuationStackManager;
import org.apache.synapse.continuation.ReliantContinuationState;
import org.apache.synapse.core.SynapseEnvironment;
import org.apache.synapse.core.axis2.Axis2MessageContext;
import org.apache.synapse.debug.constructs.EnclosedInlinedSequence;
import org.apache.synapse.mediators.AbstractMediator;
import org.apache.synapse.mediators.FlowContinuableMediator;
import org.apache.synapse.mediators.base.SequenceMediator;
import org.apache.synapse.util.AXIOMUtils;
import org.apache.synapse.util.MessageHelper;
import org.jaxen.JaxenException;
import org.wso2.carbon.core.util.CryptoException;
import org.wso2.carbon.core.util.CryptoUtil;
import org.wso2.carbon.identity.entitlement.mediator.callback.EntitlementCallbackHandler;
import org.wso2.carbon.identity.entitlement.mediator.callback.UTEntitlementCallbackHandler;
import org.wso2.carbon.identity.entitlement.proxy.Attribute;
import org.wso2.carbon.identity.entitlement.proxy.PEPProxy;
import org.wso2.carbon.identity.entitlement.proxy.PEPProxyConfig;
import org.wso2.carbon.identity.entitlement.proxy.ProxyConstants;
import org.wso2.carbon.identity.entitlement.proxy.exception.EntitlementProxyException;
import org.wso2.carbon.utils.CarbonUtils;
import javax.xml.namespace.QName;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
public class EntitlementMediator extends AbstractMediator implements ManagedLifecycle,
FlowContinuableMediator, EnclosedInlinedSequence {
private static final Log log = LogFactory.getLog(EntitlementMediator.class);
private String remoteServiceUserName;
private String remoteServicePassword;
private String remoteServiceUrl;
private String callbackClass;
private String client;
private String thriftPort;
private String thriftHost;
private String reuseSession;
private String cacheType;
private int invalidationInterval;
private int maxCacheEntries;
EntitlementCallbackHandler callback = null;
/* The reference to the sequence which will execute when access is denied */
private String onRejectSeqKey = null;
/* The in-line sequence which will execute when access is denied */
private Mediator onRejectMediator = null;
/* The reference to the sequence which will execute when access is allowed */
private String onAcceptSeqKey = null;
/* The in-line sequence which will execute when access is allowed */
private Mediator onAcceptMediator = null;
/* The reference to the obligations sequence */
private String obligationsSeqKey = null;
/* The in-line obligation sequence */
private Mediator obligationsMediator = null;
/* The reference to the advice sequence */
private String adviceSeqKey = null;
/* The in-line advice sequence */
private Mediator adviceMediator = null;
private PEPProxy pepProxy;
private final String ORIGINAL_ENTITLEMENT_PAYLOAD = "ORIGINAL_ENTITLEMENT_PAYLOAD";
private final String ENTITLEMENT_DECISION = "ENTITLEMENT_DECISION";
/**
* {@inheritDoc}
*/
public boolean mediate(MessageContext synCtx) {
if (synCtx.getEnvironment().isDebuggerEnabled()) {
if (super.divertMediationRoute(synCtx)) {
return true;
}
}
String decisionString;
String userName;
String serviceName;
String operationName;
String action;
String resourceName;
Attribute[] otherAttributes;
if (log.isDebugEnabled()) {
log.debug("Mediation for Entitlement started");
}
try {
userName = callback.getUserName(synCtx);
serviceName = callback.findServiceName(synCtx);
operationName = callback.findOperationName(synCtx);
action = callback.findAction(synCtx);
otherAttributes = callback.findOtherAttributes(synCtx);
if (userName == null) {
throw new SynapseException(
"User name not provided for the Entitlement mediator - can't proceed");
}
if (operationName != null) {
resourceName = serviceName + "/" + operationName;
} else {
resourceName = serviceName;
}
if(otherAttributes == null){
otherAttributes = new Attribute[0];
}
if (log.isDebugEnabled()) {
StringBuilder debugOtherAttributes = new StringBuilder();
debugOtherAttributes.append("Subject ID is : " + userName +
" Resource ID is : " + resourceName +
" Action ID is : " + action + ".");
if(otherAttributes.length > 0){
debugOtherAttributes.append("Other attributes are ");
for(int i = 0; i < otherAttributes.length; i++){
debugOtherAttributes.append("Attribute ID : ").append(otherAttributes[i].getId())
.append(" of Category : ").append(otherAttributes[i].getCategory())
.append(" of Type : ").append(otherAttributes[i].getType())
.append(" and Value : ").append(otherAttributes[i].getValue());
if(i < otherAttributes.length - 2){
debugOtherAttributes.append(", ");
} else if(i == otherAttributes.length - 2){
debugOtherAttributes.append(" and ");
} else {
debugOtherAttributes.append(".");
}
}
}
log.debug(debugOtherAttributes);
}
// if decision cache is disabled
// Creating the XACML 3.0 Attributes to Send XACML Request
Attribute[] tempArr = new Attribute[otherAttributes.length + 3];
tempArr[0] = new Attribute("urn:oasis:names:tc:xacml:1.0:subject-category:access-subject", "urn:oasis:names:tc:xacml:1.0:subject:subject-id", ProxyConstants.DEFAULT_DATA_TYPE, userName);
tempArr[1] = new Attribute("urn:oasis:names:tc:xacml:3.0:attribute-category:action", "urn:oasis:names:tc:xacml:1.0:action:action-id", ProxyConstants.DEFAULT_DATA_TYPE, action);
tempArr[2] = new Attribute("urn:oasis:names:tc:xacml:3.0:attribute-category:resource", "urn:oasis:names:tc:xacml:1.0:resource:resource-id", ProxyConstants.DEFAULT_DATA_TYPE, resourceName);
for(int i=0;i<otherAttributes.length;i++){
tempArr[3+i]= otherAttributes[i];
}
decisionString = pepProxy.getDecision(tempArr);
String simpleDecision;
OMElement obligations;
OMElement advice;
if(decisionString != null){
String nameSpace = null;
OMElement decisionElement = AXIOMUtil.stringToOM(decisionString);
OMNamespace omNamespace = decisionElement.getDefaultNamespace();
if (omNamespace != null){
nameSpace = omNamespace.getNamespaceURI();
}
if(nameSpace == null){
simpleDecision = decisionElement.getFirstChildWithName(new QName("Result")).
getFirstChildWithName(new QName("Decision")).getText();
obligations = decisionElement.getFirstChildWithName(new QName("Result")).
getFirstChildWithName(new QName("Obligations"));
advice = decisionElement.getFirstChildWithName(new QName("Result")).
getFirstChildWithName(new QName("AssociatedAdvice"));
} else {
simpleDecision = decisionElement.getFirstChildWithName(new QName(nameSpace,"Result")).
getFirstChildWithName(new QName(nameSpace,"Decision")).getText();
obligations = decisionElement.getFirstChildWithName(new QName(nameSpace,"Result")).
getFirstChildWithName(new QName(nameSpace, "Obligations"));
advice = decisionElement.getFirstChildWithName(new QName(nameSpace,"Result")).
getFirstChildWithName(new QName(nameSpace, "AssociatedAdvice"));
}
if(log.isDebugEnabled()){
log.debug("Entitlement Decision is : " + simpleDecision);
}
} else {
//undefined decision;
throw new SynapseException("Undefined Decision is received");
}
synCtx.setProperty(ORIGINAL_ENTITLEMENT_PAYLOAD, synCtx.getEnvelope());
synCtx.setProperty(ENTITLEMENT_DECISION, simpleDecision);
// assume entitlement mediator always acts as base PEP
// then behavior for not-applicable and indeterminate results are undefined
// but here assume to be deny
if("Permit".equals(simpleDecision) || "Deny".equals(simpleDecision)){
MessageContext obligationsSynCtx = null;
MessageContext adviceSynCtx = null;
// 1st check for advice
if(advice != null){
adviceSynCtx = getOMElementInserted(advice,getClonedMessageContext(synCtx));
if(adviceSeqKey != null){
SequenceMediator sequence = (SequenceMediator) adviceSynCtx.getSequence(adviceSeqKey);
// Clear the continuation stack. So adviceSynCtx will not flow through the
// rest of the mediators place in this flow
ContinuationStackManager.clearStack(adviceSynCtx);
adviceSynCtx.getEnvironment().injectAsync(adviceSynCtx, sequence);
} else if(adviceMediator != null) {
ContinuationStackManager.
addReliantContinuationState(adviceSynCtx, 0, getMediatorPosition());
adviceSynCtx.getEnvironment().injectAsync(adviceSynCtx, (SequenceMediator) adviceMediator);
}
}
if(obligations != null){
obligationsSynCtx = getOMElementInserted(obligations,getClonedMessageContext(synCtx));
boolean result;
if (obligationsSeqKey != null) {
ContinuationStackManager.
addReliantContinuationState(obligationsSynCtx, 1, getMediatorPosition());
obligationsSynCtx.setProperty(ContinuationStackManager.SKIP_CONTINUATION_STATE, true);
result = obligationsSynCtx.getSequence(obligationsSeqKey).
mediate(obligationsSynCtx);
Boolean isContinuationCall =
(Boolean) obligationsSynCtx.getProperty(SynapseConstants.CONTINUATION_CALL);
if (result) {
ContinuationStackManager.removeReliantContinuationState(obligationsSynCtx);
} else if (!result && isContinuationCall != null && isContinuationCall) {
// If result is false due to presence of a Call mediator, stop the flow
return false;
}
} else {
ContinuationStackManager.
addReliantContinuationState(obligationsSynCtx, 2, getMediatorPosition());
result = obligationsMediator.mediate(obligationsSynCtx);
Boolean isContinuationCall =
(Boolean) obligationsSynCtx.getProperty(SynapseConstants.CONTINUATION_CALL);
if (result) {
ContinuationStackManager.removeReliantContinuationState(obligationsSynCtx);
} else if (!result && isContinuationCall != null && isContinuationCall) {
// If result is false due to presence of a Call mediator, stop the flow
return false;
}
}
if (!result) {
// if return false, obligations are not correctly performed.
// So message is mediated through the OnReject sequence
if (log.isDebugEnabled()) {
log.debug("Obligations are not correctly performed");
}
simpleDecision = "Deny";
}
}
}
return executeDecisionMessageFlow(synCtx, simpleDecision);
} catch (SynapseException e){
log.error(e);
throw e;
} catch (Exception e) {
log.error("Error occurred while evaluating the policy", e);
throw new SynapseException("Error occurred while evaluating the policy");
}
}
private boolean executeDecisionMessageFlow(MessageContext synCtx, String simpleDecision) {
if ("Permit".equals(simpleDecision)) {
if (log.isDebugEnabled()) {
log.debug("User is authorized to perform the action");
}
if (onAcceptSeqKey != null) {
ContinuationStackManager.updateSeqContinuationState(synCtx, getMediatorPosition());
return synCtx.getSequence(onAcceptSeqKey).mediate(synCtx);
} else if (onAcceptMediator != null) {
ContinuationStackManager.addReliantContinuationState(synCtx, 3, getMediatorPosition());
boolean result = onAcceptMediator.mediate(synCtx);
if (result) {
ContinuationStackManager.removeReliantContinuationState(synCtx);
}
return result;
} else {
if (log.isDebugEnabled()) {
log.debug("OnAccept sequence is not defined.");
}
return true;
}
} else {
if (log.isDebugEnabled()) {
log.debug("User is not authorized to perform the action");
}
if (onRejectSeqKey != null) {
ContinuationStackManager.updateSeqContinuationState(synCtx, getMediatorPosition());
return synCtx.getSequence(onRejectSeqKey).mediate(synCtx);
} else if (onRejectMediator != null) {
ContinuationStackManager.addReliantContinuationState(synCtx, 4, getMediatorPosition());
boolean result = onRejectMediator.mediate(synCtx);
if (result) {
ContinuationStackManager.removeReliantContinuationState(synCtx);
}
return result;
} else {
if (log.isDebugEnabled()) {
log.debug("OnReject sequence is not defined.");
}
throw new SynapseException("User is not authorized to perform the action");
}
}
}
public boolean mediate(MessageContext synCtx,
ContinuationState continuationState) {
SynapseLog synLog = getLog(synCtx);
if (synLog.isTraceOrDebugEnabled()) {
synLog.traceOrDebug("Entitlement mediator : Mediating from ContinuationState");
}
boolean result = false;
int subBranch = ((ReliantContinuationState) continuationState).getSubBranch();
if (subBranch == 0) { // For Advice mediator
if (!continuationState.hasChild()) {
result = ((SequenceMediator) adviceMediator).mediate(synCtx, continuationState.getPosition() + 1);
if (result) {
// Stop the flow after executing all the mediators
ContinuationStackManager.clearStack(synCtx);
return false;
}
} else {
FlowContinuableMediator mediator =
(FlowContinuableMediator)
((SequenceMediator) adviceMediator).getChild(continuationState.getPosition());
result = mediator.mediate(synCtx, continuationState.getChildContState());
}
} else if (subBranch == 1 || subBranch == 2) { // For Obligation
SequenceMediator sequenceMediator;
if (subBranch == 1) {
sequenceMediator = (SequenceMediator) synCtx.getSequence(obligationsSeqKey);
} else {
sequenceMediator = (SequenceMediator) obligationsMediator;
}
if (!continuationState.hasChild()) {
result = sequenceMediator.mediate(synCtx, continuationState.getPosition() + 1);
Boolean isContinuationCall =
(Boolean) synCtx.getProperty(SynapseConstants.CONTINUATION_CALL);
if (!result && isContinuationCall != null && isContinuationCall) {
// If result is false due to presence of a Call mediator, stop the flow
return false;
} else {
ContinuationStackManager.removeReliantContinuationState(synCtx);
String decision = (String) synCtx.getProperty(ENTITLEMENT_DECISION);
if (!result) {
decision = "Deny";
}
// Set back the original payload
OMElement originalEnv =
(OMElement) synCtx.getProperty(ORIGINAL_ENTITLEMENT_PAYLOAD);
try {
synCtx.setEnvelope(AXIOMUtils.getSOAPEnvFromOM(originalEnv));
} catch (AxisFault axisFault) {
handleException("Error while setting the original envelope back", synCtx);
}
result = executeDecisionMessageFlow(synCtx, decision);
if (result) {
// Just adding a dummy state back, which will be removed at the Sequence when returning.
ContinuationStackManager.addReliantContinuationState(synCtx, 1,
getMediatorPosition());
}
}
} else {
FlowContinuableMediator mediator =
(FlowContinuableMediator) sequenceMediator.getChild(continuationState.getPosition());
result = mediator.mediate(synCtx, continuationState.getChildContState());
}
} else if (subBranch == 3) { // For onAcceptMediator
if (!continuationState.hasChild()) {
result = ((SequenceMediator) onAcceptMediator).mediate(synCtx, continuationState.getPosition() + 1);
} else {
FlowContinuableMediator mediator =
(FlowContinuableMediator)
((SequenceMediator) onAcceptMediator).getChild(continuationState.getPosition());
result = mediator.mediate(synCtx, continuationState.getChildContState());
}
} else if (subBranch == 4) { // For onReject Mediator
if (!continuationState.hasChild()) {
result = ((SequenceMediator) onRejectMediator).mediate(synCtx, continuationState.getPosition() + 1);
} else {
FlowContinuableMediator mediator =
(FlowContinuableMediator)
((SequenceMediator) onRejectMediator).getChild(continuationState.getPosition());
result = mediator.mediate(synCtx, continuationState.getChildContState());
}
}
return result;
}
/**
*
* @param url
* @param config
* @return
*/
private static String getServerURL(String url, ConfigurationContext config) {
if (url.indexOf("${carbon.https.port}") != -1) {
String httpsPort = CarbonUtils.getTransportPort(config, "https") + "";
url = url.replace("${carbon.https.port}", httpsPort);
}
if (url.indexOf("${carbon.management.port}") != -1) {
String httpsPort = CarbonUtils.getTransportPort(config, "https") + "";
url = url.replace("${carbon.management.port}", httpsPort);
}
if (url.indexOf("${carbon.context}") != -1) {
// We need not to worry about context here - just need the server url for logging
url = url.replace("${carbon.context}", "");
}
return url;
}
private Object loadClass(String className) throws AxisFault {
try {
Class clazz = Thread.currentThread().getContextClassLoader().loadClass(className);
return clazz.newInstance();
} catch (Exception e) {
log.error("Error occurred while loading " + className, e);
}
return null;
}
public void init(SynapseEnvironment synEnv) {
try {
if (callbackClass != null && callbackClass.trim().length() > 0) {
Object loadedClass = loadClass(callbackClass);
if(loadedClass instanceof EntitlementCallbackHandler){
callback = (EntitlementCallbackHandler) loadedClass;
}
} else {
callback = new UTEntitlementCallbackHandler();
}
Map<String,Map<String,String>> appToPDPClientConfigMap = new HashMap<String, Map<String,String>>();
Map<String,String> clientConfigMap = new HashMap<String, String>();
if(client !=null && client.equals(EntitlementConstants.SOAP)){
clientConfigMap.put(EntitlementConstants.CLIENT, client);
clientConfigMap.put(EntitlementConstants.SERVER_URL, remoteServiceUrl);
clientConfigMap.put(EntitlementConstants.USERNAME, remoteServiceUserName);
clientConfigMap.put(EntitlementConstants.PASSWORD, remoteServicePassword);
clientConfigMap.put(EntitlementConstants.REUSE_SESSION, reuseSession);
}else if(client !=null && client.equals(EntitlementConstants.BASIC_AUTH)){
clientConfigMap.put(EntitlementConstants.CLIENT, client);
clientConfigMap.put(EntitlementConstants.SERVER_URL, remoteServiceUrl);
clientConfigMap.put(EntitlementConstants.USERNAME, remoteServiceUserName);
clientConfigMap.put(EntitlementConstants.PASSWORD, remoteServicePassword);
}else if(client !=null && client.equals(EntitlementConstants.THRIFT)){
clientConfigMap.put(EntitlementConstants.CLIENT, client);
clientConfigMap.put(EntitlementConstants.SERVER_URL, remoteServiceUrl);
clientConfigMap.put(EntitlementConstants.USERNAME, remoteServiceUserName);
clientConfigMap.put(EntitlementConstants.PASSWORD, remoteServicePassword);
clientConfigMap.put(EntitlementConstants.REUSE_SESSION, reuseSession);
clientConfigMap.put(EntitlementConstants.THRIFT_HOST, thriftHost);
clientConfigMap.put(EntitlementConstants.THRIFT_PORT, thriftPort);
} else if(client !=null && client.equals(EntitlementConstants.WS_XACML)){
clientConfigMap.put(EntitlementConstants.CLIENT, client);
clientConfigMap.put(EntitlementConstants.SERVER_URL, remoteServiceUrl);
clientConfigMap.put(EntitlementConstants.USERNAME, remoteServiceUserName);
clientConfigMap.put(EntitlementConstants.PASSWORD, remoteServicePassword);
}else if(client == null){
clientConfigMap.put(EntitlementConstants.SERVER_URL, remoteServiceUrl);
clientConfigMap.put(EntitlementConstants.USERNAME, remoteServiceUserName);
clientConfigMap.put(EntitlementConstants.PASSWORD, remoteServicePassword);
} else {
log.error("EntitlementMediator initialization error: Unsupported client");
throw new SynapseException("EntitlementMediator initialization error: Unsupported client");
}
appToPDPClientConfigMap.put("EntitlementMediator", clientConfigMap);
PEPProxyConfig config = new PEPProxyConfig(appToPDPClientConfigMap,"EntitlementMediator", cacheType, invalidationInterval, maxCacheEntries);
try {
pepProxy = new PEPProxy(config);
} catch (EntitlementProxyException e) {
log.error("Error while initializing the PEP Proxy" + e);
throw new SynapseException("Error while initializing the Entitlement PEP Proxy");
}
if (onAcceptMediator instanceof ManagedLifecycle) {
((ManagedLifecycle) onAcceptMediator).init(synEnv);
}
if (onRejectMediator instanceof ManagedLifecycle) {
((ManagedLifecycle) onRejectMediator).init(synEnv);
}
if (obligationsMediator instanceof ManagedLifecycle) {
((ManagedLifecycle) obligationsMediator).init(synEnv);
}
if (adviceMediator instanceof ManagedLifecycle) {
((ManagedLifecycle) adviceMediator).init(synEnv);
}
} catch (AxisFault e) {
String msg = "Error initializing entitlement mediator : " + e.getMessage();
log.error(msg, e);
throw new SynapseException(msg, e);
}
}
@Override
public void destroy() {
remoteServiceUserName = null;
remoteServicePassword = null;
remoteServiceUrl = null;
callbackClass = null;
client = null;
thriftPort = null;
thriftHost = null;
reuseSession = null;
cacheType = null;
callback = null;
onRejectSeqKey = null;
onAcceptSeqKey = null;
obligationsSeqKey = null;
adviceSeqKey = null;
pepProxy = null;
if (onAcceptMediator instanceof ManagedLifecycle) {
((ManagedLifecycle) onAcceptMediator).destroy();
}
if (onRejectMediator instanceof ManagedLifecycle) {
((ManagedLifecycle) onRejectMediator).destroy();
}
if (obligationsMediator instanceof ManagedLifecycle) {
((ManagedLifecycle) obligationsMediator).destroy();
}
if (adviceMediator instanceof ManagedLifecycle) {
((ManagedLifecycle) adviceMediator).destroy();
}
}
/**
* Clone the provided message context
*
* @param synCtx - MessageContext which is subjected to the cloning
*
* @return MessageContext the cloned message context
*/
private MessageContext getClonedMessageContext(MessageContext synCtx) {
MessageContext newCtx = null;
try {
newCtx = MessageHelper.cloneMessageContext(synCtx);
// Set isServerSide property in the cloned message context
((Axis2MessageContext) newCtx).getAxis2MessageContext().setServerSide(
((Axis2MessageContext) synCtx).getAxis2MessageContext().isServerSide());
} catch (AxisFault axisFault) {
handleException("Error cloning the message context", axisFault, synCtx);
}
return newCtx;
}
/**
* Create a new SOAP envelope and insert the
* the given omElement into its body.
*
* @param synCtx - original message context
* @return newCtx created by the iteration
* @throws AxisFault if there is a message creation failure
* @throws JaxenException if the expression evauation failure
*/
private MessageContext getOMElementInserted(OMElement omElement, MessageContext synCtx)
throws AxisFault, JaxenException {
Iterator<OMNode> children = synCtx.getEnvelope().getBody().getChildren();
while(children.hasNext()){
children.next().detach();
}
synCtx.getEnvelope().getBody().addChild(omElement);
return synCtx;
}
/* Creating a soap response according the the soap namespce uri */
private SOAPEnvelope createDefaultSOAPEnvelope(MessageContext inMsgCtx) {
String soapNamespace = inMsgCtx.getEnvelope().getNamespace()
.getNamespaceURI();
SOAPFactory soapFactory = null;
if (soapNamespace.equals(SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI)) {
soapFactory = OMAbstractFactory.getSOAP11Factory();
} else if (soapNamespace
.equals(SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI)) {
soapFactory = OMAbstractFactory.getSOAP12Factory();
} else {
log.error("Unknown SOAP Envelope");
}
return soapFactory.getDefaultEnvelope();
}
public String getCallbackClass() {
return callbackClass;
}
public void setCallbackClass(String callbackClass) {
this.callbackClass = callbackClass;
}
public String getRemoteServiceUserName() {
return remoteServiceUserName;
}
public void setRemoteServiceUserName(String remoteServiceUserName) {
this.remoteServiceUserName = remoteServiceUserName;
}
public String getRemoteServicePassword() {
if (!remoteServicePassword.startsWith("enc:")) {
try {
return "enc:"
+ CryptoUtil.getDefaultCryptoUtil().encryptAndBase64Encode(
remoteServicePassword.getBytes());
} catch (CryptoException e) {
log.error(e);
}
}
return remoteServicePassword;
}
public void setRemoteServicePassword(String remoteServicePassword) {
if (remoteServicePassword.startsWith("enc:")) {
try {
this.remoteServicePassword = new String(CryptoUtil.getDefaultCryptoUtil()
.base64DecodeAndDecrypt(remoteServicePassword.substring(4)));
} catch (CryptoException e) {
log.error(e);
}
} else {
this.remoteServicePassword = remoteServicePassword;
}
}
public String getRemoteServiceUrl() {
return remoteServiceUrl;
}
public void setRemoteServiceUrl(String remoteServiceUrl) {
this.remoteServiceUrl = remoteServiceUrl;
}
public String getCacheType() {
return cacheType;
}
public void setCacheType(String cacheType) {
this.cacheType = cacheType;
}
public int getInvalidationInterval() {
return invalidationInterval;
}
public void setInvalidationInterval(int invalidationInterval) {
this.invalidationInterval = invalidationInterval;
}
public int getMaxCacheEntries() {
return maxCacheEntries;
}
public void setMaxCacheEntries(int maxCacheEntries) {
this.maxCacheEntries = maxCacheEntries;
}
public String getClient() {
return client;
}
public void setClient(String client) {
this.client = client;
}
public String getThriftPort() {
return thriftPort;
}
public void setThriftPort(String thriftPort) {
this.thriftPort = thriftPort;
}
public String getThriftHost() {
return thriftHost;
}
public void setThriftHost(String thriftHost) {
this.thriftHost = thriftHost;
}
public String getReuseSession() {
return reuseSession;
}
public void setReuseSession(String reuseSession) {
this.reuseSession = reuseSession;
}
public String getOnRejectSeqKey() {
return onRejectSeqKey;
}
public void setOnRejectMediator(Mediator onRejectMediator) {
this.onRejectMediator = onRejectMediator;
}
public String getOnAcceptSeqKey() {
return onAcceptSeqKey;
}
public void setOnAcceptMediator(Mediator onAcceptMediator) {
this.onAcceptMediator = onAcceptMediator;
}
public Mediator getOnRejectMediator() {
return onRejectMediator;
}
public void setOnRejectSeqKey(String onRejectSeqKey) {
this.onRejectSeqKey = onRejectSeqKey;
}
public Mediator getOnAcceptMediator() {
return onAcceptMediator;
}
public void setOnAcceptSeqKey(String onAcceptSeqKey) {
this.onAcceptSeqKey = onAcceptSeqKey;
}
public String getObligationsSeqKey() {
return obligationsSeqKey;
}
public void setObligationsMediator(Mediator obligationsMediator) {
this.obligationsMediator = obligationsMediator;
}
public Mediator getObligationsMediator() {
return obligationsMediator;
}
public void setObligationsSeqKey(String obligationsSeqKey) {
this.obligationsSeqKey = obligationsSeqKey;
}
public Mediator getAdviceMediator() {
return adviceMediator;
}
public void setAdviceMediator(Mediator adviceMediator) {
this.adviceMediator = adviceMediator;
}
public String getAdviceSeqKey() {
return adviceSeqKey;
}
public void setAdviceSeqKey(String adviceSeqKey) {
this.adviceSeqKey = adviceSeqKey;
}
@Override
public Mediator getInlineSequence(SynapseConfiguration synCfg, int inlinedSeqIdentifier) {
if (inlinedSeqIdentifier == 0) {
if (onRejectMediator != null) {
return onRejectMediator;
} else if (onRejectSeqKey != null) {
return synCfg.getSequence(onRejectSeqKey);
}
} else if (inlinedSeqIdentifier == 1) {
if (onAcceptMediator != null) {
return onAcceptMediator;
} else if (onAcceptSeqKey != null) {
return synCfg.getSequence(onAcceptSeqKey);
}
} else if (inlinedSeqIdentifier == 2) {
if (obligationsMediator != null) {
return obligationsMediator;
} else if (obligationsSeqKey != null) {
return synCfg.getSequence(obligationsSeqKey);
}
} else if (inlinedSeqIdentifier == 3) {
if (adviceMediator != null) {
return adviceMediator;
} else if (adviceSeqKey != null) {
return synCfg.getSequence(adviceSeqKey);
}
}
return null;
}
}