Search in sources :

Example 1 with IbisException

use of nl.nn.adapterframework.core.IbisException in project iaf by ibissource.

the class Parameter method getValue.

/**
 * determines the raw value
 * @param alreadyResolvedParameters
 * @return the raw value as object
 * @throws IbisException
 */
public Object getValue(ParameterValueList alreadyResolvedParameters, ParameterResolutionContext prc) throws ParameterException {
    Object result = null;
    log.debug("Calculating value for Parameter [" + getName() + "]");
    if (!configured) {
        throw new ParameterException("Parameter [" + getName() + "] not configured");
    }
    String retrievedSessionKey;
    if (transformerPoolSessionKey != null) {
        try {
            retrievedSessionKey = transformerPoolSessionKey.transform(prc.getInput(), null);
        } catch (Exception e) {
            throw new ParameterException("SessionKey for parameter [" + getName() + "] exception on transformation to get name", e);
        }
    } else {
        retrievedSessionKey = getSessionKey();
    }
    TransformerPool pool = getTransformerPool();
    if (pool != null) {
        try {
            Object transformResult = null;
            Source source = null;
            if (StringUtils.isNotEmpty(getValue())) {
                source = XmlUtils.stringToSourceForSingleUse(getValue(), prc.isNamespaceAware());
            } else if (StringUtils.isNotEmpty(retrievedSessionKey)) {
                String sourceString;
                Object sourceObject = prc.getSession().get(retrievedSessionKey);
                if (TYPE_LIST.equals(getType()) && sourceObject instanceof List) {
                    List<String> items = (List<String>) sourceObject;
                    XmlBuilder itemsXml = new XmlBuilder("items");
                    for (Iterator<String> it = items.iterator(); it.hasNext(); ) {
                        String item = it.next();
                        XmlBuilder itemXml = new XmlBuilder("item");
                        itemXml.setValue(item);
                        itemsXml.addSubElement(itemXml);
                    }
                    sourceString = itemsXml.toXML();
                } else if (TYPE_MAP.equals(getType()) && sourceObject instanceof Map) {
                    Map<String, String> items = (Map<String, String>) sourceObject;
                    XmlBuilder itemsXml = new XmlBuilder("items");
                    for (Iterator<String> it = items.keySet().iterator(); it.hasNext(); ) {
                        String item = it.next();
                        XmlBuilder itemXml = new XmlBuilder("item");
                        itemXml.addAttribute("name", item);
                        itemXml.setValue(items.get(item));
                        itemsXml.addSubElement(itemXml);
                    }
                    sourceString = itemsXml.toXML();
                } else {
                    sourceString = (String) sourceObject;
                }
                if (StringUtils.isNotEmpty(sourceString)) {
                    log.debug("Parameter [" + getName() + "] using sessionvariable [" + retrievedSessionKey + "] as source for transformation");
                    source = XmlUtils.stringToSourceForSingleUse(sourceString, prc.isNamespaceAware());
                } else {
                    log.debug("Parameter [" + getName() + "] sessionvariable [" + retrievedSessionKey + "] empty, no transformation will be performed");
                }
            } else if (StringUtils.isNotEmpty(getPattern())) {
                String sourceString = format(alreadyResolvedParameters, prc);
                if (StringUtils.isNotEmpty(sourceString)) {
                    log.debug("Parameter [" + getName() + "] using pattern [" + getPattern() + "] as source for transformation");
                    source = XmlUtils.stringToSourceForSingleUse(sourceString, prc.isNamespaceAware());
                } else {
                    log.debug("Parameter [" + getName() + "] pattern [" + getPattern() + "] empty, no transformation will be performed");
                }
            } else {
                source = prc.getInputSource();
            }
            if (source != null) {
                if (transformerPoolRemoveNamespaces != null) {
                    String rnResult = transformerPoolRemoveNamespaces.transform(source, null);
                    source = XmlUtils.stringToSource(rnResult);
                }
                transformResult = transform(source, prc);
            }
            if (!(transformResult instanceof String) || StringUtils.isNotEmpty((String) transformResult)) {
                result = transformResult;
            }
        } catch (Exception e) {
            throw new ParameterException("Parameter [" + getName() + "] exception on transformation to get parametervalue", e);
        }
    } else {
        if (StringUtils.isNotEmpty(retrievedSessionKey)) {
            result = prc.getSession().get(retrievedSessionKey);
        } else if (StringUtils.isNotEmpty(getPattern())) {
            result = format(alreadyResolvedParameters, prc);
        } else if (StringUtils.isNotEmpty(getValue())) {
            result = getValue();
        } else {
            result = prc.getInput();
        }
    }
    if (result != null) {
        if (log.isDebugEnabled()) {
            log.debug("Parameter [" + getName() + "] resolved to [" + (isHidden() ? hide(result.toString()) : result) + "]");
        }
    } else {
        // if value is null then return specified default value
        StringTokenizer stringTokenizer = new StringTokenizer(getDefaultValueMethods(), ",");
        while (result == null && stringTokenizer.hasMoreElements()) {
            String token = stringTokenizer.nextToken();
            if ("defaultValue".equals(token)) {
                result = getDefaultValue();
            } else if ("sessionKey".equals(token)) {
                result = prc.getSession().get(retrievedSessionKey);
            } else if ("pattern".equals(token)) {
                result = format(alreadyResolvedParameters, prc);
            } else if ("value".equals(token)) {
                result = getValue();
            } else if ("input".equals(token)) {
                result = prc.getInput();
            }
        }
        log.debug("Parameter [" + getName() + "] resolved to defaultvalue [" + (isHidden() ? hide(result.toString()) : result) + "]");
    }
    if (result != null && result instanceof String) {
        if (getMinLength() >= 0 && !TYPE_NUMBER.equals(getType())) {
            if (result.toString().length() < getMinLength()) {
                log.debug("Padding parameter [" + getName() + "] because length [" + result.toString().length() + "] deceeds minLength [" + getMinLength() + "]");
                result = StringUtils.rightPad(result.toString(), getMinLength());
            }
        }
        if (getMaxLength() >= 0) {
            if (result.toString().length() > getMaxLength()) {
                log.debug("Trimming parameter [" + getName() + "] because length [" + result.toString().length() + "] exceeds maxLength [" + getMaxLength() + "]");
                result = result.toString().substring(0, getMaxLength());
            }
        }
        if (TYPE_NODE.equals(getType())) {
            try {
                result = XmlUtils.buildNode((String) result, prc.isNamespaceAware());
                if (log.isDebugEnabled())
                    log.debug("final result [" + result.getClass().getName() + "][" + result + "]");
            } catch (DomBuilderException e) {
                throw new ParameterException("Parameter [" + getName() + "] could not parse result [" + result + "] to XML nodeset", e);
            }
        }
        if (TYPE_DOMDOC.equals(getType())) {
            try {
                result = XmlUtils.buildDomDocument((String) result, prc.isNamespaceAware(), prc.isXslt2());
                if (log.isDebugEnabled())
                    log.debug("final result [" + result.getClass().getName() + "][" + result + "]");
            } catch (DomBuilderException e) {
                throw new ParameterException("Parameter [" + getName() + "] could not parse result [" + result + "] to XML document", e);
            }
        }
        if (TYPE_DATE.equals(getType()) || TYPE_DATETIME.equals(getType()) || TYPE_TIMESTAMP.equals(getType()) || TYPE_TIME.equals(getType())) {
            log.debug("Parameter [" + getName() + "] converting result [" + result + "] to date using formatString [" + getFormatString() + "]");
            DateFormat df = new SimpleDateFormat(getFormatString());
            try {
                result = df.parseObject((String) result);
            } catch (ParseException e) {
                throw new ParameterException("Parameter [" + getName() + "] could not parse result [" + result + "] to Date using formatString [" + getFormatString() + "]", e);
            }
        }
        if (TYPE_XMLDATETIME.equals(getType())) {
            log.debug("Parameter [" + getName() + "] converting result [" + result + "] from xml dateTime to date");
            result = DateUtils.parseXmlDateTime((String) result);
        }
        if (TYPE_NUMBER.equals(getType())) {
            log.debug("Parameter [" + getName() + "] converting result [" + result + "] to number decimalSeparator [" + decimalFormatSymbols.getDecimalSeparator() + "] groupingSeparator [" + decimalFormatSymbols.getGroupingSeparator() + "]");
            DecimalFormat df = new DecimalFormat();
            df.setDecimalFormatSymbols(decimalFormatSymbols);
            try {
                Number n = df.parse((String) result);
                result = n;
            } catch (ParseException e) {
                throw new ParameterException("Parameter [" + getName() + "] could not parse result [" + result + "] to number decimalSeparator [" + decimalFormatSymbols.getDecimalSeparator() + "] groupingSeparator [" + decimalFormatSymbols.getGroupingSeparator() + "]", e);
            }
            if (getMinLength() >= 0 && result.toString().length() < getMinLength()) {
                log.debug("Adding leading zeros to parameter [" + getName() + "]");
                result = StringUtils.leftPad(result.toString(), getMinLength(), '0');
            }
        }
        if (TYPE_INTEGER.equals(getType())) {
            log.debug("Parameter [" + getName() + "] converting result [" + result + "] to integer");
            try {
                Integer i = Integer.parseInt((String) result);
                result = i;
            } catch (NumberFormatException e) {
                throw new ParameterException("Parameter [" + getName() + "] could not parse result [" + result + "] to integer", e);
            }
        }
    }
    if (result != null) {
        if (getMinInclusive() != null || getMaxInclusive() != null) {
            if (getMinInclusive() != null) {
                if (((Number) result).floatValue() < minInclusive.floatValue()) {
                    log.debug("Replacing parameter [" + getName() + "] because value [" + result + "] exceeds minInclusive [" + getMinInclusive() + "]");
                    result = minInclusive;
                }
            }
            if (getMaxInclusive() != null) {
                if (((Number) result).floatValue() > maxInclusive.floatValue()) {
                    log.debug("Replacing parameter [" + getName() + "] because value [" + result + "] exceeds maxInclusive [" + getMaxInclusive() + "]");
                    result = maxInclusive;
                }
            }
        }
    }
    return result;
}
Also used : DecimalFormat(java.text.DecimalFormat) TransformerException(javax.xml.transform.TransformerException) IbisException(nl.nn.adapterframework.core.IbisException) ParseException(java.text.ParseException) TransformerConfigurationException(javax.xml.transform.TransformerConfigurationException) DomBuilderException(nl.nn.adapterframework.util.DomBuilderException) IOException(java.io.IOException) ConfigurationException(nl.nn.adapterframework.configuration.ConfigurationException) ParameterException(nl.nn.adapterframework.core.ParameterException) TransformerPool(nl.nn.adapterframework.util.TransformerPool) Source(javax.xml.transform.Source) StringTokenizer(java.util.StringTokenizer) SimpleDateFormat(java.text.SimpleDateFormat) DateFormat(java.text.DateFormat) Iterator(java.util.Iterator) XmlBuilder(nl.nn.adapterframework.util.XmlBuilder) INamedObject(nl.nn.adapterframework.core.INamedObject) ParameterException(nl.nn.adapterframework.core.ParameterException) ArrayList(java.util.ArrayList) List(java.util.List) DomBuilderException(nl.nn.adapterframework.util.DomBuilderException) ParseException(java.text.ParseException) Map(java.util.Map) SimpleDateFormat(java.text.SimpleDateFormat)

