use of nl.nn.adapterframework.parameters.ParameterValueList in project iaf by ibissource.
the class FixedResult method doPipe.
public PipeRunResult doPipe(Object input, IPipeLineSession session) throws PipeRunException {
String result = returnString;
if ((StringUtils.isNotEmpty(getFileName()) && isLookupAtRuntime()) || StringUtils.isNotEmpty(getFileNameSessionKey())) {
String fileName = null;
if (StringUtils.isNotEmpty(getFileNameSessionKey())) {
fileName = (String) session.get(fileNameSessionKey);
}
if (fileName == null) {
if (StringUtils.isNotEmpty(getFileName()) && isLookupAtRuntime()) {
fileName = getFileName();
}
}
URL resource = null;
try {
resource = ClassUtils.getResourceURL(classLoader, fileName);
} catch (Throwable e) {
throw new PipeRunException(this, getLogPrefix(session) + "got exception searching for [" + fileName + "]", e);
}
if (resource == null) {
PipeForward fileNotFoundForward = findForward(FILE_NOT_FOUND_FORWARD);
if (fileNotFoundForward != null) {
return new PipeRunResult(fileNotFoundForward, input);
} else {
throw new PipeRunException(this, getLogPrefix(session) + "cannot find resource [" + fileName + "]");
}
}
try {
result = Misc.resourceToString(resource, SystemUtils.LINE_SEPARATOR);
} catch (Throwable e) {
throw new PipeRunException(this, getLogPrefix(session) + "got exception loading [" + fileName + "]", e);
}
}
if (getParameterList() != null) {
ParameterResolutionContext prc = new ParameterResolutionContext((String) input, session);
ParameterValueList pvl;
try {
pvl = prc.getValues(getParameterList());
} catch (ParameterException e) {
throw new PipeRunException(this, getLogPrefix(session) + "exception extracting parameters", e);
}
for (int i = 0; i < pvl.size(); i++) {
ParameterValue pv = pvl.getParameterValue(i);
String replaceFrom;
if (isReplaceFixedParams()) {
replaceFrom = pv.getDefinition().getName();
} else {
replaceFrom = "${" + pv.getDefinition().getName() + "}";
}
result = replace(result, replaceFrom, pv.asStringValue(""));
}
}
if (getSubstituteVars()) {
result = StringResolver.substVars(returnString, session, appConstants);
}
if (StringUtils.isNotEmpty(styleSheetName)) {
URL xsltSource = ClassUtils.getResourceURL(classLoader, styleSheetName);
if (xsltSource != null) {
try {
String xsltResult = null;
Transformer transformer = XmlUtils.createTransformer(xsltSource);
xsltResult = XmlUtils.transformXml(transformer, result);
result = xsltResult;
} catch (IOException e) {
throw new PipeRunException(this, getLogPrefix(session) + "cannot retrieve [" + styleSheetName + "], resource [" + xsltSource.toString() + "]", e);
} catch (TransformerConfigurationException te) {
throw new PipeRunException(this, getLogPrefix(session) + "got error creating transformer from file [" + styleSheetName + "]", te);
} catch (TransformerException te) {
throw new PipeRunException(this, getLogPrefix(session) + "got error transforming resource [" + xsltSource.toString() + "] from [" + styleSheetName + "]", te);
} catch (DomBuilderException te) {
throw new PipeRunException(this, getLogPrefix(session) + "caught DomBuilderException", te);
}
}
}
log.debug(getLogPrefix(session) + " returning fixed result [" + result + "]");
return new PipeRunResult(getForward(), result);
}
use of nl.nn.adapterframework.parameters.ParameterValueList in project iaf by ibissource.
the class HashPipe method doPipe.
public PipeRunResult doPipe(Object input, IPipeLineSession session) throws PipeRunException {
String message = (String) input;
String authAlias = getAuthAlias();
String secret = getSecret();
try {
ParameterList parameterList = getParameterList();
ParameterResolutionContext prc = new ParameterResolutionContext(message, session);
ParameterValueList pvl = prc.getValues(parameterList);
if (pvl != null) {
Parameter authAliasParam = parameterList.findParameter("authAlias");
if (authAliasParam != null)
authAlias = (String) authAliasParam.getValue(pvl, prc);
Parameter secretParam = parameterList.findParameter("secret");
if (secretParam != null)
secret = (String) secretParam.getValue(pvl, prc);
}
} catch (Exception e) {
throw new PipeRunException(this, getLogPrefix(session) + "exception extracting authAlias", e);
}
CredentialFactory accessTokenCf = new CredentialFactory(authAlias, "", secret);
String cfSecret = accessTokenCf.getPassword();
if (cfSecret == null || cfSecret.isEmpty())
throw new PipeRunException(this, getLogPrefix(session) + "empty secret, unable to hash");
try {
Mac mac = Mac.getInstance(getAlgorithm());
SecretKeySpec secretkey = new SecretKeySpec(cfSecret.getBytes(getEncoding()), "algorithm");
mac.init(secretkey);
String hash = Base64.encodeBase64String(mac.doFinal(message.getBytes()));
return new PipeRunResult(getForward(), hash);
} catch (Exception e) {
throw new PipeRunException(this, getLogPrefix(session) + "error creating hash", e);
}
}
use of nl.nn.adapterframework.parameters.ParameterValueList in project iaf by ibissource.
the class HttpSenderBase method sendMessageWithTimeoutGuarded.
@Override
public String sendMessageWithTimeoutGuarded(String correlationID, String message, ParameterResolutionContext prc) throws SenderException, TimeOutException {
ParameterValueList pvl = null;
try {
if (prc != null && paramList != null) {
pvl = prc.getValues(paramList);
}
} catch (ParameterException e) {
throw new SenderException(getLogPrefix() + "Sender [" + getName() + "] caught exception evaluating parameters", e);
}
URIBuilder uri;
HttpRequestBase httpRequestBase;
try {
if (urlParameter != null) {
String url = (String) pvl.getParameterValue(getUrlParam()).getValue();
uri = getURI(url);
} else {
uri = staticUri;
}
httpTarget = new HttpHost(uri.getHost(), getPort(uri), uri.getScheme());
Map<String, String> headersParamsMap = new HashMap<String, String>();
if (headersParams != null) {
StringTokenizer st = new StringTokenizer(headersParams, ",");
while (st.hasMoreElements()) {
headersParamsMap.put(st.nextToken(), null);
}
}
if (isEncodeMessages()) {
message = URLEncoder.encode(message, getCharSet());
}
httpRequestBase = getMethod(uri, message, pvl, headersParamsMap, prc.getSession());
if (httpRequestBase == null)
throw new MethodNotSupportedException("could not find implementation for method [" + getMethodType() + "]");
if (!"POST".equals(getMethodType()) && !"PUT".equals(getMethodType()) && !"REPORT".equals(getMethodType())) {
httpClientBuilder.setRedirectStrategy(new DefaultRedirectStrategy() {
@Override
protected boolean isRedirectable(String method) {
return true;
}
});
}
if (StringUtils.isNotEmpty(getContentType())) {
httpRequestBase.setHeader("Content-Type", getContentType());
}
if (credentials != null && !StringUtils.isEmpty(credentials.getUsername())) {
AuthCache authCache = httpClientContext.getAuthCache();
if (authCache == null)
authCache = new BasicAuthCache();
authCache.put(httpTarget, new BasicScheme());
httpClientContext.setAuthCache(authCache);
}
log.info(getLogPrefix() + "configured httpclient for host [" + uri.getHost() + "]");
} catch (Exception e) {
throw new SenderException(e);
}
CloseableHttpClient httpClient = httpClientBuilder.build();
String result = null;
int statusCode = -1;
int count = getMaxExecuteRetries();
String msg = null;
while (count-- >= 0 && statusCode == -1) {
try {
log.debug(getLogPrefix() + "executing method [" + httpRequestBase.getRequestLine() + "]");
HttpResponse httpResponse = httpClient.execute(httpTarget, httpRequestBase, httpClientContext);
log.debug(getLogPrefix() + "executed method");
HttpResponseHandler responseHandler = new HttpResponseHandler(httpResponse);
StatusLine statusline = httpResponse.getStatusLine();
statusCode = statusline.getStatusCode();
if (StringUtils.isNotEmpty(getResultStatusCodeSessionKey()) && prc != null) {
prc.getSession().put(getResultStatusCodeSessionKey(), Integer.toString(statusCode));
}
if (statusCode != HttpServletResponse.SC_OK) {
log.warn(getLogPrefix() + "status [" + statusline.toString() + "]");
} else {
log.debug(getLogPrefix() + "status [" + statusCode + "]");
}
result = extractResult(responseHandler, prc);
log.debug(getLogPrefix() + "retrieved result [" + result + "]");
} catch (ClientProtocolException e) {
httpRequestBase.abort();
Throwable throwable = e.getCause();
String cause = null;
if (throwable != null) {
cause = throwable.toString();
}
msg = e.getMessage();
log.warn(getLogPrefix() + "httpException with message [" + msg + "] and cause [" + cause + "], executeRetries left [" + count + "]");
} catch (IOException e) {
httpRequestBase.abort();
if (e instanceof SocketTimeoutException) {
throw new TimeOutException(e);
}
throw new SenderException(e);
} finally {
// By forcing the use of the HttpResponseHandler the resultStream
// will automatically be closed when it has been read.
// See HttpResponseHandler and ReleaseConnectionAfterReadInputStream.
// We cannot close the connection as the response might be kept
// in a sessionKey for later use in the pipeline.
//
// IMPORTANT: It is possible that poorly written implementations
// wont read or close the response.
// This will cause the connection to become stale..
}
}
if (statusCode == -1) {
if (StringUtils.contains(msg.toUpperCase(), "TIMEOUTEXCEPTION")) {
// java.net.SocketTimeoutException: Read timed out
throw new TimeOutException("Failed to recover from timeout exception");
}
throw new SenderException("Failed to recover from exception");
}
if (isXhtml() && StringUtils.isNotEmpty(result)) {
result = XmlUtils.skipDocTypeDeclaration(result.trim());
if (result.startsWith("<html>") || result.startsWith("<html ")) {
CleanerProperties props = new CleanerProperties();
HtmlCleaner cleaner = new HtmlCleaner(props);
TagNode tagNode = cleaner.clean(result);
result = new SimpleXmlSerializer(props).getXmlAsString(tagNode);
if (transformerPool != null) {
log.debug(getLogPrefix() + " transforming result [" + result + "]");
ParameterResolutionContext prc_xslt = new ParameterResolutionContext(result, null, true, true);
try {
result = transformerPool.transform(prc_xslt.getInputSource(), null);
} catch (Exception e) {
throw new SenderException("Exception on transforming input", e);
}
}
}
}
return result;
}
use of nl.nn.adapterframework.parameters.ParameterValueList in project iaf by ibissource.
the class ZipWriterPipe method doPipe.
public PipeRunResult doPipe(Object input, IPipeLineSession session) throws PipeRunException {
if (ACTION_CLOSE.equals(getAction())) {
closeZipWriterHandle(session, true);
return new PipeRunResult(getForward(), input);
}
String msg = null;
if (input instanceof String) {
msg = (String) input;
}
ParameterResolutionContext prc = new ParameterResolutionContext(msg, session);
ParameterValueList pvl;
try {
pvl = prc.getValues(getParameterList());
} catch (ParameterException e1) {
throw new PipeRunException(this, getLogPrefix(session) + "cannot determine filename", e1);
}
ZipWriter sessionData = getZipWriter(session);
if (ACTION_OPEN.equals(getAction())) {
if (sessionData != null) {
throw new PipeRunException(this, getLogPrefix(session) + "zipWriterHandle in session key [" + getZipWriterHandle() + "] is already open");
}
sessionData = createZipWriter(session, pvl, input);
return new PipeRunResult(getForward(), input);
}
// from here on action must be 'write' or 'stream'
if (sessionData == null) {
throw new PipeRunException(this, getLogPrefix(session) + "zipWriterHandle in session key [" + getZipWriterHandle() + "] is not open");
}
String filename = (String) pvl.getParameterValue(PARAMETER_FILENAME).getValue();
if (StringUtils.isEmpty(filename)) {
throw new PipeRunException(this, getLogPrefix(session) + "filename cannot be empty");
}
try {
if (ACTION_STREAM.equals(getAction())) {
sessionData.openEntry(filename);
PipeRunResult prr = new PipeRunResult(getForward(), sessionData.getZipoutput());
return prr;
}
if (ACTION_WRITE.equals(getAction())) {
try {
if (isCompleteFileHeader()) {
sessionData.writeEntryWithCompletedHeader(filename, input, isCloseInputstreamOnExit(), getCharset());
} else {
sessionData.writeEntry(filename, input, isCloseInputstreamOnExit(), getCharset());
}
} catch (IOException e) {
throw new PipeRunException(this, getLogPrefix(session) + "cannot add data to zipentry for [" + filename + "]", e);
}
return new PipeRunResult(getForward(), input);
}
throw new PipeRunException(this, getLogPrefix(session) + "illegal action [" + getAction() + "]");
} catch (CompressionException e) {
throw new PipeRunException(this, getLogPrefix(session) + "cannot add zipentry for [" + filename + "]", e);
}
}
use of nl.nn.adapterframework.parameters.ParameterValueList in project iaf by ibissource.
the class ZipWriterSender method sendMessage.
public String sendMessage(String correlationID, String message, ParameterResolutionContext prc) throws SenderException, TimeOutException {
ParameterValueList pvl;
try {
pvl = prc.getValues(paramList);
} catch (ParameterException e) {
throw new SenderException("cannot determine filename and/or contents of zip entry", e);
}
IPipeLineSession session = prc.getSession();
ZipWriter sessionData = ZipWriter.getZipWriter(session, getZipWriterHandle());
if (sessionData == null) {
throw new SenderException("zipWriterHandle in session key [" + getZipWriterHandle() + "] is not open");
}
String filename = filenameParameter == null ? message : (String) pvl.getParameterValue(PARAMETER_FILENAME).getValue();
try {
if (contentsParameter == null) {
if (message != null) {
sessionData.writeEntry(filename, message, isCloseInputstreamOnExit(), getCharset());
}
} else {
Object paramValue = pvl.getParameterValue(PARAMETER_CONTENTS).getValue();
sessionData.writeEntry(filename, paramValue, isCloseInputstreamOnExit(), getCharset());
}
return message;
} catch (UnsupportedEncodingException e) {
throw new SenderException(getLogPrefix() + "cannot encode zip entry", e);
} catch (CompressionException e) {
throw new SenderException(getLogPrefix() + "cannot store zip entry", e);
} catch (IOException e) {
throw new SenderException(getLogPrefix() + "cannot store zip entry", e);
}
}
Aggregations