Search in sources :

Example 21 with Value

use of org.apache.synapse.mediators.Value in project wso2-synapse by wso2.

the class EJBMediatorSerializer method serializeSpecificMediator.

public OMElement serializeSpecificMediator(Mediator m) {
    if (!(m instanceof EJBMediator)) {
        handleException("An unsupported mediator was passed in for serialization : " + m.getType());
        return null;
    }
    EJBMediator mediator = (EJBMediator) m;
    OMElement mediatorElem = fac.createOMElement(EJB, synNS);
    saveTracingState(mediatorElem, mediator);
    if (mediator.getBeanstalkName() != null) {
        mediatorElem.addAttribute(fac.createOMAttribute(EJBConstants.BEANSTALK, nullNS, mediator.getBeanstalkName()));
    } else {
        handleException();
    }
    if (mediator.getClassName() != null) {
        mediatorElem.addAttribute(fac.createOMAttribute(BeanConstants.CLASS, nullNS, mediator.getClassName()));
    } else {
        handleException();
    }
    if (mediator.getBeanId() != null) {
        mediatorElem.addAttribute(fac.createOMAttribute(EJBConstants.STATEFUL, nullNS, Boolean.toString(true)));
        new ValueSerializer().serializeValue(mediator.getBeanId(), EJBConstants.BEAN_ID, mediatorElem);
    }
    if (mediator.getMethod() != null) {
        mediatorElem.addAttribute(fac.createOMAttribute(EJBConstants.METHOD, nullNS, mediator.getMethod().getName()));
    } else if (!mediator.isRemove()) {
        handleException();
    }
    if (mediator.getTarget() != null) {
        mediator.getTarget().serializeTarget(BeanConstants.TARGET, mediatorElem);
    }
    if (mediator.getJndiName() != null) {
        mediatorElem.addAttribute(fac.createOMAttribute(EJBConstants.JNDI_NAME, nullNS, mediator.getJndiName()));
    }
    if (mediator.isRemove()) {
        mediatorElem.addAttribute(fac.createOMAttribute(EJBConstants.REMOVE, nullNS, Boolean.toString(true)));
    }
    List<Value> argList = mediator.getArgumentList();
    if (argList != null && argList.size() > 0) {
        OMElement argumentsElem = fac.createOMElement(EJBConstants.ARGS, synNS);
        for (Value arg : argList) {
            OMElement argElem = fac.createOMElement(EJBConstants.ARG, synNS);
            new ValueSerializer().serializeValue(arg, BeanConstants.VALUE, argElem);
            argumentsElem.addChild(argElem);
        }
        mediatorElem.addChild(argumentsElem);
    }
    return mediatorElem;
}
Also used : Value(org.apache.synapse.mediators.Value) OMElement(org.apache.axiom.om.OMElement) EJBMediator(org.apache.synapse.mediators.bean.enterprise.EJBMediator)

Example 22 with Value

use of org.apache.synapse.mediators.Value in project wso2-synapse by wso2.

the class InvokeMediatorSerializer method serializeParams.

private void serializeParams(OMElement invokeElem, InvokeMediator mediator) {
    Map<String, Value> paramsMap = mediator.getpName2ExpressionMap();
    Iterator<String> paramIterator = paramsMap.keySet().iterator();
    while (paramIterator.hasNext()) {
        String paramName = paramIterator.next();
        if (!"".equals(paramName)) {
            if (mediator.isDynamicMediator()) {
                OMElement paramEl = fac.createOMElement(paramName, synNS);
                Value value = paramsMap.get(paramName);
                new ValueSerializer().serializeTextValue(value, "value", paramEl);
                invokeElem.addChild(paramEl);
            } else {
                String prefix = mediator.isDynamicMediator() ? InvokeMediatorFactory.WITH_PARAM_DYNAMIC_Q.getLocalPart() : InvokeMediatorFactory.WITH_PARAM_Q.getLocalPart();
                OMElement paramEl = fac.createOMElement(prefix, synNS);
                paramEl.addAttribute(fac.createOMAttribute("name", nullNS, paramName));
                // serialize value attribute
                Value value = paramsMap.get(paramName);
                new ValueSerializer().serializeValue(value, "value", paramEl);
                invokeElem.addChild(paramEl);
            }
        }
    }
}
Also used : Value(org.apache.synapse.mediators.Value) OMElement(org.apache.axiom.om.OMElement)

Example 23 with Value

use of org.apache.synapse.mediators.Value in project wso2-synapse by wso2.

the class TemplateMessageExecutor method buildParameters.