Example 2 with IbisException

use of nl.nn.adapterframework.core.IbisException in project iaf by ibissource.

the class MessagingSource method close.

public synchronized boolean close() throws IbisException {
    if (--referenceCount <= 0 && cleanUpOnClose()) {
        log.debug(getLogPrefix() + "reference count [" + referenceCount + "], cleaning up global objects");
        siblingMap.remove(getId());
        try {
            deleteDynamicQueue(globalDynamicReplyQueue);
            if (globalConnection != null) {
                log.debug(getLogPrefix() + "closing global Connection");
                globalConnection.close();
                openConnectionCount.decrease();
            }
            if (openSessionCount.getValue() != 0) {
                log.warn(getLogPrefix() + "open session count after closing [" + openSessionCount.getValue() + "]");
            }
            if (openConnectionCount.getValue() != 0) {
                log.warn(getLogPrefix() + "open connection count after closing [" + openConnectionCount.getValue() + "]");
            }
            if (context != null) {
                context.close();
            }
        } catch (Exception e) {
            throw new IbisException("exception closing connection", e);
        } finally {
            globalDynamicReplyQueue = null;
            connectionFactory = null;
            globalConnection = null;
            context = null;
        }
        return true;
    } else {
        if (log.isDebugEnabled())
            log.debug(getLogPrefix() + "reference count [" + referenceCount + "], no cleanup");
        return false;
    }
}
Also used : IbisException(nl.nn.adapterframework.core.IbisException) IbisException(nl.nn.adapterframework.core.IbisException) JMSException(javax.jms.JMSException) IfsaException(nl.nn.adapterframework.extensions.ifsa.IfsaException)

