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;
}
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;
}
}
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;
}
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;
}
}
Aggregations