private void buildParameters(OMElement elem) {
    Iterator subElements = elem.getChildElements();
    while (subElements.hasNext()) {
        OMElement child = (OMElement) subElements.next();
        Value paramValue = new ValueFactory().createTextValue(child);
        invoker.addExpressionForParamName(child.getLocalName(), paramValue);
    }
}
Also used : Iterator(java.util.Iterator) Value(org.apache.synapse.mediators.Value) OMElement(org.apache.axiom.om.OMElement) ValueFactory(org.apache.synapse.config.xml.ValueFactory)

Example 24 with Value

use of org.apache.synapse.mediators.Value in project wso2-synapse by wso2.

the class ScriptMediator method prepareExternalScript.

/**
 * Prepares the mediator for the invocation of an external script
 *
 * @param synCtx MessageContext script
 * @throws ScriptException For any errors , when compile the script
 */
protected ScriptEngineWrapper prepareExternalScript(MessageContext synCtx) throws ScriptException {
    // Derive actual key from xpath expression or get static key
    String generatedScriptKey = key.evaluateValue(synCtx);
    Entry entry = synCtx.getConfiguration().getEntryDefinition(generatedScriptKey);
    boolean needsReload = (entry != null) && entry.isDynamic() && (!entry.isCached() || entry.isExpired());
    ScriptEngineWrapper sew = getNewScriptEngine();
    Bindings engineBinding = sew.getEngine().getBindings(ScriptContext.ENGINE_SCOPE);
    // if we don't do this, previous state can affect successive executions! ESBJAVA-4583
    engineBinding.clear();
    if (scriptSourceCode == null || needsReload || !sew.isInitialized()) {
        Object o = synCtx.getEntry(generatedScriptKey);
        if (o instanceof OMElement) {
            scriptSourceCode = ((OMElement) (o)).getText();
            sew.getEngine().eval(scriptSourceCode, engineBinding);
        } else if (o instanceof String) {
            scriptSourceCode = (String) o;
            sew.getEngine().eval(scriptSourceCode, engineBinding);
        } else if (o instanceof OMText) {
            DataHandler dataHandler = (DataHandler) ((OMText) o).getDataHandler();
            if (dataHandler != null) {
                BufferedReader reader = null;
                try {
                    reader = new BufferedReader(new InputStreamReader(dataHandler.getInputStream()));
                    StringBuilder scriptSB = new StringBuilder();
                    String currentLine;
                    while ((currentLine = reader.readLine()) != null) {
                        scriptSB.append(currentLine).append('\n');
                    }
                    scriptSourceCode = scriptSB.toString();
                    sew.getEngine().eval(scriptSourceCode, engineBinding);
                } catch (IOException e) {
                    handleException("Error in reading script as a stream ", e, synCtx);
                } finally {
                    if (reader != null) {
                        try {
                            reader.close();
                        } catch (IOException e) {
                            handleException("Error in closing input stream ", e, synCtx);
                        }
                    }
                }
            }
        }
    } else {
        // Will drop TPS, but is required for ESBJAVA-4583
        sew.getEngine().eval(scriptSourceCode, engineBinding);
    }
    // load <include /> scripts; reload each script if needed
    for (Value includeKey : includes.keySet()) {
        String includeSourceCode = (String) includes.get(includeKey);
        String generatedKey = includeKey.evaluateValue(synCtx);
        Entry includeEntry = synCtx.getConfiguration().getEntryDefinition(generatedKey);
        boolean includeEntryNeedsReload = (includeEntry != null) && includeEntry.isDynamic() && (!includeEntry.isCached() || includeEntry.isExpired());
        if (includeSourceCode == null || includeEntryNeedsReload || !sew.isInitialized()) {
            log.debug("Re-/Loading the include script with key " + includeKey);
            Object o = synCtx.getEntry(generatedKey);
            if (o instanceof OMElement) {
                includeSourceCode = ((OMElement) (o)).getText();
                sew.getEngine().eval(includeSourceCode, engineBinding);
            } else if (o instanceof String) {
                includeSourceCode = (String) o;
                sew.getEngine().eval(includeSourceCode, engineBinding);
            } else if (o instanceof OMText) {
                DataHandler dataHandler = (DataHandler) ((OMText) o).getDataHandler();
                if (dataHandler != null) {
                    BufferedReader reader = null;
                    try {
                        reader = new BufferedReader(new InputStreamReader(dataHandler.getInputStream()));
                        StringBuilder scriptSB = new StringBuilder();
                        String currentLine;
                        while ((currentLine = reader.readLine()) != null) {
                            scriptSB.append(currentLine).append('\n');
                        }
                        includeSourceCode = scriptSB.toString();
                        sew.getEngine().eval(includeSourceCode, engineBinding);
                    } catch (IOException e) {
                        handleException("Error in reading script as a stream ", e, synCtx);
                    } finally {
                        if (reader != null) {
                            try {
                                reader.close();
                            } catch (IOException e) {
                                handleException("Error in closing input" + " stream ", e, synCtx);
                            }
                        }
                    }
                }
            }
            includes.put(includeKey, includeSourceCode);
        } else {
            // Will drop TPS, but required for ESBJAVA-4583
            sew.getEngine().eval(includeSourceCode, engineBinding);
        }
    }
    sew.setInitialized(true);
    return sew;
}
Also used : InputStreamReader(java.io.InputStreamReader) OMElement(org.apache.axiom.om.OMElement) DataHandler(javax.activation.DataHandler) IOException(java.io.IOException) Bindings(javax.script.Bindings) Entry(org.apache.synapse.config.Entry) OMText(org.apache.axiom.om.OMText) BufferedReader(java.io.BufferedReader) Value(org.apache.synapse.mediators.Value)