Example 3 with IbisException

use of nl.nn.adapterframework.core.IbisException in project iaf by ibissource.

the class IfsaFacade method getMessagingSource.

protected IfsaMessagingSource getMessagingSource() throws IfsaException {
    if (messagingSource == null) {
        synchronized (this) {
            if (messagingSource == null) {
                log.debug(getLogPrefix() + "instantiating IfsaConnectionFactory");
                IfsaMessagingSourceFactory ifsaConnectionFactory = new IfsaMessagingSourceFactory();
                try {
                    log.debug(getLogPrefix() + "creating IfsaConnection");
                    messagingSource = (IfsaMessagingSource) ifsaConnectionFactory.getConnection(getApplicationId());
                } catch (IbisException e) {
                    if (e instanceof IfsaException) {
                        throw (IfsaException) e;
                    }
                    throw new IfsaException(e);
                }
            }
        }
    }
    return messagingSource;
}
Also used : IfsaException(nl.nn.adapterframework.extensions.ifsa.IfsaException) IbisException(nl.nn.adapterframework.core.IbisException)

Example 4 with IbisException

use of nl.nn.adapterframework.core.IbisException in project iaf by ibissource.

the class IfsaFacade method closeService.

/**
 * Stops communication on the IFSA bus.
 * Releases references to serviceQueue and connection.
 */
