use of nl.nn.adapterframework.parameters.ParameterResolutionContext in project iaf by ibissource.
the class RhinoPipe method doPipe.
public PipeRunResult doPipe(Object input, IPipeLineSession session) throws PipeRunException {
// INIT
String eol = System.getProperty("line.separator");
if (input == null) {
// No input from previous pipes. We will use filename and or string input.
if ((StringUtils.isEmpty(fileInput)) && inputString == null && isLookupAtRuntime()) {
// No input from file or input string. Nowhere to GO!
throw new PipeRunException(this, getLogPrefix(session) + "No input specified anywhere. No string input, no file input and no previous pipe input");
}
}
if (!(input instanceof String)) {
throw new PipeRunException(this, getLogPrefix(session) + "got an invalid type as input, expected String, got " + input.getClass().getName());
}
inputString = (String) input;
// Get the input from the file at Run Time
if (StringUtils.isNotEmpty(getFileName()) && isLookupAtRuntime()) {
URL resource = null;
try {
resource = ClassUtils.getResourceURL(classLoader, getFileName());
} catch (Throwable e) {
throw new PipeRunException(this, getLogPrefix(session) + "got exception searching for [" + getFileName() + "]", e);
}
if (resource == null) {
throw new PipeRunException(this, getLogPrefix(session) + "cannot find resource [" + getFileName() + "]");
}
try {
fileInput = Misc.resourceToString(resource, SystemUtils.LINE_SEPARATOR);
} catch (Throwable e) {
throw new PipeRunException(this, getLogPrefix(session) + "got exception loading [" + getFileName() + "]", e);
}
}
// Get all params as input
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);
paramsInput = pv.asStringValue("") + eol + paramsInput;
}
}
String javascriptcode = "Packages.java;" + eol;
if (fileInput != null) {
javascriptcode = javascriptcode + fileInput;
}
if (paramsInput != null) {
javascriptcode = paramsInput + eol + javascriptcode;
}
String stringResult = (String) javascriptcode;
stringResult = "INPUTSTREAM used in case of ERROR" + eol + "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" + eol + stringResult;
// Start your engines
// Rhino engine Ok.
Context cx = Context.enter();
Scriptable scope = cx.initStandardObjects();
if (isDebug()) {
System.out.println("debug active");
cx.setLanguageVersion(Context.VERSION_1_2);
cx.setGeneratingDebug(true);
}
// Load javascript factory with javascript functions from file, stringinput and paraminput
String jsResult = "";
try {
cx.evaluateString(scope, javascriptcode, "jsScript", 1, null);
Function fct = (Function) scope.get(jsfunctionName, scope);
// Object result = fct.call(cx, scope, scope, new Object[]{jsfunctionArguments});
Object result = fct.call(cx, scope, scope, new Object[] { input });
if (isDebug()) {
System.out.println(cx.jsToJava(result, String.class));
}
;
jsResult = (String) cx.jsToJava(result, String.class);
} catch (org.mozilla.javascript.EcmaError ex) {
throw new PipeRunException(this, "org.mozilla.javascript.EcmaError -> ", ex);
// System.out.println(ex.getMessage());
} finally {
Context.exit();
}
// Use the result
if (!(jsResult instanceof String)) {
} else {
if ((String) jsResult != null) {
stringResult = (String) jsResult;
}
}
if (StringUtils.isEmpty(getSessionKey())) {
return new PipeRunResult(getForward(), stringResult);
} else {
session.put(getSessionKey(), stringResult);
return new PipeRunResult(getForward(), input);
}
}
use of nl.nn.adapterframework.parameters.ParameterResolutionContext in project iaf by ibissource.
the class StreamPipe method doPipe.
@Override
public PipeRunResult doPipe(Object input, IPipeLineSession session) throws PipeRunException {
Object result = input;
String inputString;
if (input instanceof String) {
inputString = (String) input;
} else {
inputString = "";
}
ParameterResolutionContext prc = new ParameterResolutionContext(inputString, session, isNamespaceAware());
Map parameters = null;
ParameterList parameterList = getParameterList();
if (parameterList != null) {
try {
parameters = prc.getValueMap(parameterList);
} catch (ParameterException e) {
throw new PipeRunException(this, "Could not resolve parameters", e);
}
}
InputStream inputStream = null;
OutputStream outputStream = null;
HttpServletRequest httpRequest = null;
HttpServletResponse httpResponse = null;
String contentType = null;
String contentDisposition = null;
if (parameters != null) {
if (parameters.get("inputStream") != null) {
inputStream = (InputStream) parameters.get("inputStream");
}
if (parameters.get("outputStream") != null) {
outputStream = (OutputStream) parameters.get("outputStream");
}
if (parameters.get("httpRequest") != null) {
httpRequest = (HttpServletRequest) parameters.get("httpRequest");
}
if (parameters.get("httpResponse") != null) {
httpResponse = (HttpServletResponse) parameters.get("httpResponse");
}
if (parameters.get("contentType") != null) {
contentType = (String) parameters.get("contentType");
}
if (parameters.get("contentDisposition") != null) {
contentDisposition = (String) parameters.get("contentDisposition");
}
}
if (inputStream == null && input instanceof InputStream) {
inputStream = (InputStream) input;
}
try {
if (httpResponse != null) {
HttpSender.streamResponseBody(inputStream, contentType, contentDisposition, httpResponse, log, getLogPrefix(session));
} else if (httpRequest != null) {
StringBuilder partsString = new StringBuilder("<parts>");
String firstStringPart = null;
List<AntiVirusObject> antiVirusObjects = new ArrayList<AntiVirusObject>();
if (ServletFileUpload.isMultipartContent(httpRequest)) {
log.debug(getLogPrefix(session) + "request with content type [" + httpRequest.getContentType() + "] and length [" + httpRequest.getContentLength() + "] contains multipart content");
DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory);
List<FileItem> items = servletFileUpload.parseRequest(httpRequest);
int fileCounter = 0;
int stringCounter = 0;
log.debug(getLogPrefix(session) + "multipart request items size [" + items.size() + "]");
String lastFoundFileName = null;
String lastFoundAVStatus = null;
String lastFoundAVMessage = null;
for (FileItem item : items) {
if (item.isFormField()) {
// Process regular form field (input
// type="text|radio|checkbox|etc", select, etc).
String fieldValue = item.getString();
String fieldName = item.getFieldName();
if (isCheckAntiVirus() && fieldName.equalsIgnoreCase(getAntiVirusPartName())) {
log.debug(getLogPrefix(session) + "found antivirus status part [" + fieldName + "] with value [" + fieldValue + "]");
lastFoundAVStatus = fieldValue;
} else if (isCheckAntiVirus() && fieldName.equalsIgnoreCase(getAntiVirusMessagePartName())) {
log.debug(getLogPrefix(session) + "found antivirus message part [" + fieldName + "] with value [" + fieldValue + "]");
lastFoundAVMessage = fieldValue;
} else {
log.debug(getLogPrefix(session) + "found string part [" + fieldName + "] with value [" + fieldValue + "]");
if (isExtractFirstStringPart() && firstStringPart == null) {
firstStringPart = fieldValue;
} else {
String sessionKeyName = "part_string" + (++stringCounter > 1 ? stringCounter : "");
addSessionKey(session, sessionKeyName, fieldValue);
partsString.append("<part type=\"string\" name=\"" + fieldName + "\" sessionKey=\"" + sessionKeyName + "\" size=\"" + fieldValue.length() + "\"/>");
}
}
} else {
// Process form file field (input type="file").
if (lastFoundFileName != null && lastFoundAVStatus != null) {
antiVirusObjects.add(new AntiVirusObject(lastFoundFileName, lastFoundAVStatus, lastFoundAVMessage));
lastFoundFileName = null;
lastFoundAVStatus = null;
lastFoundAVMessage = null;
}
log.debug(getLogPrefix(session) + "found file part [" + item.getName() + "]");
String sessionKeyName = "part_file" + (++fileCounter > 1 ? fileCounter : "");
String fileName = FilenameUtils.getName(item.getName());
InputStream is = item.getInputStream();
int size = is.available();
String mimeType = item.getContentType();
if (size > 0) {
addSessionKey(session, sessionKeyName, is, fileName);
} else {
addSessionKey(session, sessionKeyName, null);
}
partsString.append("<part type=\"file\" name=\"" + fileName + "\" sessionKey=\"" + sessionKeyName + "\" size=\"" + size + "\" mimeType=\"" + mimeType + "\"/>");
lastFoundFileName = fileName;
}
}
if (lastFoundFileName != null && lastFoundAVStatus != null) {
antiVirusObjects.add(new AntiVirusObject(lastFoundFileName, lastFoundAVStatus, lastFoundAVMessage));
}
} else {
log.debug(getLogPrefix(session) + "request with content type [" + httpRequest.getContentType() + "] and length [" + httpRequest.getContentLength() + "] does NOT contain multipart content");
}
partsString.append("</parts>");
if (isExtractFirstStringPart()) {
result = adjustFirstStringPart(firstStringPart, session);
session.put(getMultipartXmlSessionKey(), partsString.toString());
} else {
result = partsString.toString();
}
if (!antiVirusObjects.isEmpty()) {
for (AntiVirusObject antiVirusObject : antiVirusObjects) {
if (!antiVirusObject.getStatus().equalsIgnoreCase(getAntiVirusPassedMessage())) {
String errorMessage = "multipart contains file [" + antiVirusObject.getFileName() + "] with antivirus status [" + antiVirusObject.getStatus() + "] and message [" + StringUtils.defaultString(antiVirusObject.getMessage()) + "]";
PipeForward antiVirusFailedForward = findForward(ANTIVIRUS_FAILED_FORWARD);
if (antiVirusFailedForward == null) {
throw new PipeRunException(this, errorMessage);
} else {
if (antiVirusFailureAsSoapFault) {
errorMessage = createSoapFaultMessage(errorMessage);
}
if (StringUtils.isEmpty(getAntiVirusFailureReasonSessionKey())) {
return new PipeRunResult(antiVirusFailedForward, errorMessage);
} else {
session.put(getAntiVirusFailureReasonSessionKey(), errorMessage);
return new PipeRunResult(antiVirusFailedForward, result);
}
}
}
}
}
} else {
Misc.streamToStream(inputStream, outputStream);
}
} catch (IOException e) {
throw new PipeRunException(this, "IOException streaming input to output", e);
} catch (FileUploadException e) {
throw new PipeRunException(this, "FileUploadException getting multiparts from httpServletRequest", e);
}
return new PipeRunResult(getForward(), result);
}
use of nl.nn.adapterframework.parameters.ParameterResolutionContext in project iaf by ibissource.
the class XsltSender method sendMessage.
/**
* Here the actual transforming is done. Under weblogic the transformer object becomes
* corrupt when a not-well formed xml was handled. The transformer is then re-initialized
* via the configure() and start() methods.
*/
public String sendMessage(String correlationID, String message, ParameterResolutionContext prc) throws SenderException {
String stringResult = null;
if (message == null) {
throw new SenderException(getLogPrefix() + "got null input");
}
try {
Map parametervalues = null;
if (paramList != null) {
parametervalues = prc.getValueMap(paramList);
}
// if (log.isDebugEnabled()) {
// log.debug(getLogPrefix()+" transformerPool ["+transformerPool+"] transforming using prc ["+prc+"] and parameterValues ["+parametervalues+"]");
// log.debug(getLogPrefix()+" prc.inputsource ["+prc.getInputSource()+"]");
// }
stringResult = transformerPool.transform(prc.getInputSource(), parametervalues);
if (isSkipEmptyTags()) {
log.debug(getLogPrefix() + " skipping empty tags from result [" + stringResult + "]");
// URL xsltSource = ClassUtils.getResourceURL( this, skipEmptyTags_xslt);
// Transformer transformer = XmlUtils.createTransformer(xsltSource);
// stringResult = XmlUtils.transformXml(transformer, stringResult);
ParameterResolutionContext prc_SkipEmptyTags = new ParameterResolutionContext(stringResult, prc.getSession(), prc.isNamespaceAware());
stringResult = transformerPoolSkipEmptyTags.transform(prc_SkipEmptyTags.getInputSource(), null);
}
// if (log.isDebugEnabled()) {
// log.debug(getLogPrefix()+" transformed input ["+message+"] to ["+stringResult+"]");
// }
} catch (Exception e) {
log.warn(getLogPrefix() + "intermediate exception logging", e);
throw new SenderException(getLogPrefix() + " Exception on transforming input", e);
}
return stringResult;
}
use of nl.nn.adapterframework.parameters.ParameterResolutionContext in project iaf by ibissource.
the class FlowDiagram method runCommandSender.
private void runCommandSender(File dotFile, File outFile) throws SenderException, ConfigurationException, TimeOutException {
CommandSender commandSender = null;
try {
commandSender = new CommandSender();
commandSender.setCommand(url);
commandSender.setCommandWithArguments(true);
commandSender.setTimeOut(10);
Parameter p = new Parameter();
p.setName("arg1");
p.setValue("-T" + format);
commandSender.addParameter(p);
p = new Parameter();
p.setName("arg2");
p.setValue(dotFile.getPath());
commandSender.addParameter(p);
p = new Parameter();
p.setName("arg3");
p.setValue("-o");
commandSender.addParameter(p);
p = new Parameter();
p.setName("arg4");
p.setValue(outFile.getPath());
commandSender.addParameter(p);
commandSender.configure();
commandSender.open();
ParameterResolutionContext prc = new ParameterResolutionContext("dummy", new PipeLineSessionBase());
String result = commandSender.sendMessage(null, "", prc);
} finally {
if (commandSender != null) {
commandSender.close();
}
}
}
use of nl.nn.adapterframework.parameters.ParameterResolutionContext in project iaf by ibissource.
the class XsltPipe method getInput.
protected ParameterResolutionContext getInput(String input, IPipeLineSession session) throws PipeRunException, DomBuilderException, TransformerException, IOException {
if (isRemoveNamespaces()) {
log.debug(getLogPrefix(session) + " removing namespaces from input message");
ParameterResolutionContext prc_RemoveNamespaces = new ParameterResolutionContext(input, session, isNamespaceAware());
input = transformerPoolRemoveNamespaces.transform(prc_RemoveNamespaces.getInputSource(), null);
log.debug(getLogPrefix(session) + " output message after removing namespaces [" + input + "]");
}
return new ParameterResolutionContext(input, session, isNamespaceAware(), isXslt2());
}
Aggregations