Example 25 with Value

use of org.apache.synapse.mediators.Value in project wso2-synapse by wso2.

the class ScriptMediatorFactory method createSpecificMediator.

public Mediator createSpecificMediator(OMElement elem, Properties properties) {
    ScriptMediator mediator;
    ClassLoader classLoader = (ClassLoader) properties.get(SynapseConstants.SYNAPSE_LIB_LOADER);
    OMAttribute keyAtt = elem.getAttribute(new QName(XMLConfigConstants.NULL_NAMESPACE, "key"));
    OMAttribute langAtt = elem.getAttribute(new QName(XMLConfigConstants.NULL_NAMESPACE, "language"));
    OMAttribute functionAtt = elem.getAttribute(new QName(XMLConfigConstants.NULL_NAMESPACE, "function"));
    if (langAtt == null) {
        throw new SynapseException("The 'language' attribute is required for" + " a script mediator");
    // TODO: couldn't this be determined from the key in some scenarios?
    }
    if (keyAtt == null && functionAtt != null) {
        throw new SynapseException("Cannot use 'function' attribute without 'key' " + "attribute for a script mediator");
    }
    Map<Value, Object> includeKeysMap = getIncludeKeysMap(elem);
    if (keyAtt != null) {
        // ValueFactory for creating dynamic or static Key
        ValueFactory keyFac = new ValueFactory();
        // create dynamic or static key based on OMElement
        Value generatedKey = keyFac.createValue(XMLConfigConstants.KEY, elem);
        String functionName = (functionAtt == null ? null : functionAtt.getAttributeValue());
        mediator = new ScriptMediator(langAtt.getAttributeValue(), includeKeysMap, generatedKey, functionName, classLoader);
    } else {
        mediator = new ScriptMediator(langAtt.getAttributeValue(), elem.getText(), classLoader);
    }
    processAuditStatus(mediator, elem);
    return mediator;
}
Also used : SynapseException(org.apache.synapse.SynapseException) QName(javax.xml.namespace.QName) Value(org.apache.synapse.mediators.Value) ValueFactory(org.apache.synapse.config.xml.ValueFactory) OMAttribute(org.apache.axiom.om.OMAttribute)

Aggregations

Value (org.apache.synapse.mediators.Value)38 OMElement (org.apache.axiom.om.OMElement)18 OMAttribute (org.apache.axiom.om.OMAttribute)12 QName (javax.xml.namespace.QName)9 SynapseXPath (org.apache.synapse.util.xpath.SynapseXPath)9 SynapseException (org.apache.synapse.SynapseException)7 Iterator (java.util.Iterator)6 Axis2MessageContext (org.apache.synapse.core.axis2.Axis2MessageContext)6 JaxenException (org.jaxen.JaxenException)6 MessageContext (org.apache.synapse.MessageContext)5 Entry (org.apache.synapse.config.Entry)5 ValueFactory (org.apache.synapse.config.xml.ValueFactory)5 Test (org.junit.Test)4 DataHandler (javax.activation.DataHandler)3 OMText (org.apache.axiom.om.OMText)3 Endpoint (org.apache.synapse.endpoints.Endpoint)3 IOException (java.io.IOException)2 InputStreamReader (java.io.InputStreamReader)2 ArrayList (java.util.ArrayList)2 List (java.util.List)2