public void closeService() throws IfsaException {
    try {
        if (messagingSource != null) {
            try {
                messagingSource.close();
            } catch (IbisException e) {
                if (e instanceof IfsaException) {
                    throw (IfsaException) e;
                }
                throw new IfsaException(e);
            }
            log.debug(getLogPrefix() + "closed connection for service");
        }
    } finally {
        // make sure all objects are reset, to be able to restart after IFSA parameters have changed (e.g. at iterative installation time)
        queue = null;
        messagingSource = null;
    }
}
Also used : IfsaException(nl.nn.adapterframework.extensions.ifsa.IfsaException) IbisException(nl.nn.adapterframework.core.IbisException)

Aggregations

IbisException (nl.nn.adapterframework.core.IbisException)4 IfsaException (nl.nn.adapterframework.extensions.ifsa.IfsaException)3 IOException (java.io.IOException)1 DateFormat (java.text.DateFormat)1 DecimalFormat (java.text.DecimalFormat)1 ParseException (java.text.ParseException)1 SimpleDateFormat (java.text.SimpleDateFormat)1 ArrayList (java.util.ArrayList)1 Iterator (java.util.Iterator)1 List (java.util.List)1 Map (java.util.Map)1 StringTokenizer (java.util.StringTokenizer)1 JMSException (javax.jms.JMSException)1 Source (javax.xml.transform.Source)1 TransformerConfigurationException (javax.xml.transform.TransformerConfigurationException)1 TransformerException (javax.xml.transform.TransformerException)1 ConfigurationException (nl.nn.adapterframework.configuration.ConfigurationException)1 INamedObject (nl.nn.adapterframework.core.INamedObject)1 ParameterException (nl.nn.adapterframework.core.ParameterException)1 DomBuilderException (nl.nn.adapterframework.util.DomBuilderException)1