From 7ca3cb9a7ee3af484b1000fe8ad36ef181ee0364 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 13 Sep 2024 10:53:33 +0200 Subject: [PATCH] build(dependencies): bump-f!f-version-to-8.3.0-20240910.042339 (#425) * build(dependencies): bump f!f version to 8.2.0-20240711.042331 * fix: replace restoreElementToMove with replacerPipe due to elementToMove not working on non-xml anymore * build(dependencies): bump f!f version to 8.3.0-20240910.042339 --------- Co-authored-by: MLenterman Co-authored-by: MLenterman --- Dockerfile | 2 +- Dockerfile.java8 | 2 +- docker-compose.zaakbrug.dev.yml | 2 +- frank-runner.properties | 2 +- src/main/FrankConfig.xsd | 5106 +++++++++++------ src/main/configurations/FrankConfig.xsd | 5106 +++++++++++------ .../Configuration_PutZgwZaakDocument.xml | 10 +- ...ion_SoapEndpointRouter_BeantwoordVraag.xml | 8 +- ...tion_SoapEndpointRouter_VrijeBerichten.xml | 8 +- ...tion_Zaken_PostZgwZaakInformatieObject.xml | 11 +- 10 files changed, 6774 insertions(+), 3483 deletions(-) diff --git a/Dockerfile b/Dockerfile index bc68382dc..e15aa8c80 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ # Keep in sync with version in frank-runner.properties. Detailed instructions can be found in CONTRIBUTING.md. # Check whether java-orig files have changed in F!F and update custom code (java and java-orig files) accordingly -ARG FF_VERSION=8.1.0-20240404.042328 +ARG FF_VERSION=8.3.0-20240910.042339 FROM docker.io/frankframework/frankframework:${FF_VERSION} as ff-base # Copy dependencies diff --git a/Dockerfile.java8 b/Dockerfile.java8 index d3be34220..3c51bae18 100644 --- a/Dockerfile.java8 +++ b/Dockerfile.java8 @@ -1,6 +1,6 @@ # Keep in sync with version in frank-runner.properties. Detailed instructions can be found in CONTRIBUTING.md. # Check whether java-orig files have changed in F!F and update custom code (java and java-orig files) accordingly -ARG FF_VERSION=8.1.0-20240404.042328 +ARG FF_VERSION=8.3.0-20240910.042339 FROM docker.io/frankframework/frankframework:${FF_VERSION} diff --git a/docker-compose.zaakbrug.dev.yml b/docker-compose.zaakbrug.dev.yml index 9ae6064c1..016599eaa 100644 --- a/docker-compose.zaakbrug.dev.yml +++ b/docker-compose.zaakbrug.dev.yml @@ -17,7 +17,7 @@ services: build: context: . args: - FF_VERSION: ${FF_VERSION:-8.1.0-20240404.042328} + FF_VERSION: ${FF_VERSION:-8.3.0-20240910.042339} image: wearefrank/zaakbrug:${ZAAKBRUG_VERSION:-latest} container_name: zaakbrug.dev environment: diff --git a/frank-runner.properties b/frank-runner.properties index 3f023f1a7..1a25bcf3b 100644 --- a/frank-runner.properties +++ b/frank-runner.properties @@ -1,4 +1,4 @@ classloader.type=ScanningDirectoryClassLoader # Keep in sync with version in Dockerfile. Detailed instructions can be found in CONTRIBUTING.md. -ff.version=8.1.0-20240404.042328 \ No newline at end of file +ff.version=8.3.0-20240910.042339 \ No newline at end of file diff --git a/src/main/FrankConfig.xsd b/src/main/FrankConfig.xsd index d2917c351..4418db222 100644 --- a/src/main/FrankConfig.xsd +++ b/src/main/FrankConfig.xsd @@ -1,5 +1,5 @@ - + Container of Adapters that belong together. @@ -41,7 +41,12 @@ - An Adapter receives a specific type of messages and processes them. It has Receivers + The Adapter is the central manager in the framework. It has knowledge of both + Receivers as well as the PipeLine and statistics. + The Adapter is the class that is responsible for configuring, initializing and + accessing/activating Receivers, Pipelines, statistics etc. + <br/> + An Adapter receives a specific type of messages and processes them. It has Receivers that receive the messages and a PipeLine that transforms the incoming messages. Each adapter is part of a Configuration. <br/> If an adapter can receive its messages through multiple channels (e.g. RESTful HTTP requests, incoming files, etc), @@ -91,7 +96,7 @@ - Defines behaviour for logging messages. Configuration is done in the MSG appender in log4j4ibis.properties. Default: <code>INFO, unless overridden by property msg.log.level.default</code> + Defines behaviour for logging messages. Configuration is done in the MSG appender in log4j4ibis.properties. Default: <code>INFO</code>, unless overridden by property <code>msg.log.level.default</code> @@ -202,14 +207,14 @@ timeout (in seconds) to start receiver. If this timeout is exceeded, the Receiver startup is - aborted and all resources closed and the receiver will be in state {@code EXCEPTION_STARTING} + aborted and all resources closed and the receiver will be in state <code>EXCEPTION_STARTING</code> and a new start command may be issued again. timeout (in seconds) to stop receiver. If this timeout is exceeded, stopping will be aborted - and the receiver will be in state {@code EXCEPTION_STOPPING}. + and the receiver will be in state <code>EXCEPTION_STOPPING</code>. The receiver will no longer be running but some resources might not have been cleaned up properly. @@ -278,7 +283,7 @@ - If set, the character data in this XML element is stored inside a session key and in the message it is replaced by a reference to this session key: {sessionKey: + <code>elementToMoveSessionKey</code> + } + If set, the character data in this XML element is stored inside a session key and in the message it is replaced by a reference to this session key: <code>{sessionKey: elementToMoveSessionKey}</code> @@ -294,7 +299,7 @@ - Regular expression to mask strings in the errorStore/logStore. Every character between to the strings in this expression will be replaced by a '*'. For example, the regular expression (?&lt;=&lt;party&gt;).*?(?=&lt;/party&gt;) will replace every character between keys &lt;party&gt; and &lt;/party&gt; + Regular expression to mask strings in the errorStore/logStore and logfiles. Every character between to the strings in this expression will be replaced by a '*'. For example, the regular expression (?&lt;=&lt;party&gt;).*?(?=&lt;/party&gt;) will replace every character between keys &lt;party&gt; and &lt;/party&gt; @@ -312,7 +317,7 @@ - If set to <code>true</code>, every message read will be processed as if it is being retried, by setting a session variable to retry. Default: false + If set to <code>true</code>, every message read will be processed as if it is being retried, by setting a session variable to <code>retry</code>. Default: false @@ -329,77 +334,31 @@ - Generic parameter definition. - - A parameter resembles an attribute. However, while attributes get their value at configuration-time, - parameters get their value at the time of processing the message. Value can be retrieved from the message itself, - a fixed value, or from the pipelineSession. If this does not result in a value (or if neither of these is specified), a default value - can be specified. If an XPathExpression or stylesheet is specified, it will be applied to the message, the value retrieved - from the pipelineSession or the fixed value specified. If the transformation produces no output, the default value - of the parameter is taken if provided. - <br/><br/> - Examples: - <pre><code> - stored under SessionKey 'TransportInfo': - &lt;transportinfo&gt; - &lt;to&gt;***@zonnet.nl&lt;/to&gt; - &lt;to&gt;***@zonnet.nl&lt;/to&gt; - &lt;cc&gt;***@zonnet.nl&lt;/cc&gt; - &lt;/transportinfo&gt; - - to obtain all 'to' addressees as a parameter: - sessionKey="TransportInfo" - xpathExpression="transportinfo/to" - type="xml" - - Result: - &lt;to&gt;***@zonnet.nl&lt;/to&gt; - &lt;to&gt;***@zonnet.nl&lt;/to&gt; - </code></pre> - - N.B. to obtain a fixed value: a non-existing 'dummy' <code>sessionKey</code> in combination with the fixed value in <code>defaultValue</code> is used traditionally. - The current version of parameter supports the 'value' attribute, that is sufficient to set a fixed value. + Placeholder class to allow legacy configuration notations <code>&lt;param type='number' /&gt;</code> in the new Frank!Config XSD. + <p> + The attribute <code>type</code> has been removed in favor of explicit ParameterTypes such as: <code>NumberParameter</code>, <code>DateParameter</code> and <code>BooleanParameter</code>. + Using the new elements enables the use of auto-completion for the specified type. - + - - - Name of the parameter - - - The target data type of the parameter, related to the database or XSLT stylesheet to which the parameter is applied. + The target data type of the parameter, related to the database or XSLT stylesheet to which the parameter is applied. Default: STRING - - - The value of the parameter, or the base for transformation using xpathExpression or stylesheet, or formatting. - - - - - Key of a PipelineSession-variable. <br/>If specified, the value of the PipelineSession variable is used as input for - the xpathExpression or stylesheet, instead of the current input message. <br/>If no xpathExpression or stylesheet are - specified, the value itself is returned. <br/>If the value '*' is specified, all existing sessionkeys are added as - parameter of which the name starts with the name of this parameter. <br/>If also the name of the parameter has the - value '*' then all existing sessionkeys are added as parameter (except tsReceived) - - - - - key of message context variable to use as source, instead of the message found from input message or sessionKey itself - - - + - Instead of a fixed <code>sessionKey</code> it's also possible to use a XPath expression applied to the input message to extract the name of the session-variable. + Name of the parameter + + + + URL to a stylesheet that wil be applied to the contents of the message or the value of the session-variable. @@ -418,7 +377,7 @@ Namespace definitions for xpathExpression. Must be in the form of a comma or space separated list of - <code>prefix=namespaceuri</code>-definitions. One entry can be without a prefix, that will define the default namespace. + <code>prefix=namespaceuri</code> definitions. One entry can be without a prefix, that will define the default namespace. @@ -426,44 +385,9 @@ When set <code>true</code> namespaces (and prefixes) in the input message are removed before the stylesheet/xpathExpression is executed Default: <code>false</code> - - - If the result of sessionKey, xpathExpression and/or stylesheet returns null or an empty string, this value is returned - - - - - Comma separated list of methods (<code>defaultValue</code>, <code>sessionKey</code>, <code>pattern</code>, <code>value</code> or <code>input</code>) to use as default value. Used in the order they appear until a non-null value is found. Default: <code>defaultValue</code> - - - - - Value of parameter is determined using substitution and formatting, following MessageFormat syntax with named parameters. The expression can contain references - to <code>session-variables</code> or other <code>parameters</code> using the {name-of-parameter} and is formatted using java.text.MessageFormat. - <br/><b>NB: When referencing other <code>parameters</code> these MUST be defined before the parameter using pattern substitution.</b> - <br/> - <br/> - If for instance <code>fname</code> is a parameter or session-variable that resolves to Eric, then the pattern - 'Hi {fname}, how do you do?' resolves to 'Hi Eric, do you do?'.<br/> - The following predefined reference can be used in the expression too:<ul> - <li>{now}: the current system time</li> - <li>{uid}: an unique identifier, based on the IP address and java.rmi.server.UID</li> - <li>{uuid}: an unique identifier, based on the IP address and java.util.UUID</li> - <li>{hostname}: the name of the machine the application runs on</li> - <li>{username}: username from the credentials found using authAlias, or the username attribute</li> - <li>{password}: password from the credentials found using authAlias, or the password attribute</li> - <li>{fixeddate}: fake date, for testing only</li> - <li>{fixeduid}: fake uid, for testing only</li> - <li>{fixedhostname}: fake hostname, for testing only</li> - </ul> - A guid can be generated using {hostname}_{uid}, see also - <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/rmi/server/uid.html">http://java.sun.com/j2se/1.4.2/docs/api/java/rmi/server/uid.html</a> for more information about (g)uid's or - <a href="http://docs.oracle.com/javase/1.5.0/docs/api/java/util/uuid.html">http://docs.oracle.com/javase/1.5.0/docs/api/java/util/uuid.html</a> for more information about uuid's. - <br/> - When combining a date or time <code>pattern</code> like {now} or {fixeddate} with a DATE, TIME, DATETIME or TIMESTAMP <code>type</code>, the effective value of the attribute - <code>formatString</code> must match the effective value of the formatString in the <code>pattern</code>. - - + + + Alias used to obtain username and password, used when a <code>pattern</code> containing {username} or {password} is specified @@ -479,65 +403,11 @@ Default password that is used when a <code>pattern</code> containing {password} is specified - - - If set <code>true</code> pattern elements that cannot be resolved to a parameter or sessionKey are silently resolved to an empty string - - - - - Used in combination with types <code>DATE</code>, <code>TIME</code>, <code>DATETIME</code> and <code>TIMESTAMP</code> to parse the raw parameter string data into an object of the respective type Default: depends on type - - - - - Used in combination with type <code>NUMBER</code> Default: system default - - - - - Used in combination with type <code>NUMBER</code> Default: system default - - - - - If set (>=0) and the length of the value of the parameter falls short of this minimum length, the value is padded Default: -1 - - - - - If set (>=0) and the length of the value of the parameter exceeds this maximum length, the length is trimmed to this maximum length Default: -1 - - - - - Used in combination with type <code>number</code>; if set and the value of the parameter exceeds this maximum value, this maximum value is taken - - - - - Used in combination with type <code>number</code>; if set and the value of the parameter falls short of this minimum value, this minimum value is taken - - - - - If set to <code>true</code>, the value of the parameter will not be shown in the log (replaced by asterisks) Default: <code>false</code> - - - - - Set the mode of the parameter, which determines if the parameter is an INPUT, OUTPUT, or INOUT. - This parameter only has effect for StoredProcedureQuerySender. - An OUTPUT parameter does not need to have a value specified, but does need to have the type specified. - Parameter values will not be updated, but output values will be put into the result of the - StoredProcedureQuerySender. - <b/> - If not specified, the default is INPUT. - - - - - + + + + + @@ -811,18 +681,17 @@ <br/><br/> If no exits are specified, a default one is created with name="READY" and state="SUCCESS". <br/><br/> - <b>example:</b> <code><pre> - &lt;Exits&gt; - &lt;Exit name="READY" state="SUCCESS" /&gt; - &lt;Exit name="Created" state="ERROR" code="201" empty="true" /&gt; - &lt;Exit name="NotModified" state="ERROR" code="304" empty="true" /&gt; - &lt;Exit name="BadRequest" state="ERROR" code="400" empty="true" /&gt; - &lt;Exit name="NotAuthorized" state="ERROR" code="401" empty="true" /&gt; - &lt;Exit name="NotAllowed" state="ERROR" code="403" empty="true" /&gt; - &lt;Exit name="Teapot" state="SUCCESS" code="418" /&gt; - &lt;Exit name="ServerError" state="ERROR" code="500" /&gt; - &lt;/Exits&gt; - </pre></code> + <b>example:</b> + <pre><code>&lt;Exits&gt; + &lt;Exit name=&quot;&lt;code&gt;READY&lt;/code&gt;&quot; state=&quot;&lt;code&gt;SUCCESS&lt;/code&gt;&quot; /&gt; + &lt;Exit name=&quot;Created&quot; state=&quot;ERROR&quot; code=&quot;201&quot; empty=&quot;true&quot; /&gt; + &lt;Exit name=&quot;NotModified&quot; state=&quot;ERROR&quot; code=&quot;304&quot; empty=&quot;true&quot; /&gt; + &lt;Exit name=&quot;BadRequest&quot; state=&quot;ERROR&quot; code=&quot;400&quot; empty=&quot;true&quot; /&gt; + &lt;Exit name=&quot;NotAuthorized&quot; state=&quot;ERROR&quot; code=&quot;401&quot; empty=&quot;true&quot; /&gt; + &lt;Exit name=&quot;NotAllowed&quot; state=&quot;ERROR&quot; code=&quot;403&quot; empty=&quot;true&quot; /&gt; + &lt;Exit name=&quot;Teapot&quot; state=&quot;SUCCESS&quot; code=&quot;418&quot; /&gt; + &lt;Exit name=&quot;ServerError&quot; state=&quot;ERROR&quot; code=&quot;500&quot; /&gt; + &lt;/Exits&gt;</code></pre> @@ -838,21 +707,21 @@ the optionally specified http status code. Each Exit should have a unique name. See Exits for examples. <br/><br/> - When a Pipeline doesn't have an Exits element configured it will be initialized with one Exit having name READY and - state SUCCESS. + When a Pipeline doesn't have an Exits element configured it will be initialized with one Exit having name <code>READY</code> and + state <code>SUCCESS</code>. <br/><br/> The name of an Exit can be referenced by the <code>path</code> attribute of a Forward within a Pipe. The name of the Exit that can be referenced by a PipeForward's <code>path</code> attribute. When a Pipeline doesn't have an Exits - element configured it will be initialized with one Exit having name READY (and state SUCCESS) + element configured it will be initialized with one Exit having name <code>READY</code> (and state SUCCESS) The state of the Pipeline that is returned to the Receiver for this Exit. When a Pipeline doesn't have an Exits - element configured it will be initialized with one Exit having state SUCCESS (and name READY) + element configured it will be initialized with one Exit having state SUCCESS (and name <code>READY</code>) @@ -901,9 +770,92 @@ + + + The flow contains the handlers to handle records of a specific type. + Each flow is registered to a manager using the recordHandlerManagerRef. + + + + Key under which this flow is registered in the manager + + + + + Name of the manager to be used after handling this record + + + + + Name of the recordHandler to be used to transform records of the type specified in the key (optional) + + + + + Name of the manager to which this flow must be added + + + + + Name of the resultHandler to be used to handle the transformed result + + + + + Instructs the resultHandler to start a new block before the parsed line is processed + + + + + Instructs the resultHandler to end the specified block before the parsed line is processed + + + + + Instructs the resultHandler to start a new block after the parsed line is processed + + + + + Instructs the resultHandler to end the specified block after the parsed line is processed + + + + + If <code>true</code>, any open block of this type (and other nested open 'autoClose' block) is closed before a new one of the same type is opened. At a forced close, nested blocks are closed too (since 4.9) Default: true + + + + + If &gt;0 the <code>openBlockBeforeLine</code> instruction is only performed when the current line number is a multiple of this value Default: 0 + + + + + + + + + + + + + + + + + + + + + + + - Container for jobs that are scheduled for periodic execution. + Container for jobs that are scheduled for periodic execution. + <p> + Configure/start/stop lifecycles are managed by Spring. @@ -924,7 +876,8 @@ - time (with suffix 'd', 'h', 'm' or 's' in milliseconds) that must have passed at least before a file will be deleted Default: 30d + Minimum amount of time (with suffix 'd', 'h', 'm' or 's') that must have passed before a file will be deleted. + You may only use one suffix! Default: 30d @@ -1020,7 +973,9 @@ - Manager for Monitoring. + Manager for Monitoring. + <p> + Configure/start/stop lifecycles are managed by Spring. @@ -1034,19 +989,14 @@ <p>Example configuration:</p> - <pre><code> - {@literal - <monitor name="Receiver Shutdown" destinations="MONITOR_LOG"> - <trigger className="org.frankframework.monitoring.Alarm" severity="WARNING"> - <event>Receiver Shutdown</event> - </trigger> - <trigger className="org.frankframework.monitoring.Clearing" severity="WARNING"> - <event>Receiver Shutdown</event> - </trigger> - </monitor> - } - - </code></pre> + <pre><code>&lt;monitor name=&quot;Receiver Shutdown&quot; destinations=&quot;MONITOR_LOG&quot;&gt; + &lt;trigger className=&quot;org.frankframework.monitoring.Alarm&quot; severity=&quot;WARNING&quot;&gt; + &lt;event&gt;Receiver Shutdown&lt;/event&gt; + &lt;/trigger&gt; + &lt;trigger className=&quot;org.frankframework.monitoring.Clearing&quot; severity=&quot;WARNING&quot;&gt; + &lt;event&gt;Receiver Shutdown&lt;/event&gt; + &lt;/trigger&gt; + &lt;/monitor&gt;</code></pre> @@ -1124,7 +1074,7 @@ - + @@ -1136,124 +1086,334 @@ - + - - - Listener that allows a Receiver to receive messages as a REST webservice. - Prepends the configured URI pattern with <code>api/</code>. The structure of REST messages is described - by OpenAPI specifications. The Frank!Framework generates an OpenAPI specification for each ApiListener and - also an OpenAPI specification for all ApiListeners in all configurations. You can - find them in the Frank!Console under main menu item Webservices, heading Available ApiListeners. - <p> - The generated OpenAPI specifications have <code>servers</code> and <code>paths</code> objects and - therefore they document the full URLs of the provided services. - <p> - It is possible to automatically generate eTags over the listener result. This can be controlled by globally - setting the property <code>api.etag.enabled</code> or by setting the attribute <code>updateEtag="true"</code>. - When enabled the listener will respond to the 'if-match', 'if-none-match' headers and may return status code 304. - <p> - In order to make eTags work across multiple nodes you must configure Memcached to store the eTags. - The following properties will need to be set: - <ul> - <li>etag.cache.server=ip or hostname:port</li> - <li>etag.cache.type=memcached</li> - </ul> - In case authentication, is required the following application properties can be used: - <ul> - <li>etag.cache.username</li> - <li>etag.cache.password</li> - <li>etag.cache.authalias</li> - </ul> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ESB (Enterprise Service Bus) extension of JmsListener. - + - - - - - + + + + + + + + + - - - Microsoft Exchange Implementation of a MailListener. - + + + + + + - - + + - + - - + + - - - FxF extension of EsbJmsListener. - - <p><b>Configuration </b><i>(where deviating from EsbJmsListener)</i><b>:</b> - <table border="1"> - <tr><th>attributes</th><th>description</th><th>default</th></tr> - <tr><td>destinationName</td><td>name of the JMS destination (queue or topic) to use</td><td>"jms/FileTransferAction"</td></tr> - <tr><td>jmsRealm</td><td>&nbsp;</td><td>"qcf_tibco_p2p_ff"</td></tr> - <tr><td>messageProtocol</td><td>protocol of ESB service to be called. Possible values - <ul> - <li>"FF": Fire & Forget protocol</li> - <li>"RR": Request-Reply protocol</li> - </ul></td><td>"FF"</td></tr> - </table></p> - + - - + + - - - - - + + + + + + + + + + + + + + + + Name of the parameter + + + + + + + + + URL to a stylesheet that wil be applied to the contents of the message or the value of the session-variable. + + + + + the XPath expression to extract the parameter value from the (xml formatted) input or session-variable. + + + + + If set to <code>2</code> or <code>3</code> a Saxon (net.sf.saxon) xslt processor 2.0 or 3.0 respectively will be used, otherwise xslt processor 1.0 (org.apache.xalan). <code>0</code> will auto-detect Default: 0 + + + + + Namespace definitions for xpathExpression. Must be in the form of a comma or space separated list of + <code>prefix=namespaceuri</code> definitions. One entry can be without a prefix, that will define the default namespace. + + + + + When set <code>true</code> namespaces (and prefixes) in the input message are removed before the stylesheet/xpathExpression is executed Default: <code>false</code> + + + + + + + + Alias used to obtain username and password, used when a <code>pattern</code> containing {username} or {password} is specified + + + + + Default username that is used when a <code>pattern</code> containing {username} is specified + + + + + Default password that is used when a <code>pattern</code> containing {password} is specified + + + + + + + + + + + + + + + + + + + Used in combination with types <code>DATE</code>, <code>TIME</code>, <code>DATETIME</code> and <code>TIMESTAMP</code> to parse the raw parameter string data into an object of the respective type Default: depends on type + + + + + + + + + + + + + + + + + + + + + Separate the integer part from the fractional part of a number. Default: system default + + + + + In the United States, the comma is typically used for the grouping separator; however, several publication standards follow international standards in using either a space or a thin space character. Default: system default + + + + + Used in combination with type <code>number</code>; if set and the value of the parameter exceeds this maximum value, this maximum value is taken + + + + + Used in combination with type <code>number</code>; if set and the value of the parameter falls short of this minimum value, this minimum value is taken + + + + + + + + + + + + Listener that allows a Receiver to receive messages as a REST webservice. + Prepends the configured URI pattern with <code>api/</code>. The structure of REST messages is described + by OpenAPI specifications. The Frank!Framework generates an OpenAPI specification for each ApiListener and + for all ApiListeners in all configurations combined. You can + find them in the Frank!Console under main menu item Webservices, heading Available ApiListeners. + <p> + The generated OpenAPI specifications have <code>servers</code> and <code>paths</code> objects and + therefore they document the full URLs of the provided services. + <p> + It is possible to automatically generate eTags over the listener result. This can be controlled by globally + setting the property <code>api.etag.enabled</code> or by setting the attribute <code>updateEtag="true"</code>. + When enabled the listener will respond to the <code>If-Match</code>, <code>If-None-Match</code> headers and may return status code 304. + <p> + In order to enable eTags for multiple nodes you must configure Memcached to store the eTags. + The following properties will need to be set: + <ul> + <li><code>etag.cache.server=ip or hostname:port</code></li> + <li><code>etag.cache.type=memcached</code></li> + </ul> + In case authentication, is required the following application properties can be used: + <ul> + <li><code>etag.cache.username</code></li> + <li><code>etag.cache.password</code></li> + <li><code>etag.cache.authalias</code></li> + </ul> + + + + + + + + + + + + + + + + + + + + + Listener that looks for files in a LocalFileSystem. The DirectoryListener keeps track of the file process by storing it in different folders. The application may create the folders if you (a) set the <code>root</code> attribute and (b) set the attribute <code>createFolders</code> to true. + + The attribute <code>messageType</code> dictates what information of the file is passed to the pipeline. This may be the name, canonical path, the entire file, or the file's metadata. + + <p> + Example usage:<br> + <pre><code> + &lt;DirectoryListener + name="directoryListener" + messageType="info" + root="${rootdirectory}" + inputFolder="in" + inProcessFolder="inProcess" + errorFolder="error" + createFolders="true" + /&gt; + </code></pre> + + </p> + + + + + + + + + + + + ESB (Enterprise Service Bus) extension of JmsListener. + + + + + + + + + + + + Microsoft Exchange Implementation of a mail filesystem. + + + + + + + + + + + + Listener to receive messages sent by the org.frankframework.senders.FrankSender, for situations where + calling an Adapter directly is not desired. This could be because message / error logging is required for messages + sent to the subadapter. + <br/> + See the org.frankframework.senders.FrankSender documentation for more information. + + + + + + + + + + + + + + + + + + + + + FxF extension of EsbJmsListener. + + <p><b>Configuration </b><i>(where deviating from EsbJmsListener)</i><b>:</b> + <table border="1"> + <tr><th>attributes</th><th>description</th><th>default</th></tr> + <tr><td>destinationName</td><td>name of the JMS destination (queue or topic) to use</td><td>"jms/FileTransferAction"</td></tr> + <tr><td>jmsRealm</td><td>&nbsp;</td><td>"qcf_tibco_p2p_ff"</td></tr> + <tr><td>messageProtocol</td><td>protocol of ESB service to be called. Possible values + <ul> + <li>"FF": Fire & Forget protocol</li> + <li>"RR": Request-Reply protocol</li> + </ul></td><td>"FF"</td></tr> + </table></p> + + + + + + + + + + + + + + @@ -1339,7 +1499,7 @@ <p>You can add parameters to the JmsListener, the values will be added as Headers to the JMS response message.</p> <p><b>Notice:</b> the JmsListener is ONLY capable of processing - javax.jms.TextMessages and javax.jms.BytesMessage<br/><br/> + jakarta.jms.TextMessages and jakarta.jms.BytesMessage<br/><br/> </p> @@ -1352,24 +1512,19 @@ - Read messages from the IBISSTORE database table previously stored by a - MessageStoreSender. - + Read messages from the IBISSTORE database table previously stored by a MessageStoreSender. + <p> Example configuration: - <code><pre> - &lt;Receiver - name="03 MessageStoreReceiver" - numThreads="4" - transactionAttribute="Required" - pollInterval="1" - &gt; - &lt;MessageStoreListener - name="03 MessageStoreListener" - slotId="${instance.name}/TestMessageStore" - statusValueInProcess="I" - /&gt; - &lt;/Receiver&gt; - </pre></code> + <pre><code>&lt;Receiver + name=&quot;03 MessageStoreReceiver&quot; + numThreads=&quot;4&quot; + transactionAttribute=&quot;Required&quot; + pollInterval=&quot;1&quot;&gt; + &lt;MessageStoreListener + name=&quot;03 MessageStoreListener&quot; + slotId=&quot;${instance.name}/TestMessageStore&quot; + statusValueInProcess=&quot;I&quot; /&gt; + &lt;/Receiver&gt;</code></pre> If you have a <code>MessageStoreListener</code>, failed messages are automatically kept in database table IBISSTORE. Messages are also kept after successful processing. The state of a message @@ -1444,7 +1599,7 @@ whatever it is configured to.</p> </p> <p><b>Notice:</b> the JmsListener is ONLY capable of processing - <code>javax.jms.TextMessage</code>s <br/><br/> + <code>jakarta.jms.TextMessage</code>s <br/><br/> </p> @@ -1494,7 +1649,7 @@ whatever it is configured to.</p> <p><b>Notice:</b> the JmsListener is ONLY capable of processing - javax.jms.TextMessages and javax.jms.BytesMessage<br/><br/> + jakarta.jms.TextMessages and jakarta.jms.BytesMessage<br/><br/> </p> @@ -1625,19 +1780,22 @@ - + - HTTP method(s) to listen to, separated by comma Default: GET + HTTP method(s) to listen to. Inside XML Configurations: for multiple values, use a comma as separator. Default: GET + + + - URI pattern to register this listener on, eq. `/my-listener/{something}/here` + URI pattern to register this listener on, eq. <code>/my-listener/{something}/here</code> - The required contentType on requests, if it doesn't match a 415 Unsupported Media Type is replied Default: ANY + The required contentType on requests, if it doesn't match a <code>415</code> status (Unsupported Media Type) is returned. Default: ANY @@ -1645,7 +1803,8 @@ - The specified contentType on response. When <code>ANY</code> the response will determine the content type based on the return data. Default: ANY + The specified contentType on response. When <code>ANY</code> the response will determine the content-type when it's known and will never calculate it. If no match is found <code>*&#47;*</code> will be used. + When <code>DETECT</code> the framework attempts to detect the MimeType (as well as charset) when not known. Default: ANY @@ -1664,7 +1823,7 @@ - Enables security for this listener. If you wish to use the application servers authorisation roles [AUTHROLE], you need to enable them globally for all ApiListeners with the `servlet.ApiListenerServlet.securityRoles=IbisTester,IbisWebService` property Default: <code>NONE</code> + Enables security for this listener. If you wish to use the application servers authorization roles [AUTHROLE], you need to enable them globally for all ApiListeners with the <code>servlet.ApiListenerServlet.securityRoles=IbisTester,IbisWebService</code> property Default: <code>NONE</code> @@ -1672,7 +1831,7 @@ - Only active when AuthenticationMethod=AUTHROLE. Comma separated list of authorization roles which are granted for this service, eq. IbisTester,IbisObserver", ""}) + Only active when AuthenticationMethod=AUTHROLE. Comma separated list of authorization roles which are granted for this service, eq. <code>IbisTester,IbisObserver</code> @@ -1702,7 +1861,7 @@ - Session key that provides the Content-Disposition header in the response + Session key that provides the <code>Content-Disposition</code> header in the response @@ -1717,7 +1876,7 @@ - Header to extract JWT from + Header to extract JWT from Default: <code>Authorization</code> @@ -1727,22 +1886,22 @@ - Comma separated key value pairs to exactly match with JWT payload. e.g. "sub=UnitTest, aud=test" + Comma separated key value pairs to exactly match with JWT payload. e.g. <code>sub=UnitTest, aud=test</code> - Comma separated key value pairs to one-of match with JWT payload. e.g. "appid=a,appid=b" + Comma separated key value pairs to one-of match with JWT payload. e.g. <code>appid=a,appid=b</code> - Claim name which specifies the role + Claim name which specifies the role (maps to <code>IsUserInRolePipe</code>) - Claim name which specifies the principal name (maps to GetPrincipalPipe) + Claim name which specifies the principal name (maps to <code>GetPrincipalPipe</code>) @@ -1781,6 +1940,14 @@ Optional base folder, that serves as root for all other folders + + + Determines the contents of the message that is sent to the pipeline. The value of the attribute matching the searchKey is returned when using <code>ATTRIBUTE</code> Default: PATH + + + + + @@ -1792,81 +1959,144 @@ Name of the listener - - - - - - - - - - - - - Determines the contents of the message that is sent to the pipeline. Can be 'name', for the filename, 'path', for the full file path, 'contents' for the contents of the file, 'info' for file information. For any other value, the attributes of the file are searched and used Default: path - - - - - - - - - - + - Charset to be used for extracting the contents + Folder that is scanned for files. If not set, the root is scanned - + - OutputFormat of message for messageType=info Default: XML + Folder where files are stored <i>while</i> being processed - - - - - - - - - - - - - + - protocol of ESB service to be called + Folder where files are stored <i>after</i> being processed - - - - + - if true, all JMS properties in the request starting with "ae_" are copied to the reply. Default: false + Folder where files are stored <i>after</i> being processed, in case the exit-state was not equal to <code>success</code> - + - if messageProtocol=RR, default value is: true Default: false + Folder where messages from the error folder can be put on Hold, temporarily - + - if messageProtocol=FF, default value is: false Default: true + Folder where a copy of every file that is received is stored - + - Comma separated list of all XPath keys that need to be logged. (overrides <code>msg.log.keys</code> property) + If set to <code>true</code>, the folders to look for files and to move files to when being processed and after being processed are created if they are specified and do not exist Default: false - - - + + + If set <code>true</code>, the file processed will be deleted after being processed, and not stored Default: false + + + + + Number of copies held of a file with the same name. Backup files have a dot and a number suffixed to their name. If set to 0, no backups will be kept. Default: 0 + + + + + If set <code>true</code>, the destination file will be deleted if it already exists Default: false + + + + + If <code>true</code>, the file modification time is used in addition to the filename to determine if a file has been seen before Default: false + + + + + Minimal age of file <i>in milliseconds</i>, to avoid receiving a file while it is still being written Default: 1000 + + + + + Key of Property to use as messageId. If not set, the filename of the file as it was received in the inputFolder is used as the messageId Default: for MailFileSystems: Message-ID + + + + + If set <code>true</code>, no browsers for process folders are generated Default: false + + + + + Filter of files to look for in inputFolder e.g. '*.inp'. + + + + + Filter of files to be excluded when looking in inputFolder. + + + + + If set, an XML with all message properties is provided under this key + + + + + Charset to be used for extracting the contents + + + + + OutputFormat of message for messageType=info Default: XML + + + + + + + + + + + + + + + + + protocol of ESB service to be called + + + + + + + + if true, all JMS properties in the request starting with "ae_" are copied to the reply. Default: false + + + + + if messageProtocol=RR, default value is: true Default: false + + + + + if messageProtocol=FF, default value is: false Default: true + + + + + Comma separated list of all XPath keys that need to be logged. (overrides <code>msg.log.keys</code> property) + + + + + @@ -1914,7 +2144,7 @@ - + @@ -2123,7 +2353,7 @@ - Comma separated list of fields to try as response address Default: replyTo,from,sender,Return-Path + Comma separated list of fields to try as response address Default: <code>replyTo,from,sender,Return-Path</code> @@ -2235,7 +2465,7 @@ - If <code>true</code>, the hostname in the certificate will be checked against the actual hostname of the peer + If <code>true</code>, the hostname in the certificate will be checked against the actual hostname of the peer Default: false @@ -2254,55 +2484,37 @@ - + Determines the contents of the message that is sent to the Pipeline. can be one of: <ul> - <li><code>email</code>, for an XML containing most relevant information, except the body and the attachments</li> - <li><code>contents</code>, for the body of the message</li> - <li><code>mime</code>, for the MIME contents of the message</li> - <li><code>name</code> or <code>path</code>, for an internal handle of mail message, that can be used by a related MailFileSystemSender</li> - <li>the key of any header present in the message context</li> - </ul> Default: email + <li><code>EMAIL</code>, for an XML containing most relevant information, except the body and the attachments</li> + <li><code>CONTENTS</code>, for the body of the message</li> + <li><code>MIME</code>, for the MIME contents of the message</li> + <li><code>NAME</code> or <code>PATH</code>, for an internal handle of mail message, that can be used by a related MailFileSystemSender</li> + <li><code>HEADER</code>, for the value of the header matching the searchKey in the message context</li> + </ul> Default: EMAIL + + + + + + + + + + - Name of the listener - - - - - - - - - - - - - - - - - - - - - - Charset to be used for extracting the contents - - - - - OutputFormat of message for messageType=info Default: XML + Name of the listener by which it can be found by the org.frankframework.senders.FrankSender. If this + is not configured, the name will default to the name of the org.frankframework.core.Adapter. + The name of the <code>FrankListener</code> must be unique across the configuration. - - - @@ -2312,6 +2524,14 @@ + + + Determines the contents of the message that is sent to the pipeline. The value of the attribute matching the searchKey is returned when using <code>ATTRIBUTE</code> Default: PATH + + + + + pathname of the file or directory to list. Default: Home folder of the ftp user @@ -2451,7 +2671,7 @@ - (ftps) If <code>true</code>, the hostname in the certificate will be checked against the actual hostname of the peer + (ftps) If <code>true</code>, the hostname in the certificate will be checked against the actual hostname of the peer Default: false @@ -2547,7 +2767,7 @@ - Comma separated list of fields to try as response address Default: replyTo,from,sender,Return-Path + Comma separated list of fields to try as response address Default: <code>replyTo,from,sender,Return-Path</code> @@ -2709,29 +2929,30 @@ - Field containing the status of the message. For optimal performance, and index should exist that starts with this field, contains all fields that are used with a fixed value in the select condition, and end with the orderField. + Field containing the status of the message. + <b>NB: For optimal performance, an index should exist that starts with this field, followed by all fields that are used with a fixed value in the select condition, and end with the <code>orderField</code>. - (optional) Field used to store the date and time of the last change of the statusField + (optional) Field used to store the date and time of the last change of the <code>statusField</code> - (optional) Field used to store the reason of the last change of the statusField + (optional) Field used to store the reason of the last change of the <code>statusField</code> - (optional) Value of statusField indicating row is available to be processed. If not specified, any row not having any of the other status values is considered available. + (optional) Value of <code>statusField</code> indicating row is available to be processed. If not specified, any row not having any of the other status values is considered available. - Value of statusField indicating the processing of the row resulted in an error + Value of <code>statusField</code> indicating the processing of the row resulted in an error @@ -2741,12 +2962,12 @@ - Value of status field indicating is being processed. Can be left emtpy if database has SKIP LOCKED functionality and the Receiver can be (and is) set to Required or RequiresNew. + Value of <code>statusField</code> indicating is being processed. Can be left emtpy if database has <code>SKIP LOCKED</code> functionality and the <code>transactionAttribute</code> of the <code>Receiver</code> can be (and is) set to <code>Required</code> or <code>RequiresNew</code>. - Value of status field indicating message is on Hold, temporarily + Value of <code>statusField</code> indicating message is on Hold, temporarily @@ -2818,17 +3039,18 @@ - Field containing the status of the message. For optimal performance, and index should exist that starts with this field, contains all fields that are used with a fixed value in the select condition, and end with the orderField. Default: TYPE + Field containing the status of the message. + <b>NB: For optimal performance, an index should exist that starts with this field, followed by all fields that are used with a fixed value in the select condition, and end with the <code>orderField</code>. Default: TYPE - (optional) Field used to store the date and time of the last change of the statusField Default: MESSAGEDATE + (optional) Field used to store the date and time of the last change of the <code>statusField</code> Default: MESSAGEDATE - (optional) Field used to store the reason of the last change of the statusField Default: COMMENTS + (optional) Field used to store the reason of the last change of the <code>statusField</code> Default: COMMENTS @@ -2843,7 +3065,7 @@ - Value of statusField indicating the processing of the row resulted in an error Default: <code>E</code> + Value of <code>statusField</code> indicating the processing of the row resulted in an error Default: <code>E</code> @@ -2980,11 +3202,6 @@ Can be either <code>/rest</code> or <code>/rest-public</code> and must correspond with the available RestListenerServlet path(s). - - - Indicates whether this listener supports a view (and a link should be put in the ibis console) Default: if <code>method=get</code> then <code>true</code>, else <code>false</code> - - Comma separated list of authorization roles which are granted for this rest service Default: IbisAdmin,IbisDataAdmin,IbisTester,IbisObserver,IbisWebService @@ -3023,6 +3240,12 @@ If set to true the ibis will automatically create an etag Default: false + + + Uses an JsonPipe to convert the json-input to xml, and xml-output to json. + Use with caution, a properly configured Input/Output-wrapper can do much more and is more robust! Default: true + + @@ -3033,6 +3256,14 @@ + + + Determines the contents of the message that is sent to the pipeline. The value of the attribute matching the searchKey is returned when using <code>ATTRIBUTE</code> Default: PATH + + + + + Hostname of the SMB share. @@ -3163,6 +3394,14 @@ + + + Determines the contents of the message that is sent to the pipeline. The value of the attribute matching the searchKey is returned when using <code>ATTRIBUTE</code> Default: PATH + + + + + Path of the file or directory to start working. Default: Home folder of the sftp user @@ -3338,7 +3577,7 @@ - + @@ -3424,7 +3663,7 @@ - If <code>true</code>, the the cache is reloaded after the JVM restarts Default: false + If <code>true</code>, the cache is stored on disk and survives configuration reloads & JVM restarts. Default: false @@ -3458,7 +3697,7 @@ - namespace defintions for keyxpath. must be in the form of a comma or space separated list of <code>prefix=namespaceuri</code>-definitions + namespace defintions for keyxpath. must be in the form of a comma or space separated list of <code>prefix=namespaceuri</code> definitions @@ -3488,7 +3727,7 @@ - namespace defintions for valuexpath. must be in the form of a comma or space separated list of <code>prefix=namespaceuri</code>-definitions + namespace defintions for valuexpath. must be in the form of a comma or space separated list of <code>prefix=namespaceuri</code> definitions @@ -3525,7 +3764,16 @@ - Sender to work with Amazon S3. + Sender to work with the Amazon S3 Filesystem. + <p> + In addition to regular parameters for filesystem senders, it is possible + to set custom user-metadata on S3 files by prefixing parameter names with + <code>FileAttribute.</code>. + This prefix will be not be part of the actual metadata property name. + </p> + <p> + The string value of these parameters will be used as value of the custom metadata attribute. + </p> @@ -3539,46 +3787,39 @@ Sender to obtain information from and write to a CMIS application. - <p> - When <code>action</code>=<code>get</code> the input (xml string) indicates the id of the document to get. This input is mandatory. + When <code>action=get</code> the input (xml string) indicates the id of the document to get. This input is mandatory. </p> <p> <b>Example:</b> - <pre><code> - &lt;cmis&gt; - &lt;id&gt;documentId&lt;/id&gt; - &lt;/cmis&gt; - </code></pre> + <pre><code>&lt;cmis&gt; + &lt;id&gt;documentId&lt;/id&gt; + &lt;/cmis&gt;</code></pre> </p> <p> - When <code>action</code>=<code>delete</code> the input (xml string) indicates the id of the document to get. This input is mandatory. + When <code>action=delete</code> the input (xml string) indicates the id of the document to get. This input is mandatory. </p> <p> <b>Example:</b> - <pre><code> - &lt;cmis&gt; - &lt;id&gt;documentId&lt;/id&gt; - &lt;/cmis&gt; - </code></pre> + <pre><code>&lt;cmis&gt; + &lt;id&gt;documentId&lt;/id&gt; + &lt;/cmis&gt;</code></pre> </p> <p> - When <code>action</code>=<code>create</code> the input (xml string) indicates document properties to set. This input is optional. + When <code>action=create</code> the input (xml string) indicates document properties to set. This input is optional. </p> <p> <b>Example:</b> - <pre><code> - &lt;cmis&gt; - &lt;name&gt;Offerte&lt;/name&gt; - &lt;objectTypeId&gt;NNB_Geldlening&lt;/objectTypeId&gt; - &lt;mediaType&gt;application/pdf&lt;/mediaType&gt; - &lt;properties&gt; - &lt;property name="ArrivedAt" type="datetime" formatString="yyyy-MM-dd'T'HH:mm:ss.SSSz"&gt;2014-11-27T16:43:01.268+0100&lt;/property&gt; - &lt;property name="ArrivedBy"&gt;HDN&lt;/property&gt; - &lt;property name="DocumentType"&gt;Geldlening&lt;/property&gt; - &lt;/properties&gt; - &lt;/cmis&gt; - </code></pre> + <pre><code>&lt;cmis&gt; + &lt;name&gt;Offerte&lt;/name&gt; + &lt;objectTypeId&gt;NNB_Geldlening&lt;/objectTypeId&gt; + &lt;mediaType&gt;application/pdf&lt;/mediaType&gt; + &lt;properties&gt; + &lt;property name=&quot;ArrivedAt&quot; type=&quot;datetime&quot; formatString=&quot;yyyy-MM-dd'T'HH:mm:ss.SSSz&quot;&gt;2014-11-27T16:43:01.268+0100&lt;/property&gt; + &lt;property name=&quot;ArrivedBy&quot;&gt;HDN&lt;/property&gt; + &lt;property name=&quot;DocumentType&quot;&gt;Geldlening&lt;/property&gt; + &lt;/properties&gt; + &lt;/cmis&gt;</code></pre> </p> <p> @@ -3601,42 +3842,38 @@ </table> </p> <p> - When <code>action</code>=<code>find</code> the input (xml string) indicates the query to perform. + When <code>action=find</code> the input (xml string) indicates the query to perform. </p> <p> <b>Example:</b> - <pre><code> - &lt;query&gt; - &lt;statement&gt;select * from cmis:document&lt;/statement&gt; - &lt;maxItems&gt;10&lt;/maxItems&gt; - &lt;skipCount&gt;0&lt;/skipCount&gt; - &lt;searchAllVersions&gt;true&lt;/searchAllVersions&gt; - &lt;includeAllowableActions&gt;true&lt;/includeAllowableActions&gt; - &lt;/query&gt; - </code></pre> + <pre><code>&lt;query&gt; + &lt;statement&gt;select * from cmis:document&lt;/statement&gt; + &lt;maxItems&gt;10&lt;/maxItems&gt; + &lt;skipCount&gt;0&lt;/skipCount&gt; + &lt;searchAllVersions&gt;true&lt;/searchAllVersions&gt; + &lt;includeAllowableActions&gt;true&lt;/includeAllowableActions&gt; + &lt;/query</code></pre> </p> <p> - When <code>action</code>=<code>update</code> the input (xml string) indicates document properties to update. + When <code>action=update</code> the input (xml string) indicates document properties to update. </p> <p> <b>Example:</b> - <pre><code> - &lt;cmis&gt; - &lt;id&gt;123456789&lt;/id&gt; - &lt;properties&gt; - &lt;property name="ArrivedAt" type="datetime" formatString="yyyy-MM-dd'T'HH:mm:ss.SSSz"&gt;2014-11-27T16:43:01.268+0100&lt;/property&gt; - &lt;property name="ArrivedBy"&gt;HDN&lt;/property&gt; - &lt;property name="DocumentType"&gt;Geldlening&lt;/property&gt; - &lt;/properties&gt; - &lt;/cmis&gt; - </code></pre> + <pre><code>&lt;cmis&gt; + &lt;id&gt;123456789&lt;/id&gt; + &lt;properties&gt; + &lt;property name=&quot;ArrivedAt&quot; type=&quot;datetime&quot; formatString=&quot;yyyy-MM-dd'T'HH:mm:ss.SSSz&quot;&gt;2014-11-27T16:43:01.268+0100&lt;/property&gt; + &lt;property name=&quot;ArrivedBy&quot;&gt;HDN&lt;/property&gt; + &lt;property name=&quot;DocumentType&quot;&gt;Geldlening&lt;/property&gt; + &lt;/properties&gt; + &lt;/cmis&gt;</code></pre> </p> <p> <table border="1"> <tr><th>attributes</th><th>description</th><th>default</th></tr> <tr><td>id</td><td>mandatory property "cmis:objectId" which indicates the document to update</td><td>&nbsp;</td></tr> - <tr><td>property</td><td>custom document property to update. See <code>action</code>=<code>create</code> for possible attributes</td><td>&nbsp;</td></tr> + <tr><td>property</td><td>custom document property to update. See <code>action=create</code> for possible attributes</td><td>&nbsp;</td></tr> </table> </p> @@ -3760,6 +3997,215 @@ + + + Sender to send a message to another Frank! Adapter, or an external program running in the same JVM as the Frank!Framework. + <p> + Sends a message to another Frank!Framework-adapter in the same Frank!Framework instance, or an external program running in + the same JVM as the Frank!Framework. If the callee exits with an <code>&lt;Exit/&gt;</code> that has state PipeLine.ExitState#ERROR, + an error is considered to happen in the caller which means that the <code>exception</code> forward is followed if it is present. + </p> + <p> + Returns <code>exit.code</code> as forward name to the SenderPipe, provided that <code>exit.code</code> can be parsed as integer. + For example, if the called adapter has an exit state with code + <code>2</code>, then the SenderPipe supports a forward with name <code>2</code> + that is followed when the called adapter exits with the mentioned exit. This does not work if the code is for example <code>c2</code>. + </p> + <p> + A FrankSender makes a call to either an Adapter or an external program by setting the #scope. By default the scope is <code>ADAPTER</code>. + </p> + <p/> + + <h3>Configuration of the Adapter to be called</h3> + <p> + A call to another Adapter in the same Frank!Framework instance is preferably made using the combination + of a FrankSender configured with the name of the adapter. + </p> + <h4>Configuring FrankSender and Adapter</h4> + <ul> + <li>Define a SenderPipe with a FrankSender</li> + <li>Set the attribute <code>target</code> to <i>targetAdapterName</i></li> + <li>If the adapter is in another Configuration deployed in the same Frank!Framework instance, then set <code>target</code> to <code>targetConfigurationName/targetAdapterName</code> (note the slash-separator between Configuration name and Adapter name).</li> + </ul> + In the Adapter to be called: + <ul> + <li>The adapter does not need to have a receiver configured to be called from a FrankSender,</li> + <li>The adapter will run in the same transaction as the calling adapter,</li> + <li>If the called adapter does not to run in its own transaction, set the transaction attributes on the PipeLine attribute of this adapter + or on the SenderPipe that contains this <code>FrankSender</code>.</li> + </ul> + + <h4>Configuring FrankSender with FrankListener</h4> + <ul> + <li>Define a SenderPipe with a FrankSender</li> + <li>In the target adapter, define a org.frankframework.receivers.Receiver with a FrankListener</li> + <li>Give a unique name to the listener: FrankListener#setName(String). If the name is not set, the name of the Adapter will be used.</li> + <li>Set the #setScope(Scope) to <code>LISTENER</code> and the #setTarget(String) to the listener name as per previous point</li> + <li>If the listener is in a different configuration, prefix the listener name with the name of the configuration and a slash (<code>/</code>) as separator between configuration and listener name</li> + </ul> + + <h4>Configuring FrankSender and Remote Application</h4> + <p> + <em>NB:</em> Please make sure that the IbisServiceDispatcher-1.4.jar or newer is present on the class path of the server. For more information, see: + </p> + <ul> + <li>Define a SenderPipe with a FrankSender</li> + <li>Set the attribute <code>scope</code> to either <code>JVM</code> for a Java application, or to <code>DLL</code> for code loaded from a DLL</li> + <li>Set the attribute <code>target</code> to the service-name the other application used to register itself</li> + </ul> + <p> + In the other application: + <ul> + <li>Implement the interface <code>nl.nn.adapterframework.dispatcher.RequestProcessor</code> from the IbisServiceDispatcher library</li> + <li>Register the instance with the <code>nl.nn.adapterframework.dispatcher.DispatcherManager</code> obtained via the <code>nl.nn.adapterframework.dispatcher.DispatcherManagerFactory</code></li> + <li>See the implementation code of the <code>JavaListener</code> in the Frank!Framework for an example</li> + </ul> + </p> + <p> + See also the repository of the IbisServiceDispatcher: + <a href="https://github.com/frankframework/servicedispatcher">https://github.com/frankframework/servicedispatcher</a> + </p> + + <h4>Using FrankSender to call an adapter from Larva tests</h4> + <p> + You can configure a FrankSender in Larva property files to use the FrankSender to invoke an adapter to test. When doing this, keep the following in mind: + <ul> + <li>If you leave the default scope as <code>ADAPTER</code>, then the <code>target</code> property needs to have both configuration name and adapter name, separated by a <code>/</code> character</li> + <li>When scope is left as default, the receiver and JavaListener are skipped and no transaction is started unless it is set on the adapter's <code>PipeLine</code></li> + <li>If you do need a transaction and the adapter has a JavaListener that has org.frankframework.receivers.JavaListener#setServiceName(String) defined, you can use the FrankSender with scope <code>JVM</code> + and set the <code>target</code> attribute to the <code>serviceName</code> attribute of the <code>JavaListener</code>.</li> + </ul> + </p> + + <h3>Migrating Existing Configurations</h3> + <p> + When one adapter (named A) needs to call another adapter (named B) like a subroutine, you will usually have an IbisLocalSender or an IbisJavaSender + in adapter A, and a org.frankframework.receivers.JavaListener in adapter B. + </p> + <p> + <em>NB:</em> For the example it is assumed that all adapters are defined in the same configuration. + </p> + + <h4>Example of Existing Configuration</h4> + The existing configuration might look like this in the calling adapter: + <pre><code>&lt;module&gt; + &lt;adapter name=&quot;Adapter A&quot;&gt; + &lt;receiver name=&quot;Adapter A Receiver&quot;&gt; + &lt;listener name=&quot;Adapter A Listener&quot; + className=&quot;org.frankframework...&quot; etc/&gt; + &lt;/receiver&gt; + &lt;pipeline firstPipe=&quot;...&quot;&gt; + &lt;pipe name=&quot;send&quot; className=&quot;org.frankframework.pipes.SenderPipe&quot;&gt; + &lt;sender className=&quot;org.frankframework.senders.IbisJavaSender&quot; + serviceName=&quot;service-Adapter-B&quot; /&gt; + &lt;forward name=&quot;success&quot; path=&quot;...&quot; /&gt; + &lt;/pipe&gt; + &lt;/pipeline&gt; + &lt;/adapter&gt; + &lt;/module&gt;</code></pre> + + Or like using the modern XML XSD and an IbisLocalSender instead: + <pre><code>&lt;Module&gt; + &lt;Adapter name=&quot;Adapter A&quot;&gt; + &lt;Receiver name=&quot;Adapter A Receiver&quot;&gt; + ... Listener setup and other configuration + &lt;/Receiver&gt; + &lt;Pipeline&gt; + &lt;SenderPipe name=&quot;send&quot;&gt; + &lt;IbisLocalSender name=&quot;call Adapter B&quot; + javaListener=&quot;Adapter B Listener&quot;/&gt; + &lt;Forward name=&quot;success&quot; path=&quot;EXIT&quot; /&gt; + &lt;/SenderPipe&gt; + &lt;/Pipeline&gt; + &lt;/Adapter&gt; + &lt;/Module&gt;</code></pre> + + In the receiving adapter B the listener would have been configured like this: + <pre><code>&lt;Module&gt; + &lt;Adapter name=&quot;adapter B&quot;&gt; + &lt;Receiver name=&quot;Receiver B&quot;&gt; + &lt;JavaListener name=&quot;Adapter B Listener&quot; serviceName=&quot;service-Adapter-B&quot;/&gt; + &lt;/Receiver&gt; + &lt;Pipeline&gt; + ... + &lt;/Pipeline&gt; + &lt;/Adapter&gt; + &lt;/Module&gt;</code></pre> + <p/> + + <h4>Rewritten Example Configuration With FrankSender</h4> + This example shows the most simple way of using the FrankSender to call another adapter with least amount of overhead. + + <pre><code>&lt;Module&gt; + &lt;Adapter name=&quot;Adapter A&quot;&gt; + &lt;Receiver name=&quot;Adapter A Receiver&quot;&gt; + ... Listener setup and other configuration + &lt;/Receiver&gt; + &lt;Pipeline&gt; + &lt;SenderPipe name=&quot;send&quot;&gt; + &lt;!-- when scope=&quot;ADAPTER&quot;, then target is directly the name of the adapter you want to call --&gt; + &lt;FrankSender name=&quot;call Adapter C&quot; + scope=&quot;ADAPTER&quot; + target=&quot;adapter B&quot; + /&gt; + &lt;Forward name=&quot;success&quot; path=&quot;EXIT&quot; /&gt; + &lt;/SenderPipe&gt; + &lt;/Pipeline&gt; + &lt;/Adapter&gt; + &lt;Adapter name=&quot;adapter B&quot;&gt; + &lt;!-- No receiver needed for FrankSender in this scenario --&gt; + &lt;Pipeline&gt; + ... Exits, Pipes etc + &lt;/Pipeline&gt; + &lt;/Adapter&gt; + &lt;/Module&gt;</code></pre> + + <h4>Rewritten Example Configuration With FrankSender and FrankListener</h4> + This example shows why you might want to call the other adapter via the FrankListener. This adds a bit more overhead to the call + of the sub-adapter for the extra error-handling done by the target receiver. + + <pre><code>&lt;Module&gt; + &lt;Adapter name=&quot;Adapter A&quot;&gt; + &lt;Receiver name=&quot;Adapter A Receiver&quot;&gt; + ... Listener setup and other configuration + &lt;/Receiver&gt; + &lt;Pipeline&gt; + &lt;SenderPipe name=&quot;send&quot;&gt; + &lt;!-- when scope=&quot;LISTENER&quot;, then target is directly the name of the FrankListener in the adapter you want to call --&gt; + &lt;FrankSender + scope=&quot;LISTENER&quot; + target=&quot;Adapter B Listener&quot;/&gt; + &lt;Forward name=&quot;success&quot; path=&quot;EXIT&quot; /&gt; + &lt;/SenderPipe&gt; + &lt;/Pipeline&gt; + &lt;/Adapter&gt; + &lt;Adapter name=&quot;adapter B&quot;&gt; + &lt;!-- Messages will only be sent to the error storage if: + - The target receiver is not transactional, and has maxTries=&quot;0&quot;, or + - The target receiver is transaction, and the Sender is set up to retry sending on error + For internal adapters, sending / receiving with retries might not make sense so the example does not show that. + --&gt; + &lt;Receiver name=&quot;Receiver B&quot; maxRetries=&quot;0&quot; transactionAttribute=&quot;NotSupported&quot;&gt; + &lt;!-- Listener name is optional, defaults to Adapter name --&gt; + &lt;FrankListener name=&quot;Adapter B Listener&quot;/&gt; + &lt;!-- This adapter now has an error storage -- without Receiver and FrankListener the sub-adapter couldn't have that --&gt; + &lt;JdbcErrorStorage slotId=&quot;Adapter B - Errors&quot; /&gt; + &lt;/Receiver&gt; + &lt;!-- If transactions are required, set transaction-attribute on the Pipeline --&gt; + &lt;Pipeline transactionAttribute=&quot;RequiresNew&quot;&gt; + ... Exits, Pipes etc + &lt;/Pipeline&gt; + &lt;/Adapter&gt; + &lt;/Module&gt;</code></pre> + + + + + + + + + @@ -3816,14 +4262,18 @@ - Posts a message to another IBIS-adapter or application in the same JVM using IbisServiceDispatcher. - + Posts a message to another Frank!Framework-adapter or an application in the same JVM using IbisServiceDispatcher. + <p> An IbisJavaSender makes a call to a Receiver with a JavaListener or any other application in the same JVM that has registered a <code>RequestProcessor</code> with the IbisServiceDispatcher. - + </p> + The IbisJavaSender is now considered to be legacy. The new way to call another adapter or java application from your own + adapter is by using the FrankSender. + </p> <h4>configuring IbisJavaSender and JavaListener</h4> <ul> - <li>Define a SenderPipe with an IbisJavaSender</li> + <li><em>NB:</em> Using IbisJavaSender to call another adapter is inefficient and therefore not recommended. It is much more efficient to use for this a FrankSender or IbisLocalSender.</li> + <li>Define a org.frankframework.pipes.SenderPipe with an IbisJavaSender</li> <li>Set the attribute <code>serviceName</code> to <i>yourExternalServiceName</i></li> </ul> In the Adapter to be called: @@ -3831,7 +4281,8 @@ <li>Define a Receiver with a JavaListener</li> <li>Set the attribute <code>serviceName</code> to <i>yourExternalServiceName</i></li> </ul> - N.B. Please make sure that the IbisServiceDispatcher-1.4.jar or newer is present on the class path of the server. + N.B. Please make sure that the IbisServiceDispatcher-1.4.jar or newer is present on the class path of the server. For more information, see: + <a href="https://github.com/frankframework/servicedispatcher">https://github.com/frankframework/servicedispatcher</a> @@ -3843,24 +4294,27 @@ - Posts a message to another IBIS-adapter in the same IBIS instance. If the callee exits with an &lt;<code>exit</code>&gt; + Posts a message to another Frank!Framework-adapter in the same Frank!Framework instance. If the callee exits with an &lt;<code>exit</code>&gt; that has state PipeLine.ExitState#ERROR, an error is considered to happen in the caller which means that the <code>exception</code> forward is followed if it is present. - <p/> - <p/> + <p> + The IbisLocalSender is now considered to be legacy. The new way to call another adapter from your own + adapter is by using the FrankSender. + </p> + <p> Returns exit.code as forward name to SenderPipe provided that exit.code can be parsed as integer. For example, if the called adapter has an exit state with code <code>2</code>, then the SenderPipe supports a forward with name <code>2</code> that is followed when the called adapter exits with the mentioned exit. This does not work if the code is for example <code>c2</code>. - <p/> - <p/> - An IbisLocalSender makes a call to a Receiver with either a WebServiceListener + </p> + <p> + An IbisLocalSender makes a call to a org.frankframework.receivers.Receiver with either a WebServiceListener or a JavaListener. - + </p> <h3>Configuration of the Adapter to be called</h3> - A call to another Adapter in the same IBIS instance is preferably made using the combination + A call to another Adapter in the same Frank!Framework instance is preferably made using the combination of an IbisLocalSender and a JavaListener. If, however, a Receiver with a WebServiceListener is already present, that can be used in some cases, too. @@ -3875,7 +4329,7 @@ <li>Define a Receiver with a JavaListener</li> <li>Set the attribute <code>name</code> to <i>yourServiceName</i></li> <li>Do not set the attribute <code>serviceName</code>, except if the service is to be called also - from applications other than this IBIS-instance</li> + from applications other than this Frank!Framework-instance</li> </ul> <h4>configuring IbisLocalSender and WebServiceListener</h4> @@ -3901,8 +4355,7 @@ - Requires the net.bankid.merchant.library V1.06+. - Compile with Java 1.7+ + Requires the net.bankid.merchant.library V1.2.9 @@ -3932,19 +4385,19 @@ - Sender used to run JavaScript code using J2V8 + Sender used to run JavaScript code using `JavascriptEngine` implementations. <p> - This sender can execute a function of a given javascript file, the result of the function will be the output of the sender. - The parameters of the javascript function to run are given as parameters by the adapter configuration + This sender can execute a function of a given Javascript file, the result of the function will be the output of the sender. + The parameters of the Javascript function to run are given as parameters by the adapter configuration The sender doesn't accept nor uses the given input, instead for each argument for the #jsFunctionName method, you will need to create a parameter on the sender. </p> <p> - The result of the javascript function should be of type String, or directly convertible to String from a primitive type + The result of the Javascript function should be of type String, or directly convertible to String from a primitive type or an array of primitive types / strings, as the output of the sender will be of type String. </p> <p> - Failure to ensure the output is a string may mean the result will look like {@code [Object object]}. + Failure to ensure the output is a string may mean the result will look like <code>[Object object]</code>. </p> @@ -3988,40 +4441,32 @@ <h2>example</h2> Consider the following configuration example: - <code> - <pre> - &lt;sender - className="org.frankframework.ldap.LdapSender" - ldapProviderURL="ldap://servername:389/o=ing" - operation="read" - attributesToReturn="givenName,sn,telephoneNumber" &gt; - &lt;param name="entryName" xpathExpression="entryName" /&gt; - &lt;/sender&gt; - </pre> - </code> + <pre><code>&lt;sender + className=&quot;org.frankframework.ldap.LdapSender&quot; + ldapProviderURL=&quot;ldap://servername:389/o=ing&quot; + operation=&quot;read&quot; + attributesToReturn=&quot;givenName,sn,telephoneNumber&quot; &gt; + &lt;param name=&quot;entryName&quot; xpathExpression=&quot;entryName&quot; /&gt; + &lt;/sender&gt;</code></pre> <br/> This may result in the following output: - <code><pre> - &lt;ldap&gt; - &lt;entryName&gt;uid=srp,ou=people&lt;/entryName&gt; - - &lt;attributes&gt; - &lt;attribute attrID="givenName"&gt; - &lt;value&gt;Jan&lt;/value&gt; - &lt;/attribute&gt; - - &lt;attribute attrID="telephoneNumber"&gt; - &lt;value&gt;010 5131123&lt;/value&gt; - &lt;value&gt;06 23456064&lt;/value&gt; - &lt;/attribute&gt; - - &lt;attribute attrID="sn"&gt; - &lt;value&gt;Jansen&lt;/value&gt; - &lt;/attribute&gt; - &lt;/attributes&gt; - &lt;/ldap&gt; - </pre></code> <br/> + <pre><code>&lt;ldap&gt; + &lt;entryName&gt;uid=srp,ou=people&lt;/entryName&gt; + &lt;attributes&gt; + &lt;attribute attrID=&quot;givenName&quot;&gt; + &lt;value&gt;Jan&lt;/value&gt; + &lt;/attribute&gt; + &lt;attribute attrID=&quot;telephoneNumber&quot;&gt; + &lt;value&gt;010 5131123&lt;/value&gt; + &lt;value&gt;06 23456064&lt;/value&gt; + &lt;/attribute&gt; + &lt;attribute attrID=&quot;sn&quot;&gt; + &lt;value&gt;Jansen&lt;/value&gt; + &lt;/attribute&gt; + &lt;/attributes&gt; + &lt;/ldap&gt;</code></pre> + <br/> Search or Read? @@ -4031,41 +4476,40 @@ together with the attributes. If the specified attributes are null or empty all the attributes of all the entries within the specified context are returned. - Sample result of a <code>read</code> operation:<br/><code><pre> - &lt;attributes&gt; - &lt;attribute&gt; - &lt;attribute name="employeeType" value="Extern"/&gt; - &lt;attribute name="roomNumber" value="DP 2.13.025"/&gt; - &lt;attribute name="departmentCode" value="358000"/&gt; - &lt;attribute name="organizationalHierarchy"&gt; - &lt;item value="ou=ING-EUR,ou=Group,ou=Organization,o=ing"/&gt; - &lt;item value="ou=OPS&amp;IT,ou=NL,ou=ING-EUR,ou=Group,ou=Organization,o=ing"/&gt; - &lt;item value="ou=000001,ou=OPS&amp;IT,ou=NL,ou=ING-EUR,ou=Group,ou=Organization,o=ing"/&gt; - &lt;/attribute> - &lt;attribute name="givenName" value="Gerrit"/> - &lt;/attributes&gt; - - </pre></code> <br/> - Sample result of a <code>search</code> operation:<br/><code><pre> - &lt;entries&gt; - &lt;entry name="uid=srp"&gt; - &lt;attributes&gt; - &lt;attribute&gt; - &lt;attribute name="employeeType" value="Extern"/&gt; - &lt;attribute name="roomNumber" value="DP 2.13.025"/&gt; - &lt;attribute name="departmentCode" value="358000"/&gt; - &lt;attribute name="organizationalHierarchy"&gt; - &lt;item value="ou=ING-EUR,ou=Group,ou=Organization,o=ing"/&gt; - &lt;item value="ou=OPS&amp;IT,ou=NL,ou=ING-EUR,ou=Group,ou=Organization,o=ing"/&gt; - &lt;item value="ou=000001,ou=OPS&amp;IT,ou=NL,ou=ING-EUR,ou=Group,ou=Organization,o=ing"/&gt; - &lt;/attribute> - &lt;attribute name="givenName" value="Gerrit"/> - &lt;/attributes&gt; - &lt;/entry&gt; - &lt;entry&gt; .... &lt;/entry&gt; - ..... - &lt;/entries&gt; - </pre></code> <br/> + Sample result of a <code>read</code> operation:<br/> + <pre><code>&lt;attributes&gt; + &lt;attribute&gt; + &lt;attribute name=&quot;employeeType&quot; value=&quot;Extern&quot;/&gt; + &lt;attribute name=&quot;roomNumber&quot; value=&quot;DP 2.13.025&quot;/&gt; + &lt;attribute name=&quot;departmentCode&quot; value=&quot;358000&quot;/&gt; + &lt;attribute name=&quot;organizationalHierarchy&quot;&gt; + &lt;item value=&quot;ou=ING-EUR,ou=Group,ou=Organization,o=ing&quot;/&gt; + &lt;item value=&quot;ou=OPS&amp;IT,ou=NL,ou=ING-EUR,ou=Group,ou=Organization,o=ing&quot;/&gt; + &lt;item value=&quot;ou=000001,ou=OPS&amp;IT,ou=NL,ou=ING-EUR,ou=Group,ou=Organization,o=ing&quot;/&gt; + &lt;/attribute&gt; + &lt;attribute name=&quot;givenName&quot; value=&quot;Gerrit&quot;/&gt; + &lt;/attributes&gt;</code></pre> + <br/> + Sample result of a <code>search</code> operation:<br/> + <pre><code>&lt;entries&gt; + &lt;entry name=&quot;uid=srp&quot;&gt; + &lt;attributes&gt; + &lt;attribute&gt; + &lt;attribute name=&quot;employeeType&quot; value=&quot;Extern&quot;/&gt; + &lt;attribute name=&quot;roomNumber&quot; value=&quot;DP 2.13.025&quot;/&gt; + &lt;attribute name=&quot;departmentCode&quot; value=&quot;358000&quot;/&gt; + &lt;attribute name=&quot;organizationalHierarchy&quot;&gt; + &lt;item value=&quot;ou=ING-EUR,ou=Group,ou=Organization,o=ing&quot;/&gt; + &lt;item value=&quot;ou=OPS&amp;IT,ou=NL,ou=ING-EUR,ou=Group,ou=Organization,o=ing&quot;/&gt; + &lt;item value=&quot;ou=000001,ou=OPS&amp;IT,ou=NL,ou=ING-EUR,ou=Group,ou=Organization,o=ing&quot;/&gt; + &lt;/attribute&gt; + &lt;attribute name=&quot;givenName&quot; value=&quot;Gerrit&quot;/&gt; + &lt;/attributes&gt; + &lt;/entry&gt; + &lt;entry&gt; .... &lt;/entry&gt; + ..... + &lt;/entries&gt;</code></pre> + <br/> @@ -4076,6 +4520,18 @@ + + Sender to work with the server local filesystem. + <p> + In addition to regular parameters for filesystem senders, it is possible + to set custom extended attributes on files by prefixing parameter names with + <code>FileAttribute.</code>. + This prefix will be not be part of the actual metadata property name. + </p> + <p> + The string value of these parameters will be used as value of the custom metadata attribute. + </p> + @@ -4119,33 +4575,29 @@ sender that sends a mail specified by an XML message. <p> Sample email.xml: - <code><pre> - &lt;email&gt; - &lt;recipients&gt; - &lt;recipient type="to"&gt;***@hotmail.com&lt;/recipient&gt; - &lt;recipient type="cc"&gt;***@gmail.com&lt;/recipient&gt; - &lt;/recipients&gt; - &lt;from name="*** ***"&gt;***@yahoo.com&lt;/from&gt; - &lt;subject&gt;This is the subject&lt;/subject&gt; - &lt;threadTopic&gt;subject&lt;/threadTopic&gt; - &lt;message&gt;This is the message&lt;/message&gt; - &lt;messageType&gt;text/plain&lt;/messageType&gt;&lt;!-- Optional --&gt; - &lt;messageBase64&gt;false&lt;/messageBase64&gt;&lt;!-- Optional --&gt; - &lt;charset&gt;UTF-8&lt;/charset&gt;&lt;!-- Optional --&gt; - &lt;attachments&gt; - &lt;attachment name="filename1.txt"&gt;This is the first attachment&lt;/attachment&gt; - &lt;attachment name="filename2.pdf" base64="true"&gt;JVBERi0xLjQKCjIgMCBvYmoKPDwvVHlwZS9YT2JqZWN0L1N1YnR5cGUvSW1...vSW5mbyA5IDAgUgo+PgpzdGFydHhyZWYKMzQxNDY2CiUlRU9GCg==&lt;/attachment&gt; - &lt;attachment name="filename3.pdf" url="file:/c:/filename3.pdf"/&gt; - &lt;attachment name="filename4.pdf" sessionKey="fileContent"/&gt; - &lt;/attachments&gt;&lt;!-- Optional --&gt; - &lt;/email&gt; - </pre></code> + <pre><code>&lt;email&gt; + &lt;recipients&gt; + &lt;recipient type=&quot;to&quot;&gt;***@hotmail.com&lt;/recipient&gt; + &lt;recipient type=&quot;cc&quot;&gt;***@gmail.com&lt;/recipient&gt; + &lt;/recipients&gt; + &lt;from name=&quot;*** ***&quot;&gt;***@yahoo.com&lt;/from&gt; + &lt;subject&gt;This is the subject&lt;/subject&gt; + &lt;threadTopic&gt;subject&lt;/threadTopic&gt; + &lt;message&gt;This is the message&lt;/message&gt; + &lt;messageType&gt;text/plain&lt;/messageType&gt;&lt;!-- Optional --&gt; + &lt;messageBase64&gt;false&lt;/messageBase64&gt;&lt;!-- Optional --&gt; + &lt;charset&gt;UTF-8&lt;/charset&gt;&lt;!-- Optional --&gt; + &lt;attachments&gt; + &lt;attachment name=&quot;filename1.txt&quot;&gt;This is the first attachment&lt;/attachment&gt; + &lt;attachment name=&quot;filename2.pdf&quot; base64=&quot;true&quot;&gt;JVBERi0xLjQKCjIgMCBvYmoKPDwvVHlwZS9YT2JqZWN0L1N1YnR5cGUvSW1...vSW5mbyA5IDAgUgo+PgpzdGFydHhyZWYKMzQxNDY2CiUlRU9GCg==&lt;/attachment&gt; + &lt;attachment name=&quot;filename3.pdf&quot; url=&quot;file:/c:/filename3.pdf&quot;/&gt; + &lt;attachment name=&quot;filename4.pdf&quot; sessionKey=&quot;fileContent&quot;/&gt; + &lt;/attachments&gt;&lt;!-- Optional --&gt; + &lt;/email&gt;</code></pre> </p><p> Notice: the XML message must be valid XML. Therefore, especially the message element must be plain text or be wrapped as CDATA. Example: - <code><pre> - &lt;message&gt;&lt;![CDATA[&lt;h1&gt;This is a HtmlMessage&lt;/h1&gt;]]&gt;&lt;/message&gt; - </pre></code> + <pre><code>&lt;message&gt;&lt;![CDATA[&lt;h1&gt;This is a HtmlMessage&lt;/h1&gt;]]&gt;&lt;/message&gt;</code></pre> </p><p> The <code>sessionKey</code> attribute for attachment can contain an inputstream or a string. Other types are not supported at this moment. </p><p> @@ -4188,14 +4640,11 @@ to the adapter around the sender pipe, because errors may occur before the message reaches the sender pipe. <br/><br/> Example configuration: - <code><pre> - &lt;SenderPipe name="Send"&gt; - &lt;MessageStoreSender - slotId="${instance.name}/TestMessageStore" - onlyStoreWhenMessageIdUnique="false" - /&gt; - &lt;/SenderPipe&gt; - </pre></code> + <pre><code>&lt;SenderPipe name=&quot;Send&quot;&gt; + &lt;MessageStoreSender + slotId=&quot;${instance.name}/TestMessageStore&quot; + onlyStoreWhenMessageIdUnique=&quot;false&quot; /&gt; + &lt;/SenderPipe&gt;</code></pre> @@ -4239,7 +4688,8 @@ <p><b>AuthAlias:</b></p> - <p>If you do not want to specify the nonce and the accesstoken used to authenticate with Akamai, you can use the authalias property. The username represents the nonce and the password the accesstoken.</p> + <p>If you do not want to specify the nonce and the access token used to authenticate with Akamai, you can use the authalias property. The username + represents the nonce and the password the access token.</p> @@ -4267,13 +4717,11 @@ This prevents (long) open connections inside Senders and possible connection failures. <b>Example:</b> - <pre><code> - &lt;SenderPipe&gt; + <pre><code>&lt;SenderPipe&gt; &lt;ReconnectSenderWrapper&gt; - &lt;EchoSender myAttribute="myValue" /&gt; + &lt;EchoSender myAttribute=&quot;myValue&quot; /&gt; &lt;/ReconnectSenderWrapper&gt; - &lt;/SenderPipe&gt; - </code></pre> + &lt;/SenderPipe&gt;</code></pre> </p> @@ -4414,7 +4862,7 @@ Collection of Senders, that are executed all at the same time. Once the results are processed, all results will be sent to the resultSender, - while the original sender will return it's result to the pipeline. + while the original sender will return its result to the pipeline. <p>Multiple sub-senders can be configured within the ShadowSender, the minimum amount of senders is 2 (originalSender + resultSender)</p> @@ -4446,79 +4894,73 @@ </ul> </p> <p> - All stored procedure parameters that are not fixed, so specified in the query with a {@code ?}, should - have a corresponding Parameter entry. Output parameters should have {@code mode="OUTPUT"}, or - {@code mode="INOUT"} depending on how the stored procedure is defined. + All stored procedure parameters that are not fixed, so specified in the query with a <code>?</code>, should + have a corresponding IParameter entry. Output parameters should have <code>mode=&quot;OUTPUT&quot;</code>, or + <code>mode=&quot;INOUT&quot;</code> depending on how the stored procedure is defined. </p> <p> <h3>Sample Output for queryType=OTHER</h3> <h4>Basic Example with Only Simple Output Parameters</h4> - <code><pre> - &lt;resultset&gt; - &lt;result param="r1" type="STRING"&gt;MESSAGE-CONTENTS&lt;/result&gt; - &lt;result param="r2" type="STRING"&gt;E&lt;/result&gt; - &lt;/resultset&gt; - </pre></code> + <pre><code>&lt;resultset&gt; + &lt;result param=&quot;r1&quot; type=&quot;STRING&quot;&gt;MESSAGE-CONTENTS&lt;/result&gt; + &lt;result param=&quot;r2&quot; type=&quot;STRING&quot;&gt;E&lt;/result&gt; + &lt;/resultset&gt;</code></pre> <h4>Example with Resultset and Simple Output Parameters</h4> - <code><pre> - &lt;resultset&gt; - &lt;result resultNr="1"&gt; - &lt;fielddefinition&gt; - &lt;field name="FIELDNAME" - type="columnType" - columnDisplaySize="" - precision="" - scale="" - isCurrency="" - columnTypeName="" - columnClassName=""/&gt; - &lt;field ...../&gt; - &lt;/fielddefinition&gt; - &lt;rowset&gt; - &lt;row number="0"&gt; - &lt;field name="TKEY"&gt;MSG-ID&lt;/field&gt; - &lt;field name="TCHAR"&gt;E&lt;/field&gt; - &lt;field name="TMESSAGE"&gt;MESSAGE-CONTENTS&lt;/field&gt; - &lt;field name="TCLOB" null="true"/&gt; - &lt;field name="TBLOB" null="true"/&gt; - &lt;/row&gt; - &lt;row number="1" ...../&gt; - &lt;/rowset&gt; - &lt;/result&gt; - &lt;result param="count" type="INTEGER"&gt;5&lt;/result&gt; - &lt;/resultset&gt; - </pre></code> + <pre><code>&lt;resultset&gt; + &lt;result resultNr=&quot;1&quot;&gt; + &lt;fielddefinition&gt; + &lt;field name=&quot;FIELDNAME&quot; + type=&quot;columnType&quot; + columnDisplaySize=&quot;&quot; + precision=&quot;&quot; + scale=&quot;&quot; + isCurrency=&quot;&quot; + columnTypeName=&quot;&quot; + columnClassName=&quot;&quot;/&gt; + &lt;field ...../&gt; + &lt;/fielddefinition&gt; + &lt;rowset&gt; + &lt;row number=&quot;0&quot;&gt; + &lt;field name=&quot;TKEY&quot;&gt;MSG-ID&lt;/field&gt; + &lt;field name=&quot;TCHAR&quot;&gt;E&lt;/field&gt; + &lt;field name=&quot;TMESSAGE&quot;&gt;MESSAGE-CONTENTS&lt;/field&gt; + &lt;field name=&quot;TCLOB&quot; null=&quot;true&quot;/&gt; + &lt;field name=&quot;TBLOB&quot; null=&quot;true&quot;/&gt; + &lt;/row&gt; + &lt;row number=&quot;1&quot; ...../&gt; + &lt;/rowset&gt; + &lt;/result&gt; + &lt;result param=&quot;count&quot; type=&quot;INTEGER&quot;&gt;5&lt;/result&gt; + &lt;/resultset&gt;</code></pre> <h4>Example with Simple and Cursor Output Parameters</h4> - <code><pre> - &lt;resultset&gt; - &lt;result param="count" type="INTEGER"&gt;5&lt;/result&gt; - &lt;result param="cursor1" type="LIST"&gt; - &lt;fielddefinition&gt; - &lt;field name="FIELDNAME" - type="columnType" - columnDisplaySize="" - precision="" - scale="" - isCurrency="" - columnTypeName="" - columnClassName=""/&gt; - &lt;field ...../&gt; - &lt;/fielddefinition&gt; - &lt;rowset&gt; - &lt;row number="0"&gt; - &lt;field name="TKEY"&gt;MSG-ID&lt;/field&gt; - &lt;field name="TCHAR"&gt;E&lt;/field&gt; - &lt;field name="TMESSAGE"&gt;MESSAGE-CONTENTS&lt;/field&gt; - &lt;field name="TCLOB" null="true"/&gt; - &lt;field name="TBLOB" null="true"/&gt; - &lt;/row&gt; - &lt;row number="1" ..... /&gt; - &lt;/rowset&gt; - &lt;/result&gt; - &lt;/resultset&gt; - </pre></code> + <pre><code>&lt;resultset&gt; + &lt;result param=&quot;count&quot; type=&quot;INTEGER&quot;&gt;5&lt;/result&gt; + &lt;result param=&quot;cursor1&quot; type=&quot;LIST&quot;&gt; + &lt;fielddefinition&gt; + &lt;field name=&quot;FIELDNAME&quot; + type=&quot;columnType&quot; + columnDisplaySize=&quot;&quot; + precision=&quot;&quot; + scale=&quot;&quot; + isCurrency=&quot;&quot; + columnTypeName=&quot;&quot; + columnClassName=&quot;&quot;/&gt; + &lt;field ...../&gt; + &lt;/fielddefinition&gt; + &lt;rowset&gt; + &lt;row number=&quot;0&quot;&gt; + &lt;field name=&quot;TKEY&quot;&gt;MSG-ID&lt;/field&gt; + &lt;field name=&quot;TCHAR&quot;&gt;E&lt;/field&gt; + &lt;field name=&quot;TMESSAGE&quot;&gt;MESSAGE-CONTENTS&lt;/field&gt; + &lt;field name=&quot;TCLOB&quot; null=&quot;true&quot;/&gt; + &lt;field name=&quot;TBLOB&quot; null=&quot;true&quot;/&gt; + &lt;/row&gt; + &lt;row number=&quot;1&quot; ..... /&gt; + &lt;/rowset&gt; + &lt;/result&gt; + &lt;/resultset&gt;</code></pre> </p> <p><em>NOTE:</em> Support for stored procedures is currently experimental and changes in the currently produced output-format are expected.</p> @@ -4531,33 +4973,21 @@ - + - Sender that sends a message via a WebService based on NTLM authentication. + Sender that sends a message via a WebService. - + - + - Sender that sends a message via a WebService. - - - - - - - - - - - - XCom client voor het versturen van files via XCom. + XCom client voor het versturen van files via XCom. @@ -4623,52 +5053,37 @@ </p> <p> <b>example (input):</b> - <code> - <pre> - &lt;browse&gt; - &lt;jmsRealm&gt;qcf&lt;/jmsRealm&gt; - &lt;destinationName&gt;jms/GetPolicyDetailsRequest&lt;/destinationName&gt; - &lt;destinationType&gt;QUEUE&lt;/destinationType&gt; - &lt;/browse> - </pre> - </code> + <pre><code>&lt;browse&gt; + &lt;jmsRealm&gt;qcf&lt;/jmsRealm&gt; + &lt;destinationName&gt;jms/GetPolicyDetailsRequest&lt;/destinationName&gt; + &lt;destinationType&gt;QUEUE&lt;/destinationType&gt; + &lt;/browse&gt;</code></pre> </p> - - <p> <b>example (browse output):</b> - <code> - <pre> - &lt;result&gt; - &lt;items count="2"&gt; - &lt;item&gt; - &lt;timestamp&gt;Thu Nov 20 13:36:31 CET 2014&lt;/timestamp&gt; - &lt;messageId&gt;ID:LPAB00000003980-61959-1416486781822-3:5:33:1:1&lt;/messageId&gt; - &lt;correlationId&gt;...&lt;/correlationId&gt; - &lt;message&gt;&lt;![CDATA[...]]&gt;&lt;/message&gt; - &lt;/item&gt; - &lt;item&gt; - &lt;timestamp&gt;Thu Dec 12 11:59:22 CET 2014&lt;/timestamp&gt; - &lt;messageId&gt;ID:LPAB00000003980-58359-1721486799722-3:4:19:1:1&lt;/messageId&gt; - &lt;correlationId&gt;...&lt;/correlationId&gt; - &lt;message&gt;&lt;![CDATA[...]]&gt;&lt;/message&gt; - &lt;/item&gt; - &lt;/items&gt; - &lt;/result&gt; - </pre> - </code> + <pre><code>&lt;result&gt; + &lt;items count=&quot;2&quot;&gt; + &lt;item&gt; + &lt;timestamp&gt;Thu Nov 20 13:36:31 CET 2014&lt;/timestamp&gt; + &lt;messageId&gt;ID:LPAB00000003980-61959-1416486781822-3:5:33:1:1&lt;/messageId&gt; + &lt;correlationId&gt;...&lt;/correlationId&gt; + &lt;message&gt;&lt;![CDATA[...]]&gt;&lt;/message&gt; + &lt;/item&gt; + &lt;item&gt; + &lt;timestamp&gt;Thu Dec 12 11:59:22 CET 2014&lt;/timestamp&gt; + &lt;messageId&gt;ID:LPAB00000003980-58359-1721486799722-3:4:19:1:1&lt;/messageId&gt; + &lt;correlationId&gt;...&lt;/correlationId&gt; + &lt;message&gt;&lt;![CDATA[...]]&gt;&lt;/message&gt; + &lt;/item&gt; + &lt;/items&gt; + &lt;/result&gt;</code></pre> </p> <p> <b>example (remove output):</b> - <code> - <pre> - &lt;result&gt; - &lt;itemsRemoved&gt;2&lt;/itemsRemoved&gt; - &lt;/result&gt; - </pre> - </code> - </p> + <pre><code>&lt;result&gt; + &lt;itemsRemoved&gt;2&lt;/itemsRemoved&gt; + &lt;/result&gt;</code></pre> @@ -4681,8 +5096,8 @@ QuerySender that transforms the input message to a query. - <br/><code><pre> - select + <br/> + <pre><code>select delete insert update - tableName @@ -4694,14 +5109,13 @@ - formatString [0..1] only applicable for type=datetime, yyyy-MM-dd HH:mm:ss.SSS by default - where [0..1] - order [0..1] - <br/> + alter - sequenceName - startWith - <br/> + sql - type [0..1] one of {select;ddl;other}, other by default - - query - <br/> - </pre></code><br/> + - query</code></pre> + <br/> @@ -4797,17 +5211,17 @@ - Set whether the client should be configured with global bucket access enabled. Default: false + Option to enable or disable the usage of multi-region access point ARNs. Default: false - Name of the region that the client will be created from Default: eu-west-1 + Name of the AWS region that the client is using. Default: eu-west-1 - Name of the bucket to access. The bucketName can also be specified by prefixing it to the object name, separated from it by | + Name of the bucket to access. The bucketName can also be specified by prefixing it to the object name, separated from it by <code>|</code> @@ -4827,7 +5241,7 @@ - Maximum concurrent connections towards S3 + Maximum concurrent connections towards S3 Default: 50 @@ -4837,7 +5251,7 @@ - + @@ -4852,7 +5266,7 @@ - If parameter [action] is set, then the attribute action value will be overridden with the value of the parameter. + If parameter [<code>action</code>] is set, then the attribute action value will be overridden with the value of the parameter. @@ -4860,52 +5274,52 @@ - Filename to operate on. If not set, the parameter filename is used. If that is not set either, the input is used + Filename to operate on. If not set, the parameter <code>filename</code> is used. If that is not set either, the input is used - Destination for move, copy or rename. If not set, the parameter destination is used. If that is not set either, the input is used + Destination for <code>move</code>, <code>copy</code> or <code>rename</code>. If not set, the parameter <code>destination</code> is used. If that is not set either, the input is used - Folder that is scanned for files when action=list. When not set, the root is scanned + Folder that is scanned for files when action=<code>list</code>. When not set, the root is scanned - If set <code>true</code>, the folder to create, write, move or copy the file to is created if it does not exist Default: false + If <code>true</code>: if a non-existing folder is part of the fileName, it will be created. Default: false - If set <code>true</code>, for actions create, write, move, copy or rename, the destination file is overwritten if it already exists Default: false + If set <code>true</code>, for actions <code>create</code>, <code>write</code>, <code>move</code>, <code>copy</code> or <code>rename</code>, the destination file is overwritten if it already exists Default: false - For action=append: If set to a positive number, the file is rotated each day, and this number of files is kept. The inputFolder must point to the directory where the file resides Default: 0 + For action=<code>append</code>: If set to a positive number, the file is rotated each day, and this number of files is kept. The inputFolder must point to the directory where the file resides Default: 0 - For action=append: If set to a positive number, the file is rotated when it has reached the specified size, and the number of files specified in numberOfBackups is kept. Size is specified in plain bytes, suffixes like 'K', 'M' or 'G' are not recognized. The inputFolder must point to the directory where the file resides Default: 0 + For action=<code>append</code>: If set to a positive number, the file is rotated when it has reached the specified size, and the number of files specified in numberOfBackups is kept. Size is specified in plain bytes, suffixes like 'K', 'M' or 'G' are not recognized. The inputFolder must point to the directory where the file resides Default: 0 - For the actions write and append, with rotateSize>0: the number of backup files that is kept. The inputFolder must point to the directory where the file resides Default: 0 + For the actions <code>write</code> and <code>append</code>, with rotateSize>0: the number of backup files that is kept. The inputFolder must point to the directory where the file resides Default: 0 - Filter of files to look for in inputFolder e.g. '*.inp'. Works with actions move, copy, delete and list + Filter of files to look for in inputFolder e.g. '*.inp'. Works with actions <code>move</code>, <code>copy</code>, <code>delete</code> and <code>list</code> - Filter of files to be excluded when looking in inputFolder. Works with actions move, copy, delete and list + Filter of files to be excluded when looking in inputFolder. Works with actions <code>move</code>, <code>copy</code>, <code>delete</code> and <code>list</code> @@ -4915,17 +5329,17 @@ - If set to <code>true</code> then the system specific line separator will be appended to the file after executing the action. Works with actions write and append Default: false + If set to <code>true</code> then the system specific line separator will be appended to the file after executing the action. Works with actions <code>write</code> and <code>append</code> Default: false - Charset to be used for read and write action + Charset to be used for <code>read</code> and <code>write</code> action - If set to true then the folder will be deleted if it is empty after processing the action. Works with actions delete, readDelete and move + If set to true then the folder will be deleted if it is empty after processing the action. Works with actions <code>delete</code>, <code>readDelete</code> and <code>move</code> @@ -4936,6 +5350,14 @@ + + + Filter for action <code>list</code>. Specify <code>FILES_ONLY</code>, <code>FOLDERS_ONLY</code> or <code>FILES_AND_FOLDERS</code>. Default: FILES_ONLY + + + + + @@ -4962,7 +5384,8 @@ - The connection timeout in seconds Default: 10 + READ_TIMEOUT timeout in MS. + Defaults to 10000, inherited from HttpSender#setTimeout. Default: 10000 @@ -5000,32 +5423,32 @@ - If <code>action</code>=<code>create</code> the sessionKey that contains the file to use. If <code>action</code>=<code>get</code> and <code>getProperties</code>=<code>true</code> the sessionKey to store the result in + If <code>action=create</code> the sessionKey that contains the file to use. If <code>action=get</code> and <code>getProperties=true</code> the sessionKey to store the result in - If <code>action</code>=<code>create</code> the session key that contains the name of the file to use. If not set, the value of the property <code>filename</code> from the input message is used + If <code>action=create</code> the session key that contains the name of the file to use. If not set, the value of the property <code>filename</code> from the input message is used - If <code>action</code>=<code>create</code> the mime type used to store the document when it's not set in the input message by a property Default: 'application/octet-stream' + If <code>action=create</code> the mime type used to store the document when it's not set in the input message by a property Default: 'application/octet-stream' - (Only used when <code>action</code>=<code>get</code>). If true, the content of the document is put to <code>FileSessionKey</code> and all document properties are put in the result as a xml string Default: false + (Only used when <code>action=get</code>). If true, the content of the document is put to <code>FileSessionKey</code> and all document properties are put in the result as a xml string Default: false - (Only used when <code>action</code>=<code>get</code>). If true, the attachment for the document is the sender result or, if set, stored in <code>FileSessionKey</code>. If false, only the properties are returned Default: true + (Only used when <code>action=get</code>). If true, the attachment for the document is the sender result or, if set, stored in <code>fileSessionKey</code>. If false, only the properties are returned Default: true - (Only used when <code>action</code>=<code>create</code>). If true, the document is created in the root folder of the repository. Otherwise the document is created in the repository Default: true + (Only used when <code>action=create</code>). If true, the document is created in the root folder of the repository. Otherwise the document is created in the repository Default: true @@ -5111,17 +5534,17 @@ - If <code>true</code>, the hostname in the certificate will be checked against the actual hostname of the peer + If <code>true</code>, the hostname in the certificate will be checked against the actual hostname of the peer. Note: This attribute is unsafe and should not be used in a production environment. Default: false - If <code>true</code>, self signed certificates are accepted Default: false + If <code>true</code>, self signed certificates are accepted. Note: This attribute is unsafe and should not be used in a production environment. Default: false - If <code>true</code>, CertificateExpiredExceptions are ignored Default: false + If <code>true</code>, CertificateExpiredExceptions are ignored. Note: This attribute is unsafe and should not be used in a production environment. Default: false @@ -5202,7 +5625,7 @@ - + @@ -5325,14 +5748,7 @@ - - - The type of output. If not set then defaults to old-style XML. If set to XML, new-style XML is used. EXPERIMENTAL: datatypes like numbers are not yet rendered correctly Default: false - - - - - + @@ -5423,7 +5839,7 @@ - + @@ -5437,7 +5853,7 @@ - (Only for <code>synchronous</code>=<code>true</code>). Maximum time in ms to wait for a reply. 0 means no timeout. Default: 5000 + (Only for <code>synchronous=true</code>). Maximum time in ms to wait for a reply. 0 means no timeout. Default: 5000 @@ -5520,7 +5936,7 @@ - Comma separated list of fields to try as response address Default: replyTo,from,sender,Return-Path + Comma separated list of fields to try as response address Default: <code>replyTo,from,sender,Return-Path</code> @@ -5632,7 +6048,7 @@ - If <code>true</code>, the hostname in the certificate will be checked against the actual hostname of the peer + If <code>true</code>, the hostname in the certificate will be checked against the actual hostname of the peer Default: false @@ -5701,6 +6117,54 @@ + + + + + + + + + Synchronous or Asynchronous execution of the call to other adapter or system. + <br/> + Set to <code>false</code> to make the call asynchronously. This means that the current adapter + continues with the next pipeline and the result of the sub-adapter that was called, or other system that was called, + is ignored. Instead, the input message will be returned as the result message. Default: true + + + + + Scope decides if the FrankSender calls another adapter, or another Java program running in the same JVM. + <br/> + It is possible to set this via a parameter. If the parameter is defined but the value at runtime + is empty, then the value set via this attribute will be used as default. Default: ADAPTER + + + + + + + + Target: service-name of service in other application that should be called, or name of adapter to be called. + If the adapter is in another configuration, prefix the adapter name with the name of that configuration and a slash ("<code>/</code>"). + <br/> + It is possible to set a target at runtime via a parameter. + <br/> + If a parameter with name <code>target</code> exists but has no value, then the target configured + via the attribute will be used as a default. + + + + + Comma separated list of keys of session variables that will be returned to caller, for correct results as well as for erroneous results. + The set of available sessionKeys to be returned might be limited by the returnedSessionKeys attribute of the corresponding JavaListener. + + + + + + + @@ -5846,7 +6310,7 @@ - (ftps) If <code>true</code>, the hostname in the certificate will be checked against the actual hostname of the peer + (ftps) If <code>true</code>, the hostname in the certificate will be checked against the actual hostname of the peer Default: false @@ -5888,12 +6352,12 @@ - (Only used when <code>methodType</code>=<code>POST</code> and <code>postType</code>=<code>URLENCODED</code>, <code>FORM-DATA</code> or <code>MTOM</code>) Prepends a new BodyPart using the specified name and uses the input of the Sender as content + (Only used when <code>methodType=POST</code> and <code>postType=URLENCODED</code>, <code>FORM-DATA</code> or <code>MTOM</code>) Prepends a new BodyPart using the specified name and uses the input of the Sender as content - If set and <code>methodType</code>=<code>POST</code> and <code>paramsInUrl</code>=<code>false</code>, a multipart/form-data entity is created instead of a request body. + If set and <code>methodType=POST</code> and <code>paramsInUrl=false</code>, a multipart/form-data entity is created instead of a request body. For each part element in the session key a part in the multipart entity is created. Part elements can contain the following attributes: <ul> <li>name: optional, used as 'filename' in Content-Disposition</li> @@ -5911,7 +6375,8 @@ - If <code>true</code>, the input will be added to the URL for <code>methodType</code>=<code>GET</code>, or for <code>methodType</code>=<code>POST</code>, <code>PUT</code> or <code>PATCH</code> if <code>postType</code>=<code>RAW</code>. This used to be the default behaviour in framework version 7.7 and earlier Default: for methodType=<code>GET</code>: <code>false</code>,<br/>for methodTypes <code>POST</code>, <code>PUT</code>, <code>PATCH</code>: <code>true</code> + If <code>true</code>, the input will be added to the URL for <code>methodType=GET</code>, or for <code>methodType=POST</code>, <code>PUT</code> or + <code>PATCH</code> if <code>postType=RAW</code>. This used to be the default behaviour in framework version 7.7 and earlier Default: for methodType=<code>GET</code>: <code>false</code>,<br/>for methodTypes <code>POST</code>, <code>PUT</code>, <code>PATCH</code>: <code>true</code> @@ -5921,7 +6386,7 @@ - + @@ -5950,7 +6415,7 @@ - Timeout in ms of obtaining a connection/result. 0 means no timeout Default: 10000 + Timeout in ms of obtaining a connection/result. Default: 10000 @@ -6015,7 +6480,7 @@ - Timeout in ms of obtaining a connection/result. 0 means no timeout Default: 10000 + Timeout in ms of obtaining a connection/result. Default: 10000 @@ -6116,11 +6581,6 @@ The set of available sessionKeys to be returned might be limited by the returnedSessionKeys attribute of the corresponding JavaListener. - - - Currently used to mimic the HttpSender when it is stubbed locally. It could be useful in other situations too although currently the response string is used which isn't streamed, it would be better to pass the multipart as an input stream in the context map in which case content type and charset could also be passed Default: false - - Set to 'DLL' to make the dispatcher communicate with a DLL set on the classpath @@ -6155,7 +6615,7 @@ - If set <code>false</code>, the call is made asynchronously. This implies isolated=<code>true</code> Default: true + If set <code>false</code>, the call is made asynchronously. This implies <code>isolated=true</code> Default: true @@ -6189,7 +6649,11 @@ - + + + + + This is the contract number for iDIN the Merchant received from its Acquirer after registration, @@ -6264,7 +6728,7 @@ has the file extension .cer,.crt or .pem. - + This is the certificate owned by the Merchant. Its public key is used by the Issuer to encrypt information. The Merchant can then use the private key to decrypt that information. The SAML certificate must be in @@ -6285,6 +6749,13 @@ + + + + + Load configuration from XML. Attributes may overwrite this 'default'. + + @@ -6297,7 +6768,7 @@ - + @@ -6356,7 +6827,7 @@ - Comma separated list of fields to try as response address Default: replyTo,from,sender,Return-Path + Comma separated list of fields to try as response address Default: <code>replyTo,from,sender,Return-Path</code> @@ -6381,7 +6852,7 @@ - + the name of the javascript file containing the functions to run @@ -6393,7 +6864,7 @@ - the name of the JavaScript engine to be used. Default: J2V8 + the name of the JavaScript engine to use. Default: J2V8 @@ -6482,7 +6953,7 @@ - Namespace definitions for xpathExpression. Must be in the form of a comma or space separated list of <code>prefix=namespaceuri</code>-definitions Default: j=http://www.w3.org/2013/XSL/json + Namespace definitions for xpathExpression. Must be in the form of a comma or space separated list of <code>prefix=namespaceuri</code> definitions Default: j=http://www.w3.org/2013/XSL/json @@ -6654,7 +7125,7 @@ - + @@ -6727,7 +7198,13 @@ - Optional base folder, that serves as root for all other folders + Path to the folder that serves as the root of this virtual filesystem. All specifications of folders or files are relative to this root. + When the root is left unspecified, absolute paths to files and folders can be used + + + + + Whether the LocalFileSystem tries to create the root folder if it doesn't exist yet. Default: false @@ -6823,7 +7300,7 @@ - + @@ -6837,10 +7314,17 @@ If set to <code>true</code>, the message is stored only if the MessageId is not present in the store yet. Default: <code>true</code> + + + Set the slotId, an identifier to keep separate the messages inserted + by different MessageStoreSenders. + <br/> + This field should be set. + + - @@ -6866,7 +7350,15 @@ - + + + Set the slotId, an identifier to keep separate the messages inserted + by different JdbcTransactionalStorage instances. + <br/> + This field is optional, unless the attribute #onlyStoreWhenMessageIdUnique is + set to <code>true</code>. + + @@ -6968,7 +7460,14 @@ - Regular expression to mask strings in the errorStore/logStore. Every character between to the strings in this expression will be replaced by a '*'. For example, the regular expression (?&lt;=&lt;party&gt;).*?(?=&lt;/party&gt;) will replace every character between keys &lt;party&gt; and &lt;/party&gt; + Regular expression to mask strings in the errorStore/logStore. + Every character between to the strings in this expression will be replaced by a '*'. + <br/> + For example, the regular expression (?&lt;=&lt;party&gt;).*?(?=&lt;/party&gt;) will replace every + character between keys &lt;party&gt; and &lt;/party&gt; + <br/> + When no hideRegex is configured on the errorStore / logStore but is configured on the org.frankframework.receivers.Receiver#setHideRegex(String), + then the Receiver's hideRegex is used for the errorStore / logStore. @@ -6992,17 +7491,17 @@ - The MongoDB datasource Default: mongodb.datasource.default + The MongoDB datasource Default: <code>mongodb.datasource.default</code> - Database to connect to. Can be overridden by parameter database + Database to connect to. Can be overridden by parameter <code>database</code> - Collection to act upon. Can be overridden by parameter collection + Collection to act upon. Can be overridden by parameter <code>collection</code> @@ -7015,12 +7514,12 @@ - Filter. Can contain references to parameters between ?{ and }. Can be overridden by parameter filter + Filter. Can contain references to parameters between <code>?{</code> and <code>}</code>. Can be overridden by parameter <code>filter</code> - Limit to number of results returned. A value of 0 means 'no limit'. Can be overridden by parameter limit. Default: 0 + Limit to number of results returned. A value of 0 means 'no limit'. Can be overridden by parameter <code>limit</code>. Default: 0 @@ -7053,7 +7552,7 @@ - + @@ -7075,7 +7574,7 @@ NetStorage action to be used - + @@ -7142,7 +7641,7 @@ - Timeout in ms of obtaining a connection/result. 0 means no timeout Default: 10000 + Timeout in ms of obtaining a connection/result. Default: 10000 @@ -7471,7 +7970,7 @@ - Timeout in ms of obtaining a connection/result. 0 means no timeout Default: 10000 + Timeout in ms of obtaining a connection/result. Default: 10000 @@ -7587,7 +8086,7 @@ - If <code>true</code>, the hostname in the certificate will be checked against the actual hostname of the peer + If <code>true</code>, the hostname in the certificate will be checked against the actual hostname of the peer Default: false @@ -7612,7 +8111,7 @@ - Used when StaleChecking=<code>true</code>. Timeout after which an idle connection will be validated before being used. Default: 5000 ms + Used when <code>staleChecking</code> is <code>true</code>. Timeout after which an idle connection will be validated before being used. Default: 5000 ms @@ -7841,74 +8340,9 @@ - - - The type of output. If not set then defaults to old-style XML. If set to XML, new-style XML is used. EXPERIMENTAL: datatypes like numbers are not yet rendered correctly Default: false - - - - - + - - - - - - - - - content-type of the request Default: text/html; charset=utf-8 - - - - - url or base of url to be used - - - - - timeout in ms of obtaining a connection/result. 0 means no timeout Default: 10000 - - - - - the maximum number of concurrent connections Default: 10 - - - - - alias used to obtain credentials for authentication to host - - - - - username used in authentication to host - - - - - password used to authenticate with the host - - - - - - - Default: 80 - - - - - the soapactionuri to be set in the requestheader - - - - - - - @@ -8000,7 +8434,7 @@ - Timeout in ms of obtaining a connection/result. 0 means no timeout Default: 10000 + Timeout in ms of obtaining a connection/result. Default: 10000 @@ -8209,15 +8643,9 @@ - - - - - - @@ -8270,7 +8698,7 @@ If set <code>true</code>, send warnings to logging and console about syntax problems in the configured schema('s). - Alternatively, warnings can be switched off using suppression properties XSD_VALIDATION_WARNINGS_SUPPRESS_KEY, XSD_VALIDATION_ERROR_SUPPRESS_KEY and XSD_VALIDATION_FATAL_ERROR_SUPPRESS_KEY Default: true + Alternatively, warnings can be switched off using suppression properties <code>XSD_VALIDATION_WARNINGS_SUPPRESS_KEY</code>, <code>XSD_VALIDATION_ERROR_SUPPRESS_KEY</code> and <code>XSD_VALIDATION_FATAL_ERROR_SUPPRESS_KEY</code> Default: true @@ -8318,7 +8746,7 @@ - + @@ -8347,7 +8775,16 @@ - Sender to work with Amazon S3. + Sender to work with the Amazon S3 Filesystem. + <p> + In addition to regular parameters for filesystem senders, it is possible + to set custom user-metadata on S3 files by prefixing parameter names with + <code>FileAttribute.</code>. + This prefix will be not be part of the actual metadata property name. + </p> + <p> + The string value of these parameters will be used as value of the custom metadata attribute. + </p> @@ -8361,46 +8798,39 @@ Sender to obtain information from and write to a CMIS application. - <p> - When <code>action</code>=<code>get</code> the input (xml string) indicates the id of the document to get. This input is mandatory. + When <code>action=get</code> the input (xml string) indicates the id of the document to get. This input is mandatory. </p> <p> <b>Example:</b> - <pre><code> - &lt;cmis&gt; - &lt;id&gt;documentId&lt;/id&gt; - &lt;/cmis&gt; - </code></pre> + <pre><code>&lt;cmis&gt; + &lt;id&gt;documentId&lt;/id&gt; + &lt;/cmis&gt;</code></pre> </p> <p> - When <code>action</code>=<code>delete</code> the input (xml string) indicates the id of the document to get. This input is mandatory. + When <code>action=delete</code> the input (xml string) indicates the id of the document to get. This input is mandatory. </p> <p> <b>Example:</b> - <pre><code> - &lt;cmis&gt; - &lt;id&gt;documentId&lt;/id&gt; - &lt;/cmis&gt; - </code></pre> + <pre><code>&lt;cmis&gt; + &lt;id&gt;documentId&lt;/id&gt; + &lt;/cmis&gt;</code></pre> </p> <p> - When <code>action</code>=<code>create</code> the input (xml string) indicates document properties to set. This input is optional. + When <code>action=create</code> the input (xml string) indicates document properties to set. This input is optional. </p> <p> <b>Example:</b> - <pre><code> - &lt;cmis&gt; - &lt;name&gt;Offerte&lt;/name&gt; - &lt;objectTypeId&gt;NNB_Geldlening&lt;/objectTypeId&gt; - &lt;mediaType&gt;application/pdf&lt;/mediaType&gt; - &lt;properties&gt; - &lt;property name="ArrivedAt" type="datetime" formatString="yyyy-MM-dd'T'HH:mm:ss.SSSz"&gt;2014-11-27T16:43:01.268+0100&lt;/property&gt; - &lt;property name="ArrivedBy"&gt;HDN&lt;/property&gt; - &lt;property name="DocumentType"&gt;Geldlening&lt;/property&gt; - &lt;/properties&gt; - &lt;/cmis&gt; - </code></pre> + <pre><code>&lt;cmis&gt; + &lt;name&gt;Offerte&lt;/name&gt; + &lt;objectTypeId&gt;NNB_Geldlening&lt;/objectTypeId&gt; + &lt;mediaType&gt;application/pdf&lt;/mediaType&gt; + &lt;properties&gt; + &lt;property name=&quot;ArrivedAt&quot; type=&quot;datetime&quot; formatString=&quot;yyyy-MM-dd'T'HH:mm:ss.SSSz&quot;&gt;2014-11-27T16:43:01.268+0100&lt;/property&gt; + &lt;property name=&quot;ArrivedBy&quot;&gt;HDN&lt;/property&gt; + &lt;property name=&quot;DocumentType&quot;&gt;Geldlening&lt;/property&gt; + &lt;/properties&gt; + &lt;/cmis&gt;</code></pre> </p> <p> @@ -8423,42 +8853,38 @@ </table> </p> <p> - When <code>action</code>=<code>find</code> the input (xml string) indicates the query to perform. + When <code>action=find</code> the input (xml string) indicates the query to perform. </p> <p> <b>Example:</b> - <pre><code> - &lt;query&gt; - &lt;statement&gt;select * from cmis:document&lt;/statement&gt; - &lt;maxItems&gt;10&lt;/maxItems&gt; - &lt;skipCount&gt;0&lt;/skipCount&gt; - &lt;searchAllVersions&gt;true&lt;/searchAllVersions&gt; - &lt;includeAllowableActions&gt;true&lt;/includeAllowableActions&gt; - &lt;/query&gt; - </code></pre> + <pre><code>&lt;query&gt; + &lt;statement&gt;select * from cmis:document&lt;/statement&gt; + &lt;maxItems&gt;10&lt;/maxItems&gt; + &lt;skipCount&gt;0&lt;/skipCount&gt; + &lt;searchAllVersions&gt;true&lt;/searchAllVersions&gt; + &lt;includeAllowableActions&gt;true&lt;/includeAllowableActions&gt; + &lt;/query</code></pre> </p> <p> - When <code>action</code>=<code>update</code> the input (xml string) indicates document properties to update. + When <code>action=update</code> the input (xml string) indicates document properties to update. </p> <p> <b>Example:</b> - <pre><code> - &lt;cmis&gt; - &lt;id&gt;123456789&lt;/id&gt; - &lt;properties&gt; - &lt;property name="ArrivedAt" type="datetime" formatString="yyyy-MM-dd'T'HH:mm:ss.SSSz"&gt;2014-11-27T16:43:01.268+0100&lt;/property&gt; - &lt;property name="ArrivedBy"&gt;HDN&lt;/property&gt; - &lt;property name="DocumentType"&gt;Geldlening&lt;/property&gt; - &lt;/properties&gt; - &lt;/cmis&gt; - </code></pre> + <pre><code>&lt;cmis&gt; + &lt;id&gt;123456789&lt;/id&gt; + &lt;properties&gt; + &lt;property name=&quot;ArrivedAt&quot; type=&quot;datetime&quot; formatString=&quot;yyyy-MM-dd'T'HH:mm:ss.SSSz&quot;&gt;2014-11-27T16:43:01.268+0100&lt;/property&gt; + &lt;property name=&quot;ArrivedBy&quot;&gt;HDN&lt;/property&gt; + &lt;property name=&quot;DocumentType&quot;&gt;Geldlening&lt;/property&gt; + &lt;/properties&gt; + &lt;/cmis&gt;</code></pre> </p> <p> <table border="1"> <tr><th>attributes</th><th>description</th><th>default</th></tr> <tr><td>id</td><td>mandatory property "cmis:objectId" which indicates the document to update</td><td>&nbsp;</td></tr> - <tr><td>property</td><td>custom document property to update. See <code>action</code>=<code>create</code> for possible attributes</td><td>&nbsp;</td></tr> + <tr><td>property</td><td>custom document property to update. See <code>action=create</code> for possible attributes</td><td>&nbsp;</td></tr> </table> </p> @@ -8582,6 +9008,215 @@ + + + Sender to send a message to another Frank! Adapter, or an external program running in the same JVM as the Frank!Framework. + <p> + Sends a message to another Frank!Framework-adapter in the same Frank!Framework instance, or an external program running in + the same JVM as the Frank!Framework. If the callee exits with an <code>&lt;Exit/&gt;</code> that has state PipeLine.ExitState#ERROR, + an error is considered to happen in the caller which means that the <code>exception</code> forward is followed if it is present. + </p> + <p> + Returns <code>exit.code</code> as forward name to the SenderPipe, provided that <code>exit.code</code> can be parsed as integer. + For example, if the called adapter has an exit state with code + <code>2</code>, then the SenderPipe supports a forward with name <code>2</code> + that is followed when the called adapter exits with the mentioned exit. This does not work if the code is for example <code>c2</code>. + </p> + <p> + A FrankSender makes a call to either an Adapter or an external program by setting the #scope. By default the scope is <code>ADAPTER</code>. + </p> + <p/> + + <h3>Configuration of the Adapter to be called</h3> + <p> + A call to another Adapter in the same Frank!Framework instance is preferably made using the combination + of a FrankSender configured with the name of the adapter. + </p> + <h4>Configuring FrankSender and Adapter</h4> + <ul> + <li>Define a SenderPipe with a FrankSender</li> + <li>Set the attribute <code>target</code> to <i>targetAdapterName</i></li> + <li>If the adapter is in another Configuration deployed in the same Frank!Framework instance, then set <code>target</code> to <code>targetConfigurationName/targetAdapterName</code> (note the slash-separator between Configuration name and Adapter name).</li> + </ul> + In the Adapter to be called: + <ul> + <li>The adapter does not need to have a receiver configured to be called from a FrankSender,</li> + <li>The adapter will run in the same transaction as the calling adapter,</li> + <li>If the called adapter does not to run in its own transaction, set the transaction attributes on the PipeLine attribute of this adapter + or on the SenderPipe that contains this <code>FrankSender</code>.</li> + </ul> + + <h4>Configuring FrankSender with FrankListener</h4> + <ul> + <li>Define a SenderPipe with a FrankSender</li> + <li>In the target adapter, define a org.frankframework.receivers.Receiver with a FrankListener</li> + <li>Give a unique name to the listener: FrankListener#setName(String). If the name is not set, the name of the Adapter will be used.</li> + <li>Set the #setScope(Scope) to <code>LISTENER</code> and the #setTarget(String) to the listener name as per previous point</li> + <li>If the listener is in a different configuration, prefix the listener name with the name of the configuration and a slash (<code>/</code>) as separator between configuration and listener name</li> + </ul> + + <h4>Configuring FrankSender and Remote Application</h4> + <p> + <em>NB:</em> Please make sure that the IbisServiceDispatcher-1.4.jar or newer is present on the class path of the server. For more information, see: + </p> + <ul> + <li>Define a SenderPipe with a FrankSender</li> + <li>Set the attribute <code>scope</code> to either <code>JVM</code> for a Java application, or to <code>DLL</code> for code loaded from a DLL</li> + <li>Set the attribute <code>target</code> to the service-name the other application used to register itself</li> + </ul> + <p> + In the other application: + <ul> + <li>Implement the interface <code>nl.nn.adapterframework.dispatcher.RequestProcessor</code> from the IbisServiceDispatcher library</li> + <li>Register the instance with the <code>nl.nn.adapterframework.dispatcher.DispatcherManager</code> obtained via the <code>nl.nn.adapterframework.dispatcher.DispatcherManagerFactory</code></li> + <li>See the implementation code of the <code>JavaListener</code> in the Frank!Framework for an example</li> + </ul> + </p> + <p> + See also the repository of the IbisServiceDispatcher: + <a href="https://github.com/frankframework/servicedispatcher">https://github.com/frankframework/servicedispatcher</a> + </p> + + <h4>Using FrankSender to call an adapter from Larva tests</h4> + <p> + You can configure a FrankSender in Larva property files to use the FrankSender to invoke an adapter to test. When doing this, keep the following in mind: + <ul> + <li>If you leave the default scope as <code>ADAPTER</code>, then the <code>target</code> property needs to have both configuration name and adapter name, separated by a <code>/</code> character</li> + <li>When scope is left as default, the receiver and JavaListener are skipped and no transaction is started unless it is set on the adapter's <code>PipeLine</code></li> + <li>If you do need a transaction and the adapter has a JavaListener that has org.frankframework.receivers.JavaListener#setServiceName(String) defined, you can use the FrankSender with scope <code>JVM</code> + and set the <code>target</code> attribute to the <code>serviceName</code> attribute of the <code>JavaListener</code>.</li> + </ul> + </p> + + <h3>Migrating Existing Configurations</h3> + <p> + When one adapter (named A) needs to call another adapter (named B) like a subroutine, you will usually have an IbisLocalSender or an IbisJavaSender + in adapter A, and a org.frankframework.receivers.JavaListener in adapter B. + </p> + <p> + <em>NB:</em> For the example it is assumed that all adapters are defined in the same configuration. + </p> + + <h4>Example of Existing Configuration</h4> + The existing configuration might look like this in the calling adapter: + <pre><code>&lt;module&gt; + &lt;adapter name=&quot;Adapter A&quot;&gt; + &lt;receiver name=&quot;Adapter A Receiver&quot;&gt; + &lt;listener name=&quot;Adapter A Listener&quot; + className=&quot;org.frankframework...&quot; etc/&gt; + &lt;/receiver&gt; + &lt;pipeline firstPipe=&quot;...&quot;&gt; + &lt;pipe name=&quot;send&quot; className=&quot;org.frankframework.pipes.SenderPipe&quot;&gt; + &lt;sender className=&quot;org.frankframework.senders.IbisJavaSender&quot; + serviceName=&quot;service-Adapter-B&quot; /&gt; + &lt;forward name=&quot;success&quot; path=&quot;...&quot; /&gt; + &lt;/pipe&gt; + &lt;/pipeline&gt; + &lt;/adapter&gt; + &lt;/module&gt;</code></pre> + + Or like using the modern XML XSD and an IbisLocalSender instead: + <pre><code>&lt;Module&gt; + &lt;Adapter name=&quot;Adapter A&quot;&gt; + &lt;Receiver name=&quot;Adapter A Receiver&quot;&gt; + ... Listener setup and other configuration + &lt;/Receiver&gt; + &lt;Pipeline&gt; + &lt;SenderPipe name=&quot;send&quot;&gt; + &lt;IbisLocalSender name=&quot;call Adapter B&quot; + javaListener=&quot;Adapter B Listener&quot;/&gt; + &lt;Forward name=&quot;success&quot; path=&quot;EXIT&quot; /&gt; + &lt;/SenderPipe&gt; + &lt;/Pipeline&gt; + &lt;/Adapter&gt; + &lt;/Module&gt;</code></pre> + + In the receiving adapter B the listener would have been configured like this: + <pre><code>&lt;Module&gt; + &lt;Adapter name=&quot;adapter B&quot;&gt; + &lt;Receiver name=&quot;Receiver B&quot;&gt; + &lt;JavaListener name=&quot;Adapter B Listener&quot; serviceName=&quot;service-Adapter-B&quot;/&gt; + &lt;/Receiver&gt; + &lt;Pipeline&gt; + ... + &lt;/Pipeline&gt; + &lt;/Adapter&gt; + &lt;/Module&gt;</code></pre> + <p/> + + <h4>Rewritten Example Configuration With FrankSender</h4> + This example shows the most simple way of using the FrankSender to call another adapter with least amount of overhead. + + <pre><code>&lt;Module&gt; + &lt;Adapter name=&quot;Adapter A&quot;&gt; + &lt;Receiver name=&quot;Adapter A Receiver&quot;&gt; + ... Listener setup and other configuration + &lt;/Receiver&gt; + &lt;Pipeline&gt; + &lt;SenderPipe name=&quot;send&quot;&gt; + &lt;!-- when scope=&quot;ADAPTER&quot;, then target is directly the name of the adapter you want to call --&gt; + &lt;FrankSender name=&quot;call Adapter C&quot; + scope=&quot;ADAPTER&quot; + target=&quot;adapter B&quot; + /&gt; + &lt;Forward name=&quot;success&quot; path=&quot;EXIT&quot; /&gt; + &lt;/SenderPipe&gt; + &lt;/Pipeline&gt; + &lt;/Adapter&gt; + &lt;Adapter name=&quot;adapter B&quot;&gt; + &lt;!-- No receiver needed for FrankSender in this scenario --&gt; + &lt;Pipeline&gt; + ... Exits, Pipes etc + &lt;/Pipeline&gt; + &lt;/Adapter&gt; + &lt;/Module&gt;</code></pre> + + <h4>Rewritten Example Configuration With FrankSender and FrankListener</h4> + This example shows why you might want to call the other adapter via the FrankListener. This adds a bit more overhead to the call + of the sub-adapter for the extra error-handling done by the target receiver. + + <pre><code>&lt;Module&gt; + &lt;Adapter name=&quot;Adapter A&quot;&gt; + &lt;Receiver name=&quot;Adapter A Receiver&quot;&gt; + ... Listener setup and other configuration + &lt;/Receiver&gt; + &lt;Pipeline&gt; + &lt;SenderPipe name=&quot;send&quot;&gt; + &lt;!-- when scope=&quot;LISTENER&quot;, then target is directly the name of the FrankListener in the adapter you want to call --&gt; + &lt;FrankSender + scope=&quot;LISTENER&quot; + target=&quot;Adapter B Listener&quot;/&gt; + &lt;Forward name=&quot;success&quot; path=&quot;EXIT&quot; /&gt; + &lt;/SenderPipe&gt; + &lt;/Pipeline&gt; + &lt;/Adapter&gt; + &lt;Adapter name=&quot;adapter B&quot;&gt; + &lt;!-- Messages will only be sent to the error storage if: + - The target receiver is not transactional, and has maxTries=&quot;0&quot;, or + - The target receiver is transaction, and the Sender is set up to retry sending on error + For internal adapters, sending / receiving with retries might not make sense so the example does not show that. + --&gt; + &lt;Receiver name=&quot;Receiver B&quot; maxRetries=&quot;0&quot; transactionAttribute=&quot;NotSupported&quot;&gt; + &lt;!-- Listener name is optional, defaults to Adapter name --&gt; + &lt;FrankListener name=&quot;Adapter B Listener&quot;/&gt; + &lt;!-- This adapter now has an error storage -- without Receiver and FrankListener the sub-adapter couldn't have that --&gt; + &lt;JdbcErrorStorage slotId=&quot;Adapter B - Errors&quot; /&gt; + &lt;/Receiver&gt; + &lt;!-- If transactions are required, set transaction-attribute on the Pipeline --&gt; + &lt;Pipeline transactionAttribute=&quot;RequiresNew&quot;&gt; + ... Exits, Pipes etc + &lt;/Pipeline&gt; + &lt;/Adapter&gt; + &lt;/Module&gt;</code></pre> + + + + + + + + + @@ -8638,14 +9273,18 @@ - Posts a message to another IBIS-adapter or application in the same JVM using IbisServiceDispatcher. - + Posts a message to another Frank!Framework-adapter or an application in the same JVM using IbisServiceDispatcher. + <p> An IbisJavaSender makes a call to a Receiver with a JavaListener or any other application in the same JVM that has registered a <code>RequestProcessor</code> with the IbisServiceDispatcher. - + </p> + The IbisJavaSender is now considered to be legacy. The new way to call another adapter or java application from your own + adapter is by using the FrankSender. + </p> <h4>configuring IbisJavaSender and JavaListener</h4> <ul> - <li>Define a SenderPipe with an IbisJavaSender</li> + <li><em>NB:</em> Using IbisJavaSender to call another adapter is inefficient and therefore not recommended. It is much more efficient to use for this a FrankSender or IbisLocalSender.</li> + <li>Define a org.frankframework.pipes.SenderPipe with an IbisJavaSender</li> <li>Set the attribute <code>serviceName</code> to <i>yourExternalServiceName</i></li> </ul> In the Adapter to be called: @@ -8653,7 +9292,8 @@ <li>Define a Receiver with a JavaListener</li> <li>Set the attribute <code>serviceName</code> to <i>yourExternalServiceName</i></li> </ul> - N.B. Please make sure that the IbisServiceDispatcher-1.4.jar or newer is present on the class path of the server. + N.B. Please make sure that the IbisServiceDispatcher-1.4.jar or newer is present on the class path of the server. For more information, see: + <a href="https://github.com/frankframework/servicedispatcher">https://github.com/frankframework/servicedispatcher</a> @@ -8665,24 +9305,27 @@ - Posts a message to another IBIS-adapter in the same IBIS instance. If the callee exits with an &lt;<code>exit</code>&gt; + Posts a message to another Frank!Framework-adapter in the same Frank!Framework instance. If the callee exits with an &lt;<code>exit</code>&gt; that has state PipeLine.ExitState#ERROR, an error is considered to happen in the caller which means that the <code>exception</code> forward is followed if it is present. - <p/> - <p/> + <p> + The IbisLocalSender is now considered to be legacy. The new way to call another adapter from your own + adapter is by using the FrankSender. + </p> + <p> Returns exit.code as forward name to SenderPipe provided that exit.code can be parsed as integer. For example, if the called adapter has an exit state with code <code>2</code>, then the SenderPipe supports a forward with name <code>2</code> that is followed when the called adapter exits with the mentioned exit. This does not work if the code is for example <code>c2</code>. - <p/> - <p/> - An IbisLocalSender makes a call to a Receiver with either a WebServiceListener + </p> + <p> + An IbisLocalSender makes a call to a org.frankframework.receivers.Receiver with either a WebServiceListener or a JavaListener. - + </p> <h3>Configuration of the Adapter to be called</h3> - A call to another Adapter in the same IBIS instance is preferably made using the combination + A call to another Adapter in the same Frank!Framework instance is preferably made using the combination of an IbisLocalSender and a JavaListener. If, however, a Receiver with a WebServiceListener is already present, that can be used in some cases, too. @@ -8697,7 +9340,7 @@ <li>Define a Receiver with a JavaListener</li> <li>Set the attribute <code>name</code> to <i>yourServiceName</i></li> <li>Do not set the attribute <code>serviceName</code>, except if the service is to be called also - from applications other than this IBIS-instance</li> + from applications other than this Frank!Framework-instance</li> </ul> <h4>configuring IbisLocalSender and WebServiceListener</h4> @@ -8723,8 +9366,7 @@ - Requires the net.bankid.merchant.library V1.06+. - Compile with Java 1.7+ + Requires the net.bankid.merchant.library V1.2.9 @@ -8754,19 +9396,19 @@ - Sender used to run JavaScript code using J2V8 + Sender used to run JavaScript code using `JavascriptEngine` implementations. <p> - This sender can execute a function of a given javascript file, the result of the function will be the output of the sender. - The parameters of the javascript function to run are given as parameters by the adapter configuration + This sender can execute a function of a given Javascript file, the result of the function will be the output of the sender. + The parameters of the Javascript function to run are given as parameters by the adapter configuration The sender doesn't accept nor uses the given input, instead for each argument for the #jsFunctionName method, you will need to create a parameter on the sender. </p> <p> - The result of the javascript function should be of type String, or directly convertible to String from a primitive type + The result of the Javascript function should be of type String, or directly convertible to String from a primitive type or an array of primitive types / strings, as the output of the sender will be of type String. </p> <p> - Failure to ensure the output is a string may mean the result will look like {@code [Object object]}. + Failure to ensure the output is a string may mean the result will look like <code>[Object object]</code>. </p> @@ -8810,40 +9452,32 @@ <h2>example</h2> Consider the following configuration example: - <code> - <pre> - &lt;sender - className="org.frankframework.ldap.LdapSender" - ldapProviderURL="ldap://servername:389/o=ing" - operation="read" - attributesToReturn="givenName,sn,telephoneNumber" &gt; - &lt;param name="entryName" xpathExpression="entryName" /&gt; - &lt;/sender&gt; - </pre> - </code> + <pre><code>&lt;sender + className=&quot;org.frankframework.ldap.LdapSender&quot; + ldapProviderURL=&quot;ldap://servername:389/o=ing&quot; + operation=&quot;read&quot; + attributesToReturn=&quot;givenName,sn,telephoneNumber&quot; &gt; + &lt;param name=&quot;entryName&quot; xpathExpression=&quot;entryName&quot; /&gt; + &lt;/sender&gt;</code></pre> <br/> This may result in the following output: - <code><pre> - &lt;ldap&gt; - &lt;entryName&gt;uid=srp,ou=people&lt;/entryName&gt; - - &lt;attributes&gt; - &lt;attribute attrID="givenName"&gt; - &lt;value&gt;Jan&lt;/value&gt; - &lt;/attribute&gt; - - &lt;attribute attrID="telephoneNumber"&gt; - &lt;value&gt;010 5131123&lt;/value&gt; - &lt;value&gt;06 23456064&lt;/value&gt; - &lt;/attribute&gt; - - &lt;attribute attrID="sn"&gt; - &lt;value&gt;Jansen&lt;/value&gt; - &lt;/attribute&gt; - &lt;/attributes&gt; - &lt;/ldap&gt; - </pre></code> <br/> + <pre><code>&lt;ldap&gt; + &lt;entryName&gt;uid=srp,ou=people&lt;/entryName&gt; + &lt;attributes&gt; + &lt;attribute attrID=&quot;givenName&quot;&gt; + &lt;value&gt;Jan&lt;/value&gt; + &lt;/attribute&gt; + &lt;attribute attrID=&quot;telephoneNumber&quot;&gt; + &lt;value&gt;010 5131123&lt;/value&gt; + &lt;value&gt;06 23456064&lt;/value&gt; + &lt;/attribute&gt; + &lt;attribute attrID=&quot;sn&quot;&gt; + &lt;value&gt;Jansen&lt;/value&gt; + &lt;/attribute&gt; + &lt;/attributes&gt; + &lt;/ldap&gt;</code></pre> + <br/> Search or Read? @@ -8853,41 +9487,40 @@ together with the attributes. If the specified attributes are null or empty all the attributes of all the entries within the specified context are returned. - Sample result of a <code>read</code> operation:<br/><code><pre> - &lt;attributes&gt; - &lt;attribute&gt; - &lt;attribute name="employeeType" value="Extern"/&gt; - &lt;attribute name="roomNumber" value="DP 2.13.025"/&gt; - &lt;attribute name="departmentCode" value="358000"/&gt; - &lt;attribute name="organizationalHierarchy"&gt; - &lt;item value="ou=ING-EUR,ou=Group,ou=Organization,o=ing"/&gt; - &lt;item value="ou=OPS&amp;IT,ou=NL,ou=ING-EUR,ou=Group,ou=Organization,o=ing"/&gt; - &lt;item value="ou=000001,ou=OPS&amp;IT,ou=NL,ou=ING-EUR,ou=Group,ou=Organization,o=ing"/&gt; - &lt;/attribute> - &lt;attribute name="givenName" value="Gerrit"/> - &lt;/attributes&gt; - - </pre></code> <br/> - Sample result of a <code>search</code> operation:<br/><code><pre> - &lt;entries&gt; - &lt;entry name="uid=srp"&gt; - &lt;attributes&gt; - &lt;attribute&gt; - &lt;attribute name="employeeType" value="Extern"/&gt; - &lt;attribute name="roomNumber" value="DP 2.13.025"/&gt; - &lt;attribute name="departmentCode" value="358000"/&gt; - &lt;attribute name="organizationalHierarchy"&gt; - &lt;item value="ou=ING-EUR,ou=Group,ou=Organization,o=ing"/&gt; - &lt;item value="ou=OPS&amp;IT,ou=NL,ou=ING-EUR,ou=Group,ou=Organization,o=ing"/&gt; - &lt;item value="ou=000001,ou=OPS&amp;IT,ou=NL,ou=ING-EUR,ou=Group,ou=Organization,o=ing"/&gt; - &lt;/attribute> - &lt;attribute name="givenName" value="Gerrit"/> - &lt;/attributes&gt; - &lt;/entry&gt; - &lt;entry&gt; .... &lt;/entry&gt; - ..... - &lt;/entries&gt; - </pre></code> <br/> + Sample result of a <code>read</code> operation:<br/> + <pre><code>&lt;attributes&gt; + &lt;attribute&gt; + &lt;attribute name=&quot;employeeType&quot; value=&quot;Extern&quot;/&gt; + &lt;attribute name=&quot;roomNumber&quot; value=&quot;DP 2.13.025&quot;/&gt; + &lt;attribute name=&quot;departmentCode&quot; value=&quot;358000&quot;/&gt; + &lt;attribute name=&quot;organizationalHierarchy&quot;&gt; + &lt;item value=&quot;ou=ING-EUR,ou=Group,ou=Organization,o=ing&quot;/&gt; + &lt;item value=&quot;ou=OPS&amp;IT,ou=NL,ou=ING-EUR,ou=Group,ou=Organization,o=ing&quot;/&gt; + &lt;item value=&quot;ou=000001,ou=OPS&amp;IT,ou=NL,ou=ING-EUR,ou=Group,ou=Organization,o=ing&quot;/&gt; + &lt;/attribute&gt; + &lt;attribute name=&quot;givenName&quot; value=&quot;Gerrit&quot;/&gt; + &lt;/attributes&gt;</code></pre> + <br/> + Sample result of a <code>search</code> operation:<br/> + <pre><code>&lt;entries&gt; + &lt;entry name=&quot;uid=srp&quot;&gt; + &lt;attributes&gt; + &lt;attribute&gt; + &lt;attribute name=&quot;employeeType&quot; value=&quot;Extern&quot;/&gt; + &lt;attribute name=&quot;roomNumber&quot; value=&quot;DP 2.13.025&quot;/&gt; + &lt;attribute name=&quot;departmentCode&quot; value=&quot;358000&quot;/&gt; + &lt;attribute name=&quot;organizationalHierarchy&quot;&gt; + &lt;item value=&quot;ou=ING-EUR,ou=Group,ou=Organization,o=ing&quot;/&gt; + &lt;item value=&quot;ou=OPS&amp;IT,ou=NL,ou=ING-EUR,ou=Group,ou=Organization,o=ing&quot;/&gt; + &lt;item value=&quot;ou=000001,ou=OPS&amp;IT,ou=NL,ou=ING-EUR,ou=Group,ou=Organization,o=ing&quot;/&gt; + &lt;/attribute&gt; + &lt;attribute name=&quot;givenName&quot; value=&quot;Gerrit&quot;/&gt; + &lt;/attributes&gt; + &lt;/entry&gt; + &lt;entry&gt; .... &lt;/entry&gt; + ..... + &lt;/entries&gt;</code></pre> + <br/> @@ -8898,6 +9531,18 @@ + + Sender to work with the server local filesystem. + <p> + In addition to regular parameters for filesystem senders, it is possible + to set custom extended attributes on files by prefixing parameter names with + <code>FileAttribute.</code>. + This prefix will be not be part of the actual metadata property name. + </p> + <p> + The string value of these parameters will be used as value of the custom metadata attribute. + </p> + @@ -8941,33 +9586,29 @@ sender that sends a mail specified by an XML message. <p> Sample email.xml: - <code><pre> - &lt;email&gt; - &lt;recipients&gt; - &lt;recipient type="to"&gt;***@hotmail.com&lt;/recipient&gt; - &lt;recipient type="cc"&gt;***@gmail.com&lt;/recipient&gt; - &lt;/recipients&gt; - &lt;from name="*** ***"&gt;***@yahoo.com&lt;/from&gt; - &lt;subject&gt;This is the subject&lt;/subject&gt; - &lt;threadTopic&gt;subject&lt;/threadTopic&gt; - &lt;message&gt;This is the message&lt;/message&gt; - &lt;messageType&gt;text/plain&lt;/messageType&gt;&lt;!-- Optional --&gt; - &lt;messageBase64&gt;false&lt;/messageBase64&gt;&lt;!-- Optional --&gt; - &lt;charset&gt;UTF-8&lt;/charset&gt;&lt;!-- Optional --&gt; - &lt;attachments&gt; - &lt;attachment name="filename1.txt"&gt;This is the first attachment&lt;/attachment&gt; - &lt;attachment name="filename2.pdf" base64="true"&gt;JVBERi0xLjQKCjIgMCBvYmoKPDwvVHlwZS9YT2JqZWN0L1N1YnR5cGUvSW1...vSW5mbyA5IDAgUgo+PgpzdGFydHhyZWYKMzQxNDY2CiUlRU9GCg==&lt;/attachment&gt; - &lt;attachment name="filename3.pdf" url="file:/c:/filename3.pdf"/&gt; - &lt;attachment name="filename4.pdf" sessionKey="fileContent"/&gt; - &lt;/attachments&gt;&lt;!-- Optional --&gt; - &lt;/email&gt; - </pre></code> + <pre><code>&lt;email&gt; + &lt;recipients&gt; + &lt;recipient type=&quot;to&quot;&gt;***@hotmail.com&lt;/recipient&gt; + &lt;recipient type=&quot;cc&quot;&gt;***@gmail.com&lt;/recipient&gt; + &lt;/recipients&gt; + &lt;from name=&quot;*** ***&quot;&gt;***@yahoo.com&lt;/from&gt; + &lt;subject&gt;This is the subject&lt;/subject&gt; + &lt;threadTopic&gt;subject&lt;/threadTopic&gt; + &lt;message&gt;This is the message&lt;/message&gt; + &lt;messageType&gt;text/plain&lt;/messageType&gt;&lt;!-- Optional --&gt; + &lt;messageBase64&gt;false&lt;/messageBase64&gt;&lt;!-- Optional --&gt; + &lt;charset&gt;UTF-8&lt;/charset&gt;&lt;!-- Optional --&gt; + &lt;attachments&gt; + &lt;attachment name=&quot;filename1.txt&quot;&gt;This is the first attachment&lt;/attachment&gt; + &lt;attachment name=&quot;filename2.pdf&quot; base64=&quot;true&quot;&gt;JVBERi0xLjQKCjIgMCBvYmoKPDwvVHlwZS9YT2JqZWN0L1N1YnR5cGUvSW1...vSW5mbyA5IDAgUgo+PgpzdGFydHhyZWYKMzQxNDY2CiUlRU9GCg==&lt;/attachment&gt; + &lt;attachment name=&quot;filename3.pdf&quot; url=&quot;file:/c:/filename3.pdf&quot;/&gt; + &lt;attachment name=&quot;filename4.pdf&quot; sessionKey=&quot;fileContent&quot;/&gt; + &lt;/attachments&gt;&lt;!-- Optional --&gt; + &lt;/email&gt;</code></pre> </p><p> Notice: the XML message must be valid XML. Therefore, especially the message element must be plain text or be wrapped as CDATA. Example: - <code><pre> - &lt;message&gt;&lt;![CDATA[&lt;h1&gt;This is a HtmlMessage&lt;/h1&gt;]]&gt;&lt;/message&gt; - </pre></code> + <pre><code>&lt;message&gt;&lt;![CDATA[&lt;h1&gt;This is a HtmlMessage&lt;/h1&gt;]]&gt;&lt;/message&gt;</code></pre> </p><p> The <code>sessionKey</code> attribute for attachment can contain an inputstream or a string. Other types are not supported at this moment. </p><p> @@ -9010,14 +9651,11 @@ to the adapter around the sender pipe, because errors may occur before the message reaches the sender pipe. <br/><br/> Example configuration: - <code><pre> - &lt;SenderPipe name="Send"&gt; - &lt;MessageStoreSender - slotId="${instance.name}/TestMessageStore" - onlyStoreWhenMessageIdUnique="false" - /&gt; - &lt;/SenderPipe&gt; - </pre></code> + <pre><code>&lt;SenderPipe name=&quot;Send&quot;&gt; + &lt;MessageStoreSender + slotId=&quot;${instance.name}/TestMessageStore&quot; + onlyStoreWhenMessageIdUnique=&quot;false&quot; /&gt; + &lt;/SenderPipe&gt;</code></pre> @@ -9061,7 +9699,8 @@ <p><b>AuthAlias:</b></p> - <p>If you do not want to specify the nonce and the accesstoken used to authenticate with Akamai, you can use the authalias property. The username represents the nonce and the password the accesstoken.</p> + <p>If you do not want to specify the nonce and the access token used to authenticate with Akamai, you can use the authalias property. The username + represents the nonce and the password the access token.</p> @@ -9089,13 +9728,11 @@ This prevents (long) open connections inside Senders and possible connection failures. <b>Example:</b> - <pre><code> - &lt;SenderPipe&gt; + <pre><code>&lt;SenderPipe&gt; &lt;ReconnectSenderWrapper&gt; - &lt;EchoSender myAttribute="myValue" /&gt; + &lt;EchoSender myAttribute=&quot;myValue&quot; /&gt; &lt;/ReconnectSenderWrapper&gt; - &lt;/SenderPipe&gt; - </code></pre> + &lt;/SenderPipe&gt;</code></pre> </p> @@ -9236,7 +9873,7 @@ Collection of Senders, that are executed all at the same time. Once the results are processed, all results will be sent to the resultSender, - while the original sender will return it's result to the pipeline. + while the original sender will return its result to the pipeline. <p>Multiple sub-senders can be configured within the ShadowSender, the minimum amount of senders is 2 (originalSender + resultSender)</p> @@ -9268,79 +9905,73 @@ </ul> </p> <p> - All stored procedure parameters that are not fixed, so specified in the query with a {@code ?}, should - have a corresponding Parameter entry. Output parameters should have {@code mode="OUTPUT"}, or - {@code mode="INOUT"} depending on how the stored procedure is defined. + All stored procedure parameters that are not fixed, so specified in the query with a <code>?</code>, should + have a corresponding IParameter entry. Output parameters should have <code>mode=&quot;OUTPUT&quot;</code>, or + <code>mode=&quot;INOUT&quot;</code> depending on how the stored procedure is defined. </p> <p> <h3>Sample Output for queryType=OTHER</h3> <h4>Basic Example with Only Simple Output Parameters</h4> - <code><pre> - &lt;resultset&gt; - &lt;result param="r1" type="STRING"&gt;MESSAGE-CONTENTS&lt;/result&gt; - &lt;result param="r2" type="STRING"&gt;E&lt;/result&gt; - &lt;/resultset&gt; - </pre></code> + <pre><code>&lt;resultset&gt; + &lt;result param=&quot;r1&quot; type=&quot;STRING&quot;&gt;MESSAGE-CONTENTS&lt;/result&gt; + &lt;result param=&quot;r2&quot; type=&quot;STRING&quot;&gt;E&lt;/result&gt; + &lt;/resultset&gt;</code></pre> <h4>Example with Resultset and Simple Output Parameters</h4> - <code><pre> - &lt;resultset&gt; - &lt;result resultNr="1"&gt; - &lt;fielddefinition&gt; - &lt;field name="FIELDNAME" - type="columnType" - columnDisplaySize="" - precision="" - scale="" - isCurrency="" - columnTypeName="" - columnClassName=""/&gt; - &lt;field ...../&gt; - &lt;/fielddefinition&gt; - &lt;rowset&gt; - &lt;row number="0"&gt; - &lt;field name="TKEY"&gt;MSG-ID&lt;/field&gt; - &lt;field name="TCHAR"&gt;E&lt;/field&gt; - &lt;field name="TMESSAGE"&gt;MESSAGE-CONTENTS&lt;/field&gt; - &lt;field name="TCLOB" null="true"/&gt; - &lt;field name="TBLOB" null="true"/&gt; - &lt;/row&gt; - &lt;row number="1" ...../&gt; - &lt;/rowset&gt; - &lt;/result&gt; - &lt;result param="count" type="INTEGER"&gt;5&lt;/result&gt; - &lt;/resultset&gt; - </pre></code> + <pre><code>&lt;resultset&gt; + &lt;result resultNr=&quot;1&quot;&gt; + &lt;fielddefinition&gt; + &lt;field name=&quot;FIELDNAME&quot; + type=&quot;columnType&quot; + columnDisplaySize=&quot;&quot; + precision=&quot;&quot; + scale=&quot;&quot; + isCurrency=&quot;&quot; + columnTypeName=&quot;&quot; + columnClassName=&quot;&quot;/&gt; + &lt;field ...../&gt; + &lt;/fielddefinition&gt; + &lt;rowset&gt; + &lt;row number=&quot;0&quot;&gt; + &lt;field name=&quot;TKEY&quot;&gt;MSG-ID&lt;/field&gt; + &lt;field name=&quot;TCHAR&quot;&gt;E&lt;/field&gt; + &lt;field name=&quot;TMESSAGE&quot;&gt;MESSAGE-CONTENTS&lt;/field&gt; + &lt;field name=&quot;TCLOB&quot; null=&quot;true&quot;/&gt; + &lt;field name=&quot;TBLOB&quot; null=&quot;true&quot;/&gt; + &lt;/row&gt; + &lt;row number=&quot;1&quot; ...../&gt; + &lt;/rowset&gt; + &lt;/result&gt; + &lt;result param=&quot;count&quot; type=&quot;INTEGER&quot;&gt;5&lt;/result&gt; + &lt;/resultset&gt;</code></pre> <h4>Example with Simple and Cursor Output Parameters</h4> - <code><pre> - &lt;resultset&gt; - &lt;result param="count" type="INTEGER"&gt;5&lt;/result&gt; - &lt;result param="cursor1" type="LIST"&gt; - &lt;fielddefinition&gt; - &lt;field name="FIELDNAME" - type="columnType" - columnDisplaySize="" - precision="" - scale="" - isCurrency="" - columnTypeName="" - columnClassName=""/&gt; - &lt;field ...../&gt; - &lt;/fielddefinition&gt; - &lt;rowset&gt; - &lt;row number="0"&gt; - &lt;field name="TKEY"&gt;MSG-ID&lt;/field&gt; - &lt;field name="TCHAR"&gt;E&lt;/field&gt; - &lt;field name="TMESSAGE"&gt;MESSAGE-CONTENTS&lt;/field&gt; - &lt;field name="TCLOB" null="true"/&gt; - &lt;field name="TBLOB" null="true"/&gt; - &lt;/row&gt; - &lt;row number="1" ..... /&gt; - &lt;/rowset&gt; - &lt;/result&gt; - &lt;/resultset&gt; - </pre></code> + <pre><code>&lt;resultset&gt; + &lt;result param=&quot;count&quot; type=&quot;INTEGER&quot;&gt;5&lt;/result&gt; + &lt;result param=&quot;cursor1&quot; type=&quot;LIST&quot;&gt; + &lt;fielddefinition&gt; + &lt;field name=&quot;FIELDNAME&quot; + type=&quot;columnType&quot; + columnDisplaySize=&quot;&quot; + precision=&quot;&quot; + scale=&quot;&quot; + isCurrency=&quot;&quot; + columnTypeName=&quot;&quot; + columnClassName=&quot;&quot;/&gt; + &lt;field ...../&gt; + &lt;/fielddefinition&gt; + &lt;rowset&gt; + &lt;row number=&quot;0&quot;&gt; + &lt;field name=&quot;TKEY&quot;&gt;MSG-ID&lt;/field&gt; + &lt;field name=&quot;TCHAR&quot;&gt;E&lt;/field&gt; + &lt;field name=&quot;TMESSAGE&quot;&gt;MESSAGE-CONTENTS&lt;/field&gt; + &lt;field name=&quot;TCLOB&quot; null=&quot;true&quot;/&gt; + &lt;field name=&quot;TBLOB&quot; null=&quot;true&quot;/&gt; + &lt;/row&gt; + &lt;row number=&quot;1&quot; ..... /&gt; + &lt;/rowset&gt; + &lt;/result&gt; + &lt;/resultset&gt;</code></pre> </p> <p><em>NOTE:</em> Support for stored procedures is currently experimental and changes in the currently produced output-format are expected.</p> @@ -9353,18 +9984,6 @@ - - - Sender that sends a message via a WebService based on NTLM authentication. - - - - - - - - - Sender that sends a message via a WebService. @@ -9445,52 +10064,37 @@ </p> <p> <b>example (input):</b> - <code> - <pre> - &lt;browse&gt; - &lt;jmsRealm&gt;qcf&lt;/jmsRealm&gt; - &lt;destinationName&gt;jms/GetPolicyDetailsRequest&lt;/destinationName&gt; - &lt;destinationType&gt;QUEUE&lt;/destinationType&gt; - &lt;/browse> - </pre> - </code> + <pre><code>&lt;browse&gt; + &lt;jmsRealm&gt;qcf&lt;/jmsRealm&gt; + &lt;destinationName&gt;jms/GetPolicyDetailsRequest&lt;/destinationName&gt; + &lt;destinationType&gt;QUEUE&lt;/destinationType&gt; + &lt;/browse&gt;</code></pre> </p> - - <p> <b>example (browse output):</b> - <code> - <pre> - &lt;result&gt; - &lt;items count="2"&gt; - &lt;item&gt; - &lt;timestamp&gt;Thu Nov 20 13:36:31 CET 2014&lt;/timestamp&gt; - &lt;messageId&gt;ID:LPAB00000003980-61959-1416486781822-3:5:33:1:1&lt;/messageId&gt; - &lt;correlationId&gt;...&lt;/correlationId&gt; - &lt;message&gt;&lt;![CDATA[...]]&gt;&lt;/message&gt; - &lt;/item&gt; - &lt;item&gt; - &lt;timestamp&gt;Thu Dec 12 11:59:22 CET 2014&lt;/timestamp&gt; - &lt;messageId&gt;ID:LPAB00000003980-58359-1721486799722-3:4:19:1:1&lt;/messageId&gt; - &lt;correlationId&gt;...&lt;/correlationId&gt; - &lt;message&gt;&lt;![CDATA[...]]&gt;&lt;/message&gt; - &lt;/item&gt; - &lt;/items&gt; - &lt;/result&gt; - </pre> - </code> + <pre><code>&lt;result&gt; + &lt;items count=&quot;2&quot;&gt; + &lt;item&gt; + &lt;timestamp&gt;Thu Nov 20 13:36:31 CET 2014&lt;/timestamp&gt; + &lt;messageId&gt;ID:LPAB00000003980-61959-1416486781822-3:5:33:1:1&lt;/messageId&gt; + &lt;correlationId&gt;...&lt;/correlationId&gt; + &lt;message&gt;&lt;![CDATA[...]]&gt;&lt;/message&gt; + &lt;/item&gt; + &lt;item&gt; + &lt;timestamp&gt;Thu Dec 12 11:59:22 CET 2014&lt;/timestamp&gt; + &lt;messageId&gt;ID:LPAB00000003980-58359-1721486799722-3:4:19:1:1&lt;/messageId&gt; + &lt;correlationId&gt;...&lt;/correlationId&gt; + &lt;message&gt;&lt;![CDATA[...]]&gt;&lt;/message&gt; + &lt;/item&gt; + &lt;/items&gt; + &lt;/result&gt;</code></pre> </p> <p> <b>example (remove output):</b> - <code> - <pre> - &lt;result&gt; - &lt;itemsRemoved&gt;2&lt;/itemsRemoved&gt; - &lt;/result&gt; - </pre> - </code> - </p> + <pre><code>&lt;result&gt; + &lt;itemsRemoved&gt;2&lt;/itemsRemoved&gt; + &lt;/result&gt;</code></pre> @@ -9503,8 +10107,8 @@ QuerySender that transforms the input message to a query. - <br/><code><pre> - select + <br/> + <pre><code>select delete insert update - tableName @@ -9516,14 +10120,13 @@ - formatString [0..1] only applicable for type=datetime, yyyy-MM-dd HH:mm:ss.SSS by default - where [0..1] - order [0..1] - <br/> + alter - sequenceName - startWith - <br/> + sql - type [0..1] one of {select;ddl;other}, other by default - - query - <br/> - </pre></code><br/> + - query</code></pre> + <br/> @@ -9730,7 +10333,14 @@ - Regular expression to mask strings in the errorStore/logStore. Every character between to the strings in this expression will be replaced by a '*'. For example, the regular expression (?&lt;=&lt;party&gt;).*?(?=&lt;/party&gt;) will replace every character between keys &lt;party&gt; and &lt;/party&gt; + Regular expression to mask strings in the errorStore/logStore. + Every character between to the strings in this expression will be replaced by a '*'. + <br/> + For example, the regular expression (?&lt;=&lt;party&gt;).*?(?=&lt;/party&gt;) will replace every + character between keys &lt;party&gt; and &lt;/party&gt; + <br/> + When no hideRegex is configured on the errorStore / logStore but is configured on the org.frankframework.receivers.Receiver#setHideRegex(String), + then the Receiver's hideRegex is used for the errorStore / logStore. @@ -9927,6 +10537,18 @@ + + + ErrorMessageFormatter for JUICE, introduced with the Y01-project. + + + + + + + + + @@ -9979,6 +10601,11 @@ + + + + + @@ -9987,7 +10614,7 @@ - + @@ -10157,7 +10784,7 @@ - + @@ -10245,11 +10872,7 @@ - - - Characterset used for reading file, only used when <code>validateFile</code> is <code>true</code> Default: utf-8 - - + @@ -10315,11 +10938,7 @@ - - - Characterset used for reading file, only used when <code>validateFile</code> is <code>true</code> Default: utf-8 - - + @@ -10382,7 +11001,7 @@ - Session key to store the inputFormat in, to be able to set the outputformat when autoFormat=true. Can also be used to pass the value of an HTTP Accept header, to obtain a properly formatted response Default: Json2XmlValidator.inputFormat &lt;name of the pipe&gt; + Session key to store the inputFormat in, to be able to set the outputformat when autoFormat=true. Can also be used to pass the value of an HTTP Accept header, to obtain a properly formatted response Default: <code>Json2XmlValidator.inputFormat </code>&lt;name of the pipe&gt; @@ -10471,11 +11090,7 @@ - - - Characterset used for reading file, only used when <code>validateFile</code> is <code>true</code> Default: utf-8 - - + @@ -10723,7 +11338,7 @@ - + @@ -10883,7 +11498,7 @@ - + @@ -11212,12 +11827,12 @@ - Key of session variable to store auto-detected soapNamespace Default: If configured as Pipeline Input Wrapper or PipeLine Output Wrapper: soapNamespace + Key of session variable to store auto-detected soapNamespace Default: If configured as Pipeline Input Wrapper or PipeLine Output Wrapper: <code>soapNamespace</code> - Key of session variable to store soap header Default: If configured as Pipeline Input Wrapper and direction=<code>unwrap</code>: soapHeader + Key of session variable to store soap header Default: If configured as Pipeline Input Wrapper and direction=<code>unwrap</code>: <code>soapHeader</code> @@ -11290,6 +11905,11 @@ If true, the password is sent digested; Otherwise it is sent in clear text Default: true + + + For direction=<code>wrap</code> only: When false, adds an XML declaration to the output message. Default: true + + The functional name of this pipe. Can be referenced by the <code>path</code> attribute of a PipeForward. @@ -11428,7 +12048,7 @@ - + @@ -11735,10 +12355,14 @@ + - + + + + @@ -11757,7 +12381,7 @@ - + @@ -11808,7 +12432,7 @@ whatever it is configured to.</p> </p> <p><b>Notice:</b> the JmsListener is ONLY capable of processing - <code>javax.jms.TextMessage</code>s <br/><br/> + <code>jakarta.jms.TextMessage</code>s <br/><br/> </p> @@ -11821,6 +12445,622 @@ + + + + + + + + + + + + + + + + + + + + + + + Manager that decides the handlers based on the content of a field in the specified + position in a record. The fields in the record are separated by a separator. + The value of the specified field is taken as key in the flow-table. + + + + + + + + + + + + Manager that decides the handlers based on the content of a field in the specified + position in a record. The fields in the record are of a fixed length. + The data beween the start position and end position is taken as key in the flow-table. + + + + + + + + + + + + + + + + + + + + position of field that identifies the recordtype (position of first field is 1) + + + + + separator that separates the fields in the record + + + + + + + + + + + + + + + + + + + + + Name of the manager + + + + + This manager is the initial manager, i.e. to be used for the first record Default: false + + + + + + + + + + + + + + Start position of the field in the record that identifies the recordtype (first character is 0) Default: 0 + + + + + If endposition &gt;= 0 then this field contains the endPosition of the recordtype field in the record; All characters beyond this position are ignored. Else, if endPosition &lt; 0 then it depends on the length of the recordkey in the flow Default: -1 + + + + + + + + + + + + + + + + + + + + + + + + + Basic InputStreamReaderFactory. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Translate a record using an outputFields description. + + + The outputFields description can contain the following functions: + + <table border="1"> + <tr><td>string(value)</td><td>inserts the value between the braces</td><td>string( Dit wordt geinsert inclusief spaties ervoor en erna. )</td></tr> + <tr><td>align(value,size,align,fillchar)</td><td>inserts the value aligned</td><td>align(test~10~left~ )</td></tr> + <tr><td>fill(size,fillchar)</td><td>insert size fillchars</td><td>fill(2,0)</td></tr> + <tr><td>now(outformat)</td><td>inserts the current date</td><td>now(dd MMM yyyy)</td></tr> + <tr><td>incopy(fieldnr)</td><td>simply inserts the value of the field</td><td>incopy(2)</td></tr> + <tr><td>substr(fieldnr,startindex,endindex)</td><td>insert part of the value of the field</td><td>substr(2,0,8)</td></tr> + <tr><td>lookup(fieldnr,orgvval=newval,...)</td><td>replace original value using lookup table</td><td>lookup(3,Debit=+,Credit=-)</td></tr> + <tr><td>indate(fieldnr,informat,outformat)</td><td>inserts an input datefield using a different format</td><td>indate(2~MMddYY~dd MMM yyyy)</td></tr> + <tr><td>inalign(fieldnr,size,align,fillchar)</td><td>inserts an input field</td><td>inalign(3~5~left~0)</td></tr> + <tr><td>if(fieldnr,comparator,compareval)</td><td>only output the next fields if condition is true. Comparator is EQ (is equal to), NE (is not equal to), SW (starts with) or NS (not starts with). Use "{..|..|..}" for multiple compareValues</td><td>if(1,eq,3)</td></tr> + <tr><td>elseif(fieldnr,comparator,compareval)</td><td>only output the next fields if condition is true. Comparator is EQ, NE, SW or NS</td><td>elseif(1,ne,4)</td></tr> + <tr><td>endif()</td><td>endmarker for if</td><td>endif()</td></tr> + </table> + + + + + + + + + + + + Translate a record into XML, then send it using a sender. + + + + + + + + + + + + Encapsulates a record in XML, optionally translates it using XSLT or XPath. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + semicolon separated list of output record field specifications (see table below) + + + + + optional separator to add between the fields + + + + + + + + + + + + + + + + + comma separated list of numbers of those fields that are compared with the previous record to determine if a prefix must be written. if any of these fields is not equal in both records, the record types are assumed to be different + + + + + Name of the recordhandler + + + + + Comma separated specification of field lengths. if neither this attribute nor <code>inputSeparator</code> is specified then the entire record is parsed + + + + + Separator that separates the fields in the input record. If neither this attribute nor <code>inputFields</code> is specified then the entire record is parsed + + + + + If set to <code>true</code>, trailing spaces are removed from each field Default: false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + comma separated string with tagnames for the individual input fields (related using there positions). if you leave a tagname empty, the field is not xml-ized + + + + + Root tag for the generated xml document that will be send to the Sender Default: record + + + + + Name of stylesheet to transform an individual record + + + + + Alternatively: xpath-expression to create stylesheet from + + + + + Namespace defintions for xpathExpression. Must be in the form of a comma or space separated list of <code>prefix=namespaceuri</code>-definitions. One entry can be without a prefix, that will define the default namespace. + + + + + Only valid for <code>xpathExpression</code> Default: text + + + + + + + + Force the transformer generated from the xpath-expression to omit the xml declaration Default: true + + + + + String which ends the record and must be ignored + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ResultHandler that writes the transformed record to a BLOB. + + + + + + + + + + + + ResultHandler that writes the transformed record to a CLOB. + + + + + + + + + + + + Resulthandler that writes the transformed record to a file. + + + + + + + + + + + + Resulthandler that writes the transformed record to a String, that is passed to the next Pipe literally. + + + + + + + + + + + + ResultHandler that collects a number of records and sends them together to a sender. + + + + + + + + + + + + + + + + + + + + Column that contains the BLOB to be updated Default: 1 + + + + + controls whether blobdata is stored compressed in the database Default: true + + + + + Charset that is used to read and write BLOBs. This assumes the blob contains character data. + If blobCharset and blobSmartGet are not set, BLOBs are returned as bytes. Before version 7.6, blobs were base64 encoded after being read to accommodate for the fact that senders need to return a String. This is no longer the case + + + + + + + + + + + + + + + + The functional name of the object. + + + + + if set to <code>true</code>, this resultHandler is the default for all flows that do not have a handler specified Default: false + + + + + When set to <code>true</code>(default), every group of records, as indicated by RecordHandler.newRecordType, + is handled as a block. Default: true + + + + + + + + + The SQL query text + + + + + JNDI name of datasource to be used, can be configured via jmsRealm, too Default: <code>jdbc.datasource.default</code> + + + + + loads JNDI (and other) properties from a JmsRealm + + + + + + + + + + + string that is written before any data of results is written Default: &lt;document name=&quot;#name#&quot;&gt; + + + + + string that is written after all data of results is written Default: &lt;/document&gt; + + + + + string that is written before the start of each logical block, as defined in the flow Default: &lt;#name#&gt; + + + + + string that is written after the end of each logical block, as defined in the flow Default: &lt;/#name#&gt; + + + + + string that is replaced by name of block or name of stream in above strings Default: #name# + + + + + + + + + + + + + + + + Column that contains the CLOB to be updated Default: 1 + + + + + + + + + + + + + + + + Directory in which the resultfile must be stored + + + + + Directory to which the created file must be moved after finalization (is optional) + + + + + Name of the file is created using the messageformat. Params: 1=inputfilename, 2=extension of file, 3=current date + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -11829,15 +13069,13 @@ <p> Sample xml:<br/> - <pre><code> - &lt;adios rekenbox="L76HB150"&gt; - &lt;rubriek naam="BER_VERZ_CD" waarde="COMBIFLEX_BELEGGING" /&gt; - &lt;rubriek naam="INBR_CD" waarde="NIEUWE_VERZEKERING" /&gt; - &lt;rubriek naam="PENS_DT_BEP_CD" waarde="DT_UIT_PENS_LFT" /&gt; - &lt;rubriek nummer="313" naam="AS_OPSL_PRD_TRM_PRM" index="3" recordnr="74" record="VUT_VERZEKERING" waarde="52.34" /&gt; - ... - &lt;/adios&gt; - </code></pre> + <pre><code>&lt;adios rekenbox=&quot;L76HB150&quot;&gt; + &lt;rubriek naam=&quot;BER_VERZ_CD&quot; waarde=&quot;COMBIFLEX_BELEGGING&quot; /&gt; + &lt;rubriek naam=&quot;INBR_CD&quot; waarde=&quot;NIEUWE_VERZEKERING&quot; /&gt; + &lt;rubriek naam=&quot;PENS_DT_BEP_CD&quot; waarde=&quot;DT_UIT_PENS_LFT&quot; /&gt; + &lt;rubriek nummer=&quot;313&quot; naam=&quot;AS_OPSL_PRD_TRM_PRM&quot; index=&quot;3&quot; recordnr=&quot;74&quot; record=&quot;VUT_VERZEKERING&quot; waarde=&quot;52.34&quot; /&gt; + ... + &lt;/adios&gt;</code></pre> <br/> For input, a 'naam' or a 'nummer'-attribute must be specified. If both are specified, their match is checked. On output, 'nummer', 'naam' and 'waarde'-attributes are always present in each rubriek-element. @@ -11949,6 +13187,26 @@ + + + Pipe for transforming a (batch)file with records. Records in the file must be separated + with new line characters. + You can use the &lt;child&gt; tag to register RecordHandlers, RecordHandlerManagers, ResultHandlers + and RecordHandlingFlow elements. This is deprecated, however. Since 4.7 one should use &lt;manager&gt;, + &lt;recordHandler&gt;, &lt;resultHandler&gt; and &lt;flow&gt; + + For files containing only a single type of lines, a simpler configuration without managers and flows + can be specified. A single recordHandler with key="*" and (optional) a single resultHandler need to be specified. + Each line will be handled by this recordHandler and resultHandler. + + + + + + + + + Pipe that iterates over the lines in a BLOB. @@ -12140,38 +13398,33 @@ Pipe that reads a CRL from an input stream and transforms it to an XML. - The steam is closed after reading. + The stream is closed after reading. Example configuration: - <pre><code> - &lt;pipe - name="Read issuer" - className="org.frankframework.pipes.FilePipe" - actions="read" - fileName="dir/issuer.cer" - preserveInput="true" - outputType="stream" - storeResultInSessionKey="issuer" - &gt; - &lt;forward name="success" path="Read CRL" /&gt; - &lt;/pipe&gt; - &lt;pipe - name="Read CRL" - className="org.frankframework.pipes.FilePipe" - actions="read" - fileName="dir/CRL.crl" - outputType="stream" - &gt; - &lt;forward name="success" path="Transform CRL" /&gt; - &lt;/pipe&gt; - &lt;pipe - name="Transform CRL" - className="org.frankframework.pipes.CrlPipe" - issuerSessionKey="issuer" - &gt; - &lt;forward name="success" path="EXIT" /&gt; - &lt;/pipe&gt; - </code></pre> + <pre><code>&lt;pipe name=&quot;Read input CSV file&quot; + className=&quot;org.frankframework.pipes.FixedResultPipe&quot;&gt; + &lt;param name=&quot;filename&quot; sessionKey=&quot;filePathName&quot;/&gt; + &lt;forward name=&quot;success&quot; path=&quot;Process each Line&quot; /&gt; + &lt;/pipe&gt; + &lt;pipe + name=&quot;Read issuer&quot; + className=&quot;org.frankframework.pipes.FixedResultPipe&quot; + filename=&quot;dir/issuer.cer&quot; + storeResultInSessionKey=&quot;issuer&quot;&gt; + &lt;forward name=&quot;success&quot; path=&quot;Read CRL&quot; /&gt; + &lt;/pipe&gt; + &lt;pipe + name=&quot;Read CRL&quot; + className=&quot;org.frankframework.pipes.FixedResultPipe&quot; + fileName=&quot;dir/CRL.crl&quot;&gt; + &lt;forward name=&quot;success&quot; path=&quot;Transform CRL&quot; /&gt; + &lt;/pipe&gt; + &lt;pipe + name=&quot;Transform CRL&quot; + className=&quot;org.frankframework.pipes.CrlPipe&quot; + issuerSessionKey=&quot;issuer&quot;&gt; + &lt;forward name=&quot;success&quot; path=&quot;EXIT&quot; /&gt; + &lt;/pipe&gt;</code></pre> @@ -12193,6 +13446,43 @@ + + + <p> + Using <code>.jsonnet</code> transformation files, the DataSonnetPipe uses JSonnet at it's core to transform files + from and to different file formats specified by supported outputTypes. + </p> + <p> + The pipe input message will be set to the JSON object called <code>payload</code>. + It's required for the input message to have a correct MimeType, else the text will be interpreted as a String. + </p> + <p> + Input message (JSON) format: + <pre><code>{ + &quot;userId&quot; : &quot;123&quot;, + &quot;name&quot; : &quot;DataSonnet&quot; + }</code></pre> + + Jsonnet stylesheet: + <pre><code>{ + &quot;uid&quot;: payload.userId, + &quot;uname&quot;: payload.name, + }</code></pre> + Produces the following JSON output: + <pre><code>{ + &quot;uid&quot;: &quot;123&quot;, + &quot;uname&quot;: &quot;DataSonnet&quot; + }</code></pre> + </p> + + + + + + + + + Pipe that sleeps for a specified time, which defaults to 5000 msecs. @@ -12499,8 +13789,133 @@ - Produces a fixed result that does not depend on the input message. It may return the contents of a file - when <code>filename</code> or <code>filenameSessionKey</code> is specified. Otherwise the + This Pipe opens and returns a file from the classpath. The filename is a mandatory parameter to use. You can + provide this by using the <code>filename</code> attribute or with a <code>param</code> element to be able to + use a sessionKey for instance. + + <h2>Migrating from deprecated features</h2> + The FixedResultPipe was a jack of all trades. You could use it to read a file (only text) and/or use + a 'resultString' to find / replace values in. The following migrations are available: + + <h3>For using a 'resultString'</h3> + You can use the EchoPipe for a static value. This looked like this before: + + <pre> + <code>&lt;pipe name=&quot;HelloWorld&quot; className=&quot;org.frankframework.pipes.FixedResult&quot; returnString=&quot;Hello World&quot;&gt; + &lt;forward name=&quot;success&quot; path=&quot;EXIT&quot;/&gt; + &lt;/pipe&gt;</code> + </pre> + Becomes: + <pre> + <code>&lt;pipe name=&quot;HelloWorld&quot; className=&quot;org.frankframework.pipes.EchoPipe&quot; getInputFromFixedValue=&quot;Hello World&quot;&gt; + &lt;forward name=&quot;success&quot; path=&quot;EXIT&quot;/&gt; + &lt;/pipe&gt;</code> + </pre> + + <h3>For replacing a value</h3> + You can use the ReplacerPipe to replace a value in multiple ways. First, when you need to replace a placeholder with a parameter. + This looked like: + <pre> + <code>&lt;pipe name=&quot;make unique message&quot; className=&quot;org.frankframework.pipes.FixedResultPipe&quot; + returnString=&quot;&amp;lt;msg mid=&amp;quot;MID&amp;quot; action=&amp;quot;ACTION&amp;quot; /&amp;gt;&quot; replaceFixedParams=&quot;true&quot;&gt; + &lt;param name=&quot;MID&quot; sessionKey=&quot;mid&quot; /&gt; + &lt;param name=&quot;ACTION&quot; xpathExpression=&quot;request/@action&quot; /&gt; + &lt;/pipe&gt;</code> + </pre> + + And can now be written like this (note the ?{..} syntax): + <pre> + <code>&lt;pipe name=&quot;make unique message&quot; className=&quot;org.frankframework.pipes.ReplacerPipe&quot; + getInputFromFixedValue=&quot;&amp;lt;msg mid=&amp;quot;?{MID}&amp;quot; action=&amp;quot;?{ACTION}&amp;quot; /&amp;gt;&quot;&gt; + &lt;param name=&quot;MID&quot; sessionKey=&quot;mid&quot; /&gt; + &lt;param name=&quot;ACTION&quot; xpathExpression=&quot;request/@action&quot; /&gt; + &lt;/pipe&gt;</code> + </pre> + + When you need to replace a fixed value use the ReplacerPipe with find and replace. This looked like this: + <pre> + <code>&lt;FixedResultPipe name=&quot;InputValidateError&quot; + filename=&quot;ManageFileSystem/xml/ErrorMessage.xml&quot; + replaceFrom=&quot;%reasonCode&quot; replaceTo=&quot;NOT_WELL_FORMED_XML&quot;&gt; + &lt;forward name=&quot;success&quot; path=&quot;EXIT&quot; /&gt; + &lt;/FixedResultPipe&gt;</code> + </pre> + + And now should be solved like this: + <pre> + <code>&lt;FixedResultPipe name=&quot;InputValidateError&quot; + filename=&quot;ManageFileSystem/xml/ErrorMessage.xml&quot;&gt; + &lt;forward name=&quot;success&quot; path=&quot;replaceReasonCode&quot; /&gt; + &lt;/FixedResultPipe&gt; + &lt;ReplacerPipe name=&quot;replaceReasonCode&quot; + find=&quot;%reasonCode&quot; + replace=&quot;NOT_WELL_FORMED_XML&quot;&gt; + &lt;forward name=&quot;success&quot; path=&quot;EXIT&quot; /&gt; + &lt;/ReplacerPipe&gt;</code> + </pre> + This is also an example of now using two pipes to achieve the same result. Each pipe has its own responsibility. + + <h2>More complex configurations</h2> + In some cases, a combination of the above is needed to achieve what worked before. In some cases, FixedResultPipe + was also used to store information in the session. For example, a port of configuration in the JMS listener sender configuration looked like this: + <pre> + <code>&lt;CompareStringPipe name=&quot;compareIdAndCid&quot; &gt; + &lt;param name=&quot;operand1&quot; sessionKey=&quot;id&quot;/&gt; + &lt;param name=&quot;operand2&quot; sessionKey=&quot;cid&quot;/&gt; + &lt;forward name=&quot;equals&quot; path=&quot;IdAndCidSame&quot; /&gt; + &lt;forward name=&quot;lessthan&quot; path=&quot;IdAndCidDifferent&quot; /&gt; + &lt;forward name=&quot;greaterthan&quot; path=&quot;IdAndCidDifferent&quot; /&gt; + &lt;/CompareStringPipe&gt; + &lt;FixedResultPipe name=&quot;IdAndCidSame&quot; returnString=&quot;true&quot; storeResultInSessionKey=&quot;IdAndCidSame&quot;&gt; + &lt;forward name=&quot;success&quot; path=&quot;displayKeys&quot; /&gt; + &lt;/FixedResultPipe&gt; + &lt;FixedResultPipe name=&quot;IdAndCidDifferent&quot; returnString=&quot;false&quot; storeResultInSessionKey=&quot;IdAndCidSame&quot;&gt; + &lt;forward name=&quot;success&quot; path=&quot;displayKeys&quot; /&gt; + &lt;/FixedResultPipe&gt; + + &lt;pipe name=&quot;displayKeys&quot; className=&quot;org.frankframework.pipes.FixedResultPipe&quot; + returnString=&quot;branch [BRANCH] Orignal Id [MID] cid [CID] id=cid [SAME]&quot; replaceFixedParams=&quot;true&quot;&gt; + &lt;param name=&quot;BRANCH&quot; sessionKey=&quot;originalMessage&quot; xpathExpression=&quot;*&amp;#47;@branch&quot; /&gt; + &lt;param name=&quot;MID&quot; sessionKey=&quot;id&quot; /&gt; + &lt;param name=&quot;CID&quot; sessionKey=&quot;cid&quot; /&gt; + &lt;param name=&quot;SAME&quot; sessionKey=&quot;IdAndCidSame&quot; /&gt; + &lt;forward name=&quot;success&quot; path=&quot;EXIT&quot; /&gt; + &lt;/pipe&gt;</code> + </pre> + + Was rewritten to the following: + <pre> + <code>&lt;CompareStringPipe name=&quot;compareIdAndCid&quot; &gt; + &lt;param name=&quot;operand1&quot; sessionKey=&quot;id&quot;/&gt; + &lt;param name=&quot;operand2&quot; sessionKey=&quot;cid&quot;/&gt; + &lt;forward name=&quot;equals&quot; path=&quot;IdAndCidSame&quot; /&gt; + &lt;forward name=&quot;lessthan&quot; path=&quot;IdAndCidDifferent&quot; /&gt; + &lt;forward name=&quot;greaterthan&quot; path=&quot;IdAndCidDifferent&quot; /&gt; + &lt;/CompareStringPipe&gt; + + &lt;PutInSessionPipe name=&quot;IdAndCidSame&quot; value=&quot;true&quot; sessionKey=&quot;IdAndCidSame&quot;&gt; + &lt;forward name=&quot;success&quot; path=&quot;putOriginalMessageInSession&quot; /&gt; + &lt;/PutInSessionPipe&gt; + &lt;PutInSessionPipe name=&quot;IdAndCidDifferent&quot; value=&quot;false&quot; sessionKey=&quot;IdAndCidSame&quot;&gt; + &lt;forward name=&quot;success&quot; path=&quot;putOriginalMessageInSession&quot; /&gt; + &lt;/PutInSessionPipe&gt; + + &lt;PutInSessionPipe name=&quot;putOriginalMessageInSession&quot; sessionKey=&quot;incomingMessage&quot;/&gt; + + &lt;pipe name=&quot;displayKeys&quot; className=&quot;org.frankframework.pipes.ReplacerPipe&quot; + getInputFromFixedValue=&quot;branch [?{BRANCH}] Original Id [?{MID}] cid [?{CID}] id=cid [?{SAME}]&quot;&gt; + &lt;param name=&quot;BRANCH&quot; sessionKey=&quot;originalMessage&quot; xpathExpression=&quot;*&amp;#47;@branch&quot; /&gt; + &lt;param name=&quot;MID&quot; sessionKey=&quot;id&quot; /&gt; + &lt;param name=&quot;CID&quot; sessionKey=&quot;cid&quot; /&gt; + &lt;param name=&quot;SAME&quot; sessionKey=&quot;IdAndCidSame&quot; /&gt; + &lt;forward name=&quot;success&quot; path=&quot;EXIT&quot; /&gt; + &lt;/pipe&gt;</code> + </pre> + <p> + + <h2>The features/documentation of the deprecated features</h2> + Produces a fixed result that does not depend on the input message. It may return the contents of a file + when <code>filename</code> or <code>filenameSessionKey</code> is specified. Otherwise, the value of attribute <code>returnString</code> is returned. <br/><br/> Using parameters and the attributes of this pipe, it is possible to substitute values. This pipe @@ -12508,11 +13923,13 @@ <ol> <li>During execution, this pipe first obtains a string based on attributes <code>returnString</code>, <code>filename</code> or <code>filenameSessionKey</code>.</li> <li>The resulting string is transformed according to attributes <code>replaceFrom</code> and <code>replaceTo</code> if set. - Please note that the plain value of attribute <code>replaceFrom</code> is matched, no <code>${...}</code> here.</li> + Please note that the plain value of attribute <code>replaceFrom</code> is matched, no <code>?{...}</code> here.</li> + <li>The resulting string is substituted based on the parameters of this pipe. This step depends on attribute <code>replaceFixedParams</code>. Assume that there is a parameter with name <code>xyz</code>. If <code>replaceFixedParams</code> is <code>false</code>, then - each occurrence of <code>${xyz}</code> is replaced by the parameter's value. Otherwise, the text <code>xyz</code> + each occurrence of <code>?{xyz}</code> is replaced by the parameter's value. Otherwise, the text <code>xyz</code> is substituted. See Parameter to see how parameter values are determined.</li> + <li>If attribute <code>substituteVars</code> is <code>true</code>, then expressions <code>${...}</code> are substituted using system properties, pipelinesession variables and application properties. Please note that no <code>${...}</code> patterns are left if the initial string came from attribute <code>returnString</code>, because @@ -12646,19 +14063,6 @@ - - - Selects an exitState, based on the content-type of a httpServletRequest - object as input. - - - - - - - - - Pipe that increases the integer value of a session variable. @@ -12784,28 +14188,26 @@ Transforms between ascii and an XML representation. <p> - Sample xml:<br/><code><pre> - &lt;CALCBOXMESSAGE&gt; - &lt;OPDRACHT&gt; - &lt;OPDRACHTSOORT&gt;ONTTREK_RISICO_EN_KOSTEN&lt;/OPDRACHTSOORT&gt; - &lt;BASISRENDEMENTSOORT&gt;NVT&lt;/BASISRENDEMENTSOORT&gt; - &lt;BEDRAG&gt;625&lt;/BEDRAG&gt; - &lt;DATUM&gt;20071201&lt;/DATUM&gt; - - ... - &lt;/CALCBOXMESSAGE&gt; - </pre></code> <br/> + Sample xml:<br/> + <pre><code>&lt;CALCBOXMESSAGE&gt; + &lt;OPDRACHT&gt; + &lt;OPDRACHTSOORT&gt;ONTTREK_RISICO_EN_KOSTEN&lt;/OPDRACHTSOORT&gt; + &lt;BASISRENDEMENTSOORT&gt;NVT&lt;/BASISRENDEMENTSOORT&gt; + &lt;BEDRAG&gt;625&lt;/BEDRAG&gt; + &lt;DATUM&gt;20071201&lt;/DATUM&gt; + ... + &lt;/CALCBOXMESSAGE&gt;</code></pre> + <br/> - Sample ascii:<br/><code><pre> - OPDRACHT : #SAMENGESTELD + Sample ascii:<br/> + <pre><code>OPDRACHT : #SAMENGESTELD OPDRACHT.OPDRACHTSOORT :ONTTREK_RISICO_EN_KOSTEN OPDRACHT.BASISRENDEMENTSOORT :NVT OPDRACHT.BEDRAG :625 OPDRACHT.DATUM :20071201 ... - EINDEREKENVERZOEK :EINDE - </pre></code> + EINDEREKENVERZOEK :EINDE</code></pre> </p> <p><b>Configuration:</b> @@ -12897,6 +14299,21 @@ + + Pipe to work with the server local filesystem. + <p> + In addition to regular parameters for filesystem senders, it is possible + to set custom extended attributes on files by prefixing parameter names with + <code>FileAttribute.</code>. + This prefix will be not be part of the actual metadata property name. + </p> + <p> + The string value of these parameters will be used as value of the custom metadata attribute. + </p> + <p> + If extended attributes actually can be written depends on the underlying OS / filesystem. + </p> + @@ -12922,22 +14339,22 @@ Pipe that sends a mail-message using a MailSender as its sender. <br/> - Sample email.xml:<br/><code><pre> - &lt;email&gt; - &lt;recipients&gt; - &lt;recipient&gt;***@natned&lt;/recipient&gt; - &lt;recipient&gt;***@nn.nl&lt;/recipient&gt; - &lt;/recipients&gt; - &lt;from&gt;***@nn.nl&lt;/from&gt; - &lt;subject&gt;this is the subject&lt;/subject&gt; - &lt;message&gt;dit is de message&lt;/message&gt; - &lt;/email&gt; - </pre></code> <br/> + Sample email.xml:<br/> + <pre><code>&lt;email&gt; + &lt;recipients&gt; + &lt;recipient&gt;***@natned&lt;/recipient&gt; + &lt;recipient&gt;***@nn.nl&lt;/recipient&gt; + &lt;/recipients&gt; + &lt;from&gt;***@nn.nl&lt;/from&gt; + &lt;subject&gt;this is the subject&lt;/subject&gt; + &lt;message&gt;dit is de message&lt;/message&gt; + &lt;/email&gt;</code></pre> + <br/> Notice: it must be valid XML. Therefore, especially the message element must be plain text or be wrapped as CDATA.<br/><br/> - example:<br/><code><pre> - &lt;message&gt;&lt;![CDATA[&lt;h1&gt;This is a HtmlMessage&lt;/h1&gt;]]&gt;&lt;/message&gt; - </pre></code><br/> + example:<br/> + <pre><code>&lt;message&gt;&lt;![CDATA[&lt;h1&gt;This is a HtmlMessage&lt;/h1&gt;]]&gt;&lt;/message&gt;</code></pre> + <br/> @@ -12984,7 +14401,7 @@ - Returns random password. + Generates a random password. @@ -13101,8 +14518,18 @@ - Replaces all occurrences of one string with another. - Optionally strips or replaces XML non-printable characters. + This Pipe is used to replace values in a few ways. The following steps are performed: + <ol> + <li>If <code>find</code> is provided, it will be replaced by <code>replace</code></li> + <li>The resulting string is substituted based on the parameters of this pipe. It will replace values in the input enclosed + with ?{}, for instance: ?{parameterOne}, with parameters of this pipe. If a parameter for the given value is not found, it + will not be replaced and the '?{parameterOne}' value will remain in the output. + <p> + See Parameter to see how parameter values are determined.</li> + <p> + <li>If attribute <code>substituteVars</code> is <code>true</code>, then expressions <code>${...}</code> are substituted using + system properties, session variables and application properties. Please note that no <code>${...}</code> patterns are left in the input. </li> + </ol> @@ -13239,7 +14666,7 @@ - Skip a number of bytes or characters from the input. + Skip a number of bytes or characters from the input message. @@ -13307,6 +14734,22 @@ + + + Pipe for transforming a stream with records. Records in the stream must be separated with new line characters. + + For file containing only a single type of lines, a simpler configuration without managers and flows + can be specified. A single recordHandler with key="*" and (optional) a single resultHandler need to be specified. + Each line will be handled by this recordHandler and resultHandler. + + + + + + + + + Pipe for converting TEXT to XML. @@ -13439,7 +14882,7 @@ - Selects an forward, based on XPath evaluation + Selects a forward, based on XPath evaluation @@ -13585,7 +15028,8 @@ - Charset to be used to encode the given input string Default: UTF-8 + Charset to be used to read the input message. + Defaults to the message's known charset or UTF-8 when unknown. @@ -13640,6 +15084,82 @@ + + + + + + + + + Directory in which the transformed file(s) is stored + + + + + Directory to which the inputfile is moved in case an error occurs + + + + + Number of copies held of a file with the same name. Backup files have a dot and a number suffixed to their name. If set to 0, no backups will be kept. Default: 5 + + + + + If set <code>true</code>, the destination file will be deleted if it already exists Default: false + + + + + If set <code>true</code>, the file processed will be deleted after being processed, and not stored Default: false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + If set <code>true</code> the original block is stored under the session key <code>originalBlock</code>. Default: false + + + + + If set to <code>false</code>, the inputstream is not closed after it has been used. Default: true + + + + + Characterset used for reading file or inputstream" Default: UTF-8 + + + + + + + @@ -13667,7 +15187,11 @@ Alternatively: xpath-expression to create stylesheet from - + + + Namespace defintions for xpathExpression. Must be in the form of a comma or space separated list of <code>prefix=namespaceuri</code>-definitions. For some use other cases (NOT xpathExpression), one entry can be without a prefix, that will define the default namespace. + + Only valid for xpathexpression Default: text @@ -13896,12 +15420,12 @@ - JNDI name of datasource to be used, can be configured via jmsRealm, too Default: jdbc.datasource.default + JNDI name of datasource to be used, can be configured via jmsRealm, too Default: <code>jdbc.datasource.default</code> - Named parameters will be auto-detected by default. Every string in the query which equals <code>?{paramname}</code> will be replaced by the value of the corresponding parameter. The parameters don't need to be in the correct order and unused parameters are skipped. + Named parameters will be auto-detected by default. Every string in the query which equals <code><code>?{</code>paramname<code>}</code></code> will be replaced by the value of the corresponding parameter. The parameters don't need to be in the correct order and unused parameters are skipped. @@ -14004,7 +15528,11 @@ Alternatively: xpath-expression to create stylesheet from - + + + Namespace defintions for xpathExpression. Must be in the form of a comma or space separated list of <code>prefix=namespaceuri</code>-definitions. For some use other cases (NOT xpathExpression), one entry can be without a prefix, that will define the default namespace. + + Only valid for xpathexpression Default: text @@ -14096,29 +15624,14 @@ if <code>true</code> the pipe compresses, otherwise it decompress Default: false - - - required if result is a file, the pattern for the result filename. Can be set with variables e.g. {file}.{ext}.zip in this example the {file} and {ext} variables are resolved with sessionKeys with the same name - - flag indicates whether the message is the content or the path to a file with the contents. for multiple files use ';' as delimiter Default: false - - - required if result is a file, the directory in which to store the result file - - - flag indicates whether the result must be written to the message or to a file (filename = message) Default: false - - - - - the pattern for the zipentry name in case a zipfile is read or written + flag indicates whether the result must be written to the message or to a file (filename = message) Default: true when outputDirectory is not set. @@ -14213,11 +15726,42 @@ Format the XML output in easy legible way + + + Enables the ASCII <code>(RS) Record Separator</code> and <code>(US) Unit Separator</code> Control Code field delimiters. + May not be used in combination with attribute <code>fieldSeparator</code>. + See <a href="https://en.wikipedia.org/wiki/C0_and_C1_control_codes#Field_separators">WIKI Control Codes</a>. + + + + + + + + + + + Location of stylesheet to apply to the input message + + + + + Output file format, DataSonnet is semi-capable of converting the converted JSON to a different format. + + + + + + + + + + @@ -14345,47 +15889,11 @@ - - - Should values between ${ and } be resolved. If true, the search order of replacement values is: - system properties (1), pipelinesession variables (2), application properties (3). Default: false - - Name of the file containing the result message. - - - Name of the session key containing the file name of the file containing the result message. - - - - - Returned message. - - - - - If set, every occurrence of this attribute's value is replaced by the value of <code>replaceTo</code>. - - - - - See <code>replaceFrom</code>. - - - - - File name of XSLT stylesheet to apply. - - - - - When set <code>true</code>, parameter replacement matches <code>name-of-parameter</code>, not <code>${name-of-parameter}</code> Default: false - - @@ -14528,6 +16036,11 @@ + + + Location to a <code>jndi.properties</code> file for additional EMS (SSL) properties + + @@ -14575,19 +16088,6 @@ - - - - - - - - - - - - - @@ -14633,7 +16133,7 @@ - forward returned when <code>'true'</code> Default: then + forward returned when <code>true</code> Default: then @@ -14699,7 +16199,7 @@ - Namespace definitions for xpathExpression. Must be in the form of a comma or space separated list of <code>prefix=namespaceuri</code>-definitions Default: j=http://www.w3.org/2013/XSL/json + Namespace definitions for xpathExpression. Must be in the form of a comma or space separated list of <code>prefix=namespaceuri</code> definitions Default: j=http://www.w3.org/2013/XSL/json @@ -14969,10 +16469,13 @@ The scenario sub directory to execute - + the larva log level: one of [debug], [pipeline messages prepared for diff], [pipeline messages], [wrong pipeline messages prepared for diff], [wrong pipeline messages], [step passed/failed], [scenario passed/failed], [scenario failed], [totals], [error] Default: wrong pipeline messages + + + @@ -15102,7 +16605,13 @@ - the folder that serves as the root of this virtual filesystem + Path to the folder that serves as the root of this virtual filesystem. All specifications of folders or files are relative to this root. + When the root is left unspecified, absolute paths to files and folders can be used + + + + + Whether the LocalFileSystem tries to create the root folder if it doesn't exist yet. Default: false @@ -15113,7 +16622,7 @@ - If parameter [action] is set, then the attribute action value will be overridden with the value of the parameter. + If parameter [<code>action</code>] is set, then the attribute action value will be overridden with the value of the parameter. @@ -15121,52 +16630,52 @@ - Filename to operate on. If not set, the parameter filename is used. If that is not set either, the input is used + Filename to operate on. If not set, the parameter <code>filename</code> is used. If that is not set either, the input is used - Destination for move, copy or rename. If not set, the parameter destination is used. If that is not set either, the input is used + Destination for <code>move</code>, <code>copy</code> or <code>rename</code>. If not set, the parameter <code>destination</code> is used. If that is not set either, the input is used - Folder that is scanned for files when action=list. When not set, the root is scanned + Folder that is scanned for files when action=<code>list</code>. When not set, the root is scanned - If set <code>true</code>, the folder to create, write, move or copy the file to is created if it does not exist Default: false + If <code>true</code>: if a non-existing folder is part of the fileName, it will be created. Default: false - If set <code>true</code>, for actions create, write, move, copy or rename, the destination file is overwritten if it already exists Default: false + If set <code>true</code>, for actions <code>create</code>, <code>write</code>, <code>move</code>, <code>copy</code> or <code>rename</code>, the destination file is overwritten if it already exists Default: false - For action=append: If set to a positive number, the file is rotated each day, and this number of files is kept. The inputFolder must point to the directory where the file resides Default: 0 + For action=<code>append</code>: If set to a positive number, the file is rotated each day, and this number of files is kept. The inputFolder must point to the directory where the file resides Default: 0 - For action=append: If set to a positive number, the file is rotated when it has reached the specified size, and the number of files specified in numberOfBackups is kept. Size is specified in plain bytes, suffixes like 'K', 'M' or 'G' are not recognized. The inputFolder must point to the directory where the file resides Default: 0 + For action=<code>append</code>: If set to a positive number, the file is rotated when it has reached the specified size, and the number of files specified in numberOfBackups is kept. Size is specified in plain bytes, suffixes like 'K', 'M' or 'G' are not recognized. The inputFolder must point to the directory where the file resides Default: 0 - For the actions write and append, with rotateSize>0: the number of backup files that is kept. The inputFolder must point to the directory where the file resides Default: 0 + For the actions <code>write</code> and <code>append</code>, with rotateSize>0: the number of backup files that is kept. The inputFolder must point to the directory where the file resides Default: 0 - Filter of files to look for in inputFolder e.g. '*.inp'. Works with actions move, copy, delete and list + Filter of files to look for in inputFolder e.g. '*.inp'. Works with actions <code>move</code>, <code>copy</code>, <code>delete</code> and <code>list</code> - Filter of files to be excluded when looking in inputFolder. Works with actions move, copy, delete and list + Filter of files to be excluded when looking in inputFolder. Works with actions <code>move</code>, <code>copy</code>, <code>delete</code> and <code>list</code> @@ -15176,17 +16685,17 @@ - If set to <code>true</code> then the system specific line separator will be appended to the file after executing the action. Works with actions write and append Default: false + If set to <code>true</code> then the system specific line separator will be appended to the file after executing the action. Works with actions <code>write</code> and <code>append</code> Default: false - Charset to be used for read and write action + Charset to be used for <code>read</code> and <code>write</code> action - If set to true then the folder will be deleted if it is empty after processing the action. Works with actions delete, readDelete and move + If set to true then the folder will be deleted if it is empty after processing the action. Works with actions <code>delete</code>, <code>readDelete</code> and <code>move</code> @@ -15197,6 +16706,14 @@ + + + Filter for action <code>list</code>. Specify <code>FILES_ONLY</code>, <code>FOLDERS_ONLY</code> or <code>FILES_AND_FOLDERS</code>. Default: FILES_ONLY + + + + + @@ -15215,7 +16732,7 @@ - If set {@code true} the pipe will never forward to the {@code ExceptionForward} even if an error occurred during execution. Default: false + If set <code>true</code> the pipe will never forward to the <code>ExceptionForward</code> even if an error occurred during execution. Default: false @@ -15300,49 +16817,44 @@ - - - whether the securerandom algorithm is to be used (slower) Default: true - - - the lowercase characters to use Default: ('a'..'z') + The lowercase characters to use. Default: ('a'..'z') - the uppercase characters to use Default: ('A'..'Z') + The uppercase characters to use. Default: ('A'..'Z') - the numbers to use Default: ('0'..'9') + The numbers to use. Default: ('0'..'9') - the signs to use Default: (;:_%$#@!&gt;&lt;) + The signs to use. Default: (;:_%$#@!&gt;&lt;) - the number of lowercase characters in the generated password Default: 2 + The number of lowercase characters in the generated password. Default: 2 - the number of digits in the generated password Default: 2 + The number of digits in the generated password. Default: 2 - the number of sign characters in the generated password Default: 2 + The number of sign characters in the generated password. Default: 2 - the number of uppercase characters in the generated password Default: 2 + The number of uppercase characters in the generated password. Default: 2 @@ -15395,18 +16907,18 @@ <p> Conversion result files are stored as messages in the session, under keys numbered based - on the value set here. If #isSaveSeparate() is {@code false} then only the main - document is stored in the session, if it is {@code true} then each attachment is stored + on the value set here. If #isSaveSeparate() is <code>false</code> then only the main + document is stored in the session, if it is <code>true</code> then each attachment is stored separately. </p> <p> For example, if a file is converted that has 2 attachments and #setSaveSeparate(boolean) - is set to {@code true} then there will be the following 3 session keys (assuming the default value + is set to <code>true</code> then there will be the following 3 session keys (assuming the default value is unchanged): <ol> - <li>{@code pdfConversionResultFiles1}</li> - <li>{@code pdfConversionResultFiles2}</li> - <li>{@code pdfConversionResultFiles3}</li> + <li><code>pdfConversionResultFiles1</code></li> + <li><code>pdfConversionResultFiles2</code></li> + <li><code>pdfConversionResultFiles3</code></li> </ol> Each session key will contain a FileMessage referencing the contents of that PDF. </p> Default: pdfConversionResultFiles @@ -15498,7 +17010,7 @@ Set to a time <i>in milliseconds</i> to create a value that is different to the previous returned value by a PutSystemDateInSession pipe in - this virtual machine or <code>-1 to disable</code>. The thread will sleep for the specified time before recalculating a new value. Set the + this virtual machine or <code>-1</code> to disable. The thread will sleep for the specified time before recalculating a new value. Set the timezone to a value without Daylight Saving Time (like GMT+1) to prevent this pipe to generate two equal value's when the clock is set back. <b>note:</b> When you're looking for a GUID parameter for your XSLT it might be better to use &lt;param name=&quot;guid&quot; pattern=&quot;{hostname}_{uid}&quot;/&gt;, see Parameter. Default: -1 @@ -15506,7 +17018,7 @@ - If <code>true</code>, the date/time returned will always be 2001-12-17 09:30:47 (for testing purposes only). It is overridden by the value of the pipelinesession key <code>stub4testtool.fixeddate</code> when it exists Default: false + If <code>true</code>, the date/time returned will always be <code>2001-12-17 09:30:47</code> (for testing purposes only). It is overridden by the value of the pipelinesession key <code>stub4testtool.fixeddate</code> when it exists Default: false @@ -15658,7 +17170,7 @@ Sets the string that will replace each of the occurrences of the find-string. Newlines can be represented - * by the #setLineSeparatorSymbol(String). + * by the #setLineSeparatorSymbol(String). @@ -15669,11 +17181,11 @@ Replace all characters that are non-printable according to the XML specification with - the value specified in #setReplaceNonXmlChar(String). + the value specified in #setNonXmlReplacementCharacter(String). <p> - <b>NB:</b> This will only replace or remove characters considered non-printable. This - will not check if a given character is valid in the particular way it is used. Thus it will - not remove or replace, for instance, a single {@code '&'} character. + <b>NB:</b> This will only replace or remove characters considered non-printable. This + will not check if a given character is valid in the particular way it is used. Thus it will + not remove or replace, for instance, a single <code>'&amp;'</code> character. </p> <p> See also: @@ -15684,9 +17196,9 @@ </p> Default: false - + - character that will replace each non valid xml character (empty string is also possible) (use &amp;#x00bf; for inverted question mark) Default: empty string + character that will replace each non-valid xml character (empty string is also possible) (use &amp;#x00bf; for inverted question mark) Default: empty string @@ -15694,6 +17206,11 @@ Whether to allow Unicode supplementary characters (like a smiley) during replaceNonValidXmlCharacters Default: false + + + Should properties (values between <code>${</code> and <code>}</code>) be resolved. Default: false + + @@ -15913,6 +17430,11 @@ If empty then derived from queueName (if $messagingLayer='P2P' then '$applicationFunction' else '$operationName_$operationVersion) + + + Location to a <code>jndi.properties</code> file for additional EMS (SSL) properties + + @@ -16030,7 +17552,7 @@ - Number of bytes (for binary input) or characters (for character input) to skip. An empty byte array or string is returned when skip is larger then the length of the input Default: 0 + Number of bytes (for binary input) or characters (for character input) to skip. An empty byte array or string is returned when skip is larger than the length of the input. Default: 0 @@ -16288,17 +17810,17 @@ - a string to compare the result of the xpathexpression (or the input-message itself) to. if not specified, a non-empty result leads to the 'then'-forward, an empty result to 'else'-forward + a string to compare the result of the xpathExpression (or the input-message itself) to. If not specified, a non-empty result leads to the 'then'-forward, an empty result to 'else'-forward - forward returned when <code>'true'</code> Default: then + forward returned when output is <code>true</code> Default: then - forward returned when 'false' Default: else + forward returned when output is <code>false</code> Default: else @@ -16308,7 +17830,8 @@ - regular expression to be applied to the input-message (ignored if xpathexpression is specified). the input-message matching the given regular expression leads to the 'then'-forward + Regular expression to be applied to the input-message (ignored if <code>xpathExpression</code> is specified). + The input-message <b>fully</b> matching the given regular expression leads to the 'then'-forward @@ -16318,7 +17841,7 @@ - namespace defintions for xpathExpression. Must be in the form of a comma or space separated list of <code>prefix=namespaceuri</code>-definitions. + namespace definitions for xpathExpression. Must be in the form of a comma or space separated list of <code>prefix=namespaceuri</code> definitions. @@ -16413,11 +17936,6 @@ Charset used when reading the contents of the entry (only used if streamingContents=false) Default: utf-8 - - - If set to <code>true</code>, a possible bytes order mark (BOM) at the start of the file is skipped (only used for encoding uft-8) Default: false - - @@ -16479,6 +17997,15 @@ + + + + + + + + + @@ -16515,15 +18042,6 @@ - - - - - - - - - 1. This method first stores all database jobs that can are found in the Quartz Scheduler in a Map. @@ -16562,11 +18080,37 @@ - + - - + + + + + + + + + + + Configuration on which job operates + + + + + Adapter on which job operates + + + + + Receiver on which job operates + + + + + + + @@ -16587,7 +18131,7 @@ CRON expression that determines the frequency of execution. - Can <code>not</code> be used in combination with Interval. + Can <b>not</b> be used in combination with Interval. @@ -16612,6 +18156,11 @@ + + + + + @@ -16657,7 +18206,7 @@ - JNDI name of datasource to be used Default: jdbc.datasource.default + JNDI name of datasource to be used Default: <code>jdbc.datasource.default</code> @@ -16670,37 +18219,6 @@ - - - - - - - - - - - - - - Configuration on which job operates - - - - - Adapter on which job operates - - - - - Receiver on which job operates - - - - - - - @@ -16935,7 +18453,7 @@ - Timeout in ms of obtaining a connection/result. 0 means no timeout Default: 10000 + Timeout in ms of obtaining a connection/result. Default: 10000 @@ -16951,165 +18469,71 @@ - - Password used for authentication to the host - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - If the Configuration should automatically start all Adapters and Jobs. - - - - - Configurations should be wired through Spring, which in turn should call #setBeanName(String). - Once the ConfigurationContext has a name it should not be changed anymore, hence - super.setBeanName(String) only sets the name once. - If not created by Spring, the setIdCalled flag in AbstractRefreshableConfigApplicationContext wont be set, allowing the name to be updated. - - The DisplayName will always be updated, which is purely used for logging purposes. - - - - - - - - - - Renders the contents of the first node (in combination with xslt or xpath). Please note that - if there are child nodes, only the contents are returned, use <code>XML</code> if the xml tags are required - - - - - Renders an xml-nodeset as an xml-string (in combination with xslt or xpath). This will include the xml tags - - - - - Renders the CONTENTS of the first node as a nodeset - that can be used as such when passed as xslt-parameter (only for XSLT 1.0). - Please note that the nodeset may contain multiple nodes, without a common root node. - N.B. The result is the set of children of what you might expect it to be... - - - - - Renders XML as a DOM document; similar to <code>node</code> - with the distinction that there is always a common root node (required for XSLT 2.0) - - - - - Converts the result to a Date, by default using formatString <code>yyyy-MM-dd</code>. - When applied as a JDBC parameter, the method setDate() is used - - - - - Converts the result to a Date, by default using formatString <code>HH:mm:ss</code>. - When applied as a JDBC parameter, the method setTime() is used - - - - - Converts the result to a Date, by default using formatString <code>yyyy-MM-dd HH:mm:ss</code>. - When applied as a JDBC parameter, the method setTimestamp() is used - - - - - Similar to <code>DATETIME</code>, except for the formatString that is <code>yyyy-MM-dd HH:mm:ss.SSS</code> by default - - - - - Converts the result from a XML formatted dateTime to a Date. - When applied as a JDBC parameter, the method setTimestamp() is used - - - - - Converts the result to a Number, using decimalSeparator and groupingSeparator. - When applied as a JDBC parameter, the method setDouble() is used - - - - - Converts the result to an Integer - - - - - Converts the result to a Boolean - - - - - Forces the parameter value to be treated as binary data (e.g. when using a SQL BLOB field). - When applied as a JDBC parameter, the method setBinaryStream() or setBytes() is used - - - - - Forces the parameter value to be treated as character data (e.g. when using a SQL CLOB field). - When applied as a JDBC parameter, the method setCharacterStream() or setString() is used - - - - - Used for StoredProcedure OUT parameters when the database type is a {@code CURSOR} or java.sql.JDBCType#REF_CURSOR. - See also org.frankframework.jdbc.StoredProcedureQuerySender. - <br/> - DEPRECATED: Type LIST can also be used in larva test to Convert a List to an xml-string (&lt;items&gt;&lt;item&gt;...&lt;/item&gt;&lt;item&gt;...&lt;/item&gt;&lt;/items&gt;) - - - - + + Password used for authentication to the host + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + If the Configuration should automatically start all Adapters and Jobs. + + + + + Configurations should be wired through Spring, which in turn should call #setBeanName(String). + Once the ConfigurationContext has a name it should not be changed anymore, hence + super.setBeanName(String) only sets the name once. + If not created by Spring, the setIdCalled flag in AbstractRefreshableConfigApplicationContext wont be set, allowing the name to be updated. + + The DisplayName will always be updated, which is purely used for logging purposes. + + + + + @@ -17117,6 +18541,15 @@ + + + + + + + + + @@ -17131,11 +18564,7 @@ - - - (Only for produces) Attempts to detect the MimeType as well as charset when not known - - + @@ -17144,6 +18573,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -17155,6 +18626,14 @@ + + + + + + + + @@ -17186,7 +18665,7 @@ - Automatically determine the type of the outgoing javax.jms.Message based + Automatically determine the type of the outgoing jakarta.jms.Message based on the value of Message#isBinary(). @@ -17256,6 +18735,15 @@ + + + + + + + + + @@ -17416,6 +18904,13 @@ + + + + + + + @@ -17530,6 +19025,14 @@ + + + + + + + + @@ -17570,9 +19073,17 @@ + + + + + + + + @@ -17719,7 +19230,7 @@ - + @@ -17826,6 +19337,100 @@ + + + + + Renders the contents of the first node (in combination with xslt or xpath). Please note that + if there are child nodes, only the contents are returned, use <code>XML</code> if the xml tags are required + + + + + Renders an xml-nodeset as an xml-string (in combination with xslt or xpath). This will include the xml tags + + + + + Renders the CONTENTS of the first node as a nodeset + that can be used as such when passed as xslt-parameter (only for XSLT 1.0). + Please note that the nodeset may contain multiple nodes, without a common root node. + N.B. The result is the set of children of what you might expect it to be... + + + + + Renders XML as a DOM document; similar to <code>node</code> + with the distinction that there is always a common root node (required for XSLT 2.0) + + + + + Converts the result to a Date, by default using formatString <code>yyyy-MM-dd</code>. + When applied as a JDBC parameter, the method setDate() is used + + + + + Converts the result to a Date, by default using formatString <code>HH:mm:ss</code>. + When applied as a JDBC parameter, the method setTime() is used + + + + + Converts the result to a Date, by default using formatString <code>yyyy-MM-dd HH:mm:ss</code>. + When applied as a JDBC parameter, the method setTimestamp() is used + + + + + Similar to <code>DATETIME</code>, except for the formatString that is <code>yyyy-MM-dd HH:mm:ss.SSS</code> by default + + + + + Converts the result from a XML formatted dateTime to a Date. + When applied as a JDBC parameter, the method setTimestamp() is used + + + + + Converts the result to a Number, using decimalSeparator and groupingSeparator. + When applied as a JDBC parameter, the method setDouble() is used + + + + + Converts the result to an Integer + + + + + Converts the result to a Boolean + + + + + Forces the parameter value to be treated as binary data (e.g. when using a SQL BLOB field). + When applied as a JDBC parameter, the method setBinaryStream() or setBytes() is used + + + + + Forces the parameter value to be treated as character data (e.g. when using a SQL CLOB field). + When applied as a JDBC parameter, the method setCharacterStream() or setString() is used + + + + + Used for StoredProcedure OUT parameters when the database type is a <code>CURSOR</code> or java.sql.JDBCType#REF_CURSOR. + See also org.frankframework.jdbc.StoredProcedureQuerySender. + <br/> + DEPRECATED: Type LIST can also be used in larva test to Convert a List to an xml-string (&lt;items&gt;&lt;item&gt;...&lt;/item&gt;&lt;item&gt;...&lt;/item&gt;&lt;/items&gt;) + + + + @@ -17952,6 +19557,14 @@ + + + + + + + + @@ -17980,6 +19593,20 @@ + + + + + + + + + + + + + + @@ -18101,7 +19728,7 @@ - + @@ -18138,94 +19765,105 @@ - + - Folder that is scanned for files. If not set, the root is scanned + The value of the parameter, or the base for transformation using xpathExpression or stylesheet, or formatting. - + - Folder where files are stored <i>while</i> being processed - - - - - Folder where files are stored <i>after</i> being processed - - - - - Folder where files are stored <i>after</i> being processed, in case the exit-state was not equal to <code>success</code> - - - - - Folder where messages from the error folder can be put on Hold, temporarily - - - - - Folder where a copy of every file that is received is stored - - - - - If set to <code>true</code>, the folders to look for files and to move files to when being processed and after being processed are created if they are specified and do not exist Default: false + Key of a PipelineSession-variable. <br/>If specified, the value of the PipelineSession variable is used as input for + the xpathExpression or stylesheet, instead of the current input message. <br/>If no xpathExpression or stylesheet are + specified, the value itself is returned. <br/>If the value '*' is specified, all existing sessionkeys are added as + parameter of which the name starts with the name of this parameter. <br/>If also the name of the parameter has the + value '*' then all existing sessionkeys are added as parameter (except tsReceived) - + - If set <code>true</code>, the file processed will be deleted after being processed, and not stored Default: false + key of message context variable to use as source, instead of the message found from input message or sessionKey itself - + - Number of copies held of a file with the same name. Backup files have a dot and a number suffixed to their name. If set to 0, no backups will be kept. Default: 0 + Instead of a fixed <code>sessionKey</code> it's also possible to use a XPath expression applied to the input message to extract the name of the session-variable. - + - If set <code>true</code>, the destination file will be deleted if it already exists Default: false + If the result of sessionKey, xpathExpression and/or stylesheet returns null or an empty string, this value is returned - + - If <code>true</code>, the file modification time is used in addition to the filename to determine if a file has been seen before Default: false + Comma separated list of methods (<code>defaultValue</code>, <code>sessionKey</code>, <code>pattern</code>, <code>value</code> or <code>input</code>) to use as default value. Used in the order they appear until a non-null value is found. Default: <code>defaultValue</code> - + - Minimal age of file <i>in milliseconds</i>, to avoid receiving a file while it is still being written Default: 1000 + Value of parameter is determined using substitution and formatting, following MessageFormat syntax with named parameters. The expression can contain references + to <code>session-variables</code> or other <code>parameters</code> using the {name-of-parameter} and is formatted using java.text.MessageFormat. + <br/><b>NB: When referencing other <code>parameters</code> these MUST be defined before the parameter using pattern substitution.</b> + <br/> + <br/> + If for instance <code>fname</code> is a parameter or session-variable that resolves to Eric, then the pattern + 'Hi {fname}, how do you do?' resolves to 'Hi Eric, do you do?'.<br/> + The following predefined reference can be used in the expression too:<ul> + <li>{now}: the current system time</li> + <li>{uid}: an unique identifier, based on the IP address and java.rmi.server.UID</li> + <li>{uuid}: an unique identifier, based on the IP address and java.util.UUID</li> + <li>{hostname}: the name of the machine the application runs on</li> + <li>{username}: username from the credentials found using authAlias, or the username attribute</li> + <li>{password}: password from the credentials found using authAlias, or the password attribute</li> + <li>{fixeddate}: fake date, for testing only</li> + <li>{fixeduid}: fake uid, for testing only</li> + <li>{fixedhostname}: fake hostname, for testing only</li> + </ul> + A guid can be generated using {hostname}_{uid}, see also + <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/rmi/server/uid.html">http://java.sun.com/j2se/1.4.2/docs/api/java/rmi/server/uid.html</a> for more information about (g)uid's or + <a href="http://docs.oracle.com/javase/1.5.0/docs/api/java/util/uuid.html">http://docs.oracle.com/javase/1.5.0/docs/api/java/util/uuid.html</a> for more information about uuid's. + <br/> + When combining a date or time <code>pattern</code> like {now} or {fixeddate} with a DATE, TIME, DATETIME or TIMESTAMP <code>type</code>, the effective value of the attribute + <code>formatString</code> must match the effective value of the formatString in the <code>pattern</code>. - + - Key of Property to use as messageId. If not set, the filename of the file as it was received in the inputFolder is used as the messageId Default: for MailFileSystems: Message-ID + If set <code>true</code> pattern elements that cannot be resolved to a parameter or sessionKey are silently resolved to an empty string - + - If set <code>true</code>, no browsers for process folders are generated Default: false + If set (>=0) and the length of the value of the parameter falls short of this minimum length, the value is padded Default: -1 - + - Filter of files to look for in inputFolder e.g. '*.inp'. + If set (>=0) and the length of the value of the parameter exceeds this maximum length, the length is trimmed to this maximum length Default: -1 - + - Filter of files to be excluded when looking in inputFolder. + If set to <code>true</code>, the value of the parameter will not be shown in the log (replaced by asterisks) Default: <code>false</code> - + - If set, an XML with all message properties is provided under this key + Set the mode of the parameter, which determines if the parameter is an INPUT, OUTPUT, or INOUT. + This parameter only has effect for StoredProcedureQuerySender. + An OUTPUT parameter does not need to have a value specified, but does need to have the type specified. + Parameter values will not be updated, but output values will be put into the result of the + StoredProcedureQuerySender. + <b/> + If not specified, the default is INPUT. + + + - Name of the JMS destination (queue or topic) to use for sending replies. If <code>useReplyTo</code>=<code>true</code>, + Name of the JMS destination (queue or topic) to use for sending replies. If <code>useReplyTo=true</code>, the sender specified reply destination takes precedence over this one. @@ -18262,12 +19900,12 @@ - The JMS javax.jms.Message class for the outgoing message. + The JMS jakarta.jms.Message class for the outgoing message. Currently supported are MessageClass#TEXT for JMS TextMessage, MessageClass#BYTES for JMS BytesMessage, or MessageClass#AUTO for auto-determination based on whether the input Message is binary or character. <p> - Defaults to MessageClass#AUTO, unless the default is overridden in AppConstants with property {@code jms.messageClass.default} + Defaults to MessageClass#AUTO, unless the default is overridden in AppConstants with property <code>jms.messageClass.default</code> </p> @@ -18400,7 +20038,7 @@ - JNDI name of datasource to be used, can be configured via jmsRealm, too Default: jdbc.datasource.default + JNDI name of datasource to be used, can be configured via jmsRealm, too Default: <code>jdbc.datasource.default</code> @@ -18460,7 +20098,7 @@ - Controls wheter the returned package content is db2 format or xml format. + Controls if the returned package content is db2 format or xml format. Possible values: <ul> <li>select:</li> xml content s expected @@ -18495,7 +20133,7 @@ - Named parameters will be auto-detected by default. Every string in the query which equals <code>?{paramname}</code> will be replaced by the value of the corresponding parameter. The parameters don't need to be in the correct order and unused parameters are skipped. + Named parameters will be auto-detected by default. Every string in the query which equals <code><code>?{</code>paramname<code>}</code></code> will be replaced by the value of the corresponding parameter. The parameters don't need to be in the correct order and unused parameters are skipped. @@ -18528,6 +20166,14 @@ If true and scalar=false, multiline indented XML is produced Default: false + + + The type of output. If not set then defaults to old-style XML. If set to XML, new-style XML is used. EXPERIMENTAL: datatypes like numbers are not yet rendered correctly Default: false + + + + + Parameter that is used, if specified and not empty, to determine the destination. Overrides the <code>destination</code> attribute @@ -18540,7 +20186,8 @@ - (Only used when <code>synchronous</code>=<code>true</code> and <code>replyToName</code> is set). Indicates whether the server uses the correlationId from the pipeline, the correlationId from the message or the messageId in the correlationId field of the reply. This requires the sender to have set the correlationId at the time of sending. Default: MESSAGEID + (Only used when <code>synchronous=true</code> and <code>replyToName</code> is set). Indicates whether the server uses the correlationId from the pipeline, + the correlationId from the message or the messageId in the correlationId field of the reply. This requires the sender to have set the correlationId at the time of sending. Default: MESSAGEID @@ -18800,17 +20447,17 @@ - If <code>true</code>, the hostname in the certificate will be checked against the actual hostname of the peer + If <code>true</code>, the hostname in the certificate will be checked against the actual hostname of the peer. Note: This attribute is unsafe and should not be used in a production environment. Default: false - If <code>true</code>, self signed certificates are accepted Default: false + If <code>true</code>, self signed certificates are accepted. Note: This attribute is unsafe and should not be used in a production environment. Default: false - If <code>true</code>, CertificateExpiredExceptions are ignored Default: false + If <code>true</code>, CertificateExpiredExceptions are ignored. Note: This attribute is unsafe and should not be used in a production environment. Default: false @@ -18830,7 +20477,7 @@ - Used when StaleChecking=<code>true</code>. Timeout after which an idle connection will be validated before being used. Default: 5000 ms + Used when <code>staleChecking</code> is <code>true</code>. Timeout after which an idle connection will be validated before being used. Default: 5000 ms @@ -18850,7 +20497,7 @@ - Allows you to choose which CipherSuites are used when connecting to an endpoint. Works in tandem with {@code protocol} as the provided Suite may not be valid for the provided Protocol + Allows you to choose which CipherSuites are used when connecting to an endpoint. Works in tandem with <code>protocol</code> as the provided Suite may not be valid for the provided Protocol See the Java Security Standard Algorithm Names Specification for all available options. Note that these may differ depending on the JRE you're using. @@ -18899,11 +20546,6 @@ Comma separated list of domains to which mails can be send, domains not on the list are filtered out. Empty allows all domains - - - Optional identifier for this storage, to be able to share the physical storage between a number of receivers and pipes. - - Possible values are <code>E</code> (error store), <code>M</code> (message store), <code>L</code> (message log for Pipe) or <code>A</code> (message log for Receiver).<br/> @@ -19089,7 +20731,9 @@ Regular expression to mask strings in the log. For example, the regular expression <code>(?&lt;=&lt;password&gt;).*?(?=&lt;/password&gt;)</code> will replace every character between keys '&lt;password&gt;' and '&lt;/password&gt;'. <b>note:</b> this feature is used at adapter level, - so one pipe affects all pipes in the pipeline (and multiple values in different pipes are merged) + so a <code>hideRegex</code> set on one pipe affects all pipes in the pipeline (and multiple values in different pipes are combined into a single regex). + The regular expressions are matched against part of the log lines. See int) + with <code>mode = 0</code> for how regular expressions are matched and replaced. @@ -19176,6 +20820,11 @@ If set <code>true</code>, the input is assumed to be the name of the file to be validated. Otherwise the input itself is validated Default: false + + + Characterset used for reading file, only used when <code>validateFile</code> is <code>true</code> Default: utf-8 + + If set <code>true</code>, the namespace from schemalocation is added to the schema document as targetnamespace Default: false @@ -19199,7 +20848,7 @@ If set <code>true</code>, send warnings to logging and console about syntax problems in the configured schema('s). - Alternatively, warnings can be switched off using suppression properties XSD_VALIDATION_WARNINGS_SUPPRESS_KEY, XSD_VALIDATION_ERROR_SUPPRESS_KEY and XSD_VALIDATION_FATAL_ERROR_SUPPRESS_KEY Default: true + Alternatively, warnings can be switched off using suppression properties <code>XSD_VALIDATION_WARNINGS_SUPPRESS_KEY</code>, <code>XSD_VALIDATION_ERROR_SUPPRESS_KEY</code> and <code>XSD_VALIDATION_FATAL_ERROR_SUPPRESS_KEY</code> Default: true @@ -19227,11 +20876,6 @@ Session key for retrieving a schema - - - Namespace defintions for xpathExpression. Must be in the form of a comma or space separated list of <code>prefix=namespaceuri</code>-definitions. For some use other cases (NOT xpathExpression), one entry can be without a prefix, that will define the default namespace. - - Key of session variable to store number of items processed, i.e. the position or index in the set of items to be processed. When handling the first item, the value will be 1. @@ -19239,12 +20883,12 @@ - The maximum number of items returned. The (default) value of 0 means unlimited, all available items will be returned. Special forward maxItemsReached can be configured to follow Default: 0 + The maximum number of items returned. The (default) value of 0 means unlimited, all available items will be returned. Special forward <code>maxItemsReached</code> can be configured to follow Default: 0 - Expression evaluated on each result and forwards to [stopConditionMet] forward if configured. + Expression evaluated on each result and forwards to [<code>stopConditionMet</code>] forward if configured. Iteration stops if condition returns anything other than an empty result. To test for the root element to have an attribute 'finished' with the value 'yes', the expression <code>*[@finished='yes']</code> can be used. This can be used if the condition to stop can be derived from the item result. To stop after a maximum number of items has been processed, use <code>maxItems</code>. Previous versions documented that <code>position()=2</code> could be used. This is not working as expected; Use maxItems instead diff --git a/src/main/configurations/FrankConfig.xsd b/src/main/configurations/FrankConfig.xsd index d2917c351..4418db222 100644 --- a/src/main/configurations/FrankConfig.xsd +++ b/src/main/configurations/FrankConfig.xsd @@ -1,5 +1,5 @@ - + Container of Adapters that belong together. @@ -41,7 +41,12 @@ - An Adapter receives a specific type of messages and processes them. It has Receivers + The Adapter is the central manager in the framework. It has knowledge of both + Receivers as well as the PipeLine and statistics. + The Adapter is the class that is responsible for configuring, initializing and + accessing/activating Receivers, Pipelines, statistics etc. + <br/> + An Adapter receives a specific type of messages and processes them. It has Receivers that receive the messages and a PipeLine that transforms the incoming messages. Each adapter is part of a Configuration. <br/> If an adapter can receive its messages through multiple channels (e.g. RESTful HTTP requests, incoming files, etc), @@ -91,7 +96,7 @@ - Defines behaviour for logging messages. Configuration is done in the MSG appender in log4j4ibis.properties. Default: <code>INFO, unless overridden by property msg.log.level.default</code> + Defines behaviour for logging messages. Configuration is done in the MSG appender in log4j4ibis.properties. Default: <code>INFO</code>, unless overridden by property <code>msg.log.level.default</code> @@ -202,14 +207,14 @@ timeout (in seconds) to start receiver. If this timeout is exceeded, the Receiver startup is - aborted and all resources closed and the receiver will be in state {@code EXCEPTION_STARTING} + aborted and all resources closed and the receiver will be in state <code>EXCEPTION_STARTING</code> and a new start command may be issued again. timeout (in seconds) to stop receiver. If this timeout is exceeded, stopping will be aborted - and the receiver will be in state {@code EXCEPTION_STOPPING}. + and the receiver will be in state <code>EXCEPTION_STOPPING</code>. The receiver will no longer be running but some resources might not have been cleaned up properly. @@ -278,7 +283,7 @@ - If set, the character data in this XML element is stored inside a session key and in the message it is replaced by a reference to this session key: {sessionKey: + <code>elementToMoveSessionKey</code> + } + If set, the character data in this XML element is stored inside a session key and in the message it is replaced by a reference to this session key: <code>{sessionKey: elementToMoveSessionKey}</code> @@ -294,7 +299,7 @@ - Regular expression to mask strings in the errorStore/logStore. Every character between to the strings in this expression will be replaced by a '*'. For example, the regular expression (?&lt;=&lt;party&gt;).*?(?=&lt;/party&gt;) will replace every character between keys &lt;party&gt; and &lt;/party&gt; + Regular expression to mask strings in the errorStore/logStore and logfiles. Every character between to the strings in this expression will be replaced by a '*'. For example, the regular expression (?&lt;=&lt;party&gt;).*?(?=&lt;/party&gt;) will replace every character between keys &lt;party&gt; and &lt;/party&gt; @@ -312,7 +317,7 @@ - If set to <code>true</code>, every message read will be processed as if it is being retried, by setting a session variable to retry. Default: false + If set to <code>true</code>, every message read will be processed as if it is being retried, by setting a session variable to <code>retry</code>. Default: false @@ -329,77 +334,31 @@ - Generic parameter definition. - - A parameter resembles an attribute. However, while attributes get their value at configuration-time, - parameters get their value at the time of processing the message. Value can be retrieved from the message itself, - a fixed value, or from the pipelineSession. If this does not result in a value (or if neither of these is specified), a default value - can be specified. If an XPathExpression or stylesheet is specified, it will be applied to the message, the value retrieved - from the pipelineSession or the fixed value specified. If the transformation produces no output, the default value - of the parameter is taken if provided. - <br/><br/> - Examples: - <pre><code> - stored under SessionKey 'TransportInfo': - &lt;transportinfo&gt; - &lt;to&gt;***@zonnet.nl&lt;/to&gt; - &lt;to&gt;***@zonnet.nl&lt;/to&gt; - &lt;cc&gt;***@zonnet.nl&lt;/cc&gt; - &lt;/transportinfo&gt; - - to obtain all 'to' addressees as a parameter: - sessionKey="TransportInfo" - xpathExpression="transportinfo/to" - type="xml" - - Result: - &lt;to&gt;***@zonnet.nl&lt;/to&gt; - &lt;to&gt;***@zonnet.nl&lt;/to&gt; - </code></pre> - - N.B. to obtain a fixed value: a non-existing 'dummy' <code>sessionKey</code> in combination with the fixed value in <code>defaultValue</code> is used traditionally. - The current version of parameter supports the 'value' attribute, that is sufficient to set a fixed value. + Placeholder class to allow legacy configuration notations <code>&lt;param type='number' /&gt;</code> in the new Frank!Config XSD. + <p> + The attribute <code>type</code> has been removed in favor of explicit ParameterTypes such as: <code>NumberParameter</code>, <code>DateParameter</code> and <code>BooleanParameter</code>. + Using the new elements enables the use of auto-completion for the specified type. - + - - - Name of the parameter - - - The target data type of the parameter, related to the database or XSLT stylesheet to which the parameter is applied. + The target data type of the parameter, related to the database or XSLT stylesheet to which the parameter is applied. Default: STRING - - - The value of the parameter, or the base for transformation using xpathExpression or stylesheet, or formatting. - - - - - Key of a PipelineSession-variable. <br/>If specified, the value of the PipelineSession variable is used as input for - the xpathExpression or stylesheet, instead of the current input message. <br/>If no xpathExpression or stylesheet are - specified, the value itself is returned. <br/>If the value '*' is specified, all existing sessionkeys are added as - parameter of which the name starts with the name of this parameter. <br/>If also the name of the parameter has the - value '*' then all existing sessionkeys are added as parameter (except tsReceived) - - - - - key of message context variable to use as source, instead of the message found from input message or sessionKey itself - - - + - Instead of a fixed <code>sessionKey</code> it's also possible to use a XPath expression applied to the input message to extract the name of the session-variable. + Name of the parameter + + + + URL to a stylesheet that wil be applied to the contents of the message or the value of the session-variable. @@ -418,7 +377,7 @@ Namespace definitions for xpathExpression. Must be in the form of a comma or space separated list of - <code>prefix=namespaceuri</code>-definitions. One entry can be without a prefix, that will define the default namespace. + <code>prefix=namespaceuri</code> definitions. One entry can be without a prefix, that will define the default namespace. @@ -426,44 +385,9 @@ When set <code>true</code> namespaces (and prefixes) in the input message are removed before the stylesheet/xpathExpression is executed Default: <code>false</code> - - - If the result of sessionKey, xpathExpression and/or stylesheet returns null or an empty string, this value is returned - - - - - Comma separated list of methods (<code>defaultValue</code>, <code>sessionKey</code>, <code>pattern</code>, <code>value</code> or <code>input</code>) to use as default value. Used in the order they appear until a non-null value is found. Default: <code>defaultValue</code> - - - - - Value of parameter is determined using substitution and formatting, following MessageFormat syntax with named parameters. The expression can contain references - to <code>session-variables</code> or other <code>parameters</code> using the {name-of-parameter} and is formatted using java.text.MessageFormat. - <br/><b>NB: When referencing other <code>parameters</code> these MUST be defined before the parameter using pattern substitution.</b> - <br/> - <br/> - If for instance <code>fname</code> is a parameter or session-variable that resolves to Eric, then the pattern - 'Hi {fname}, how do you do?' resolves to 'Hi Eric, do you do?'.<br/> - The following predefined reference can be used in the expression too:<ul> - <li>{now}: the current system time</li> - <li>{uid}: an unique identifier, based on the IP address and java.rmi.server.UID</li> - <li>{uuid}: an unique identifier, based on the IP address and java.util.UUID</li> - <li>{hostname}: the name of the machine the application runs on</li> - <li>{username}: username from the credentials found using authAlias, or the username attribute</li> - <li>{password}: password from the credentials found using authAlias, or the password attribute</li> - <li>{fixeddate}: fake date, for testing only</li> - <li>{fixeduid}: fake uid, for testing only</li> - <li>{fixedhostname}: fake hostname, for testing only</li> - </ul> - A guid can be generated using {hostname}_{uid}, see also - <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/rmi/server/uid.html">http://java.sun.com/j2se/1.4.2/docs/api/java/rmi/server/uid.html</a> for more information about (g)uid's or - <a href="http://docs.oracle.com/javase/1.5.0/docs/api/java/util/uuid.html">http://docs.oracle.com/javase/1.5.0/docs/api/java/util/uuid.html</a> for more information about uuid's. - <br/> - When combining a date or time <code>pattern</code> like {now} or {fixeddate} with a DATE, TIME, DATETIME or TIMESTAMP <code>type</code>, the effective value of the attribute - <code>formatString</code> must match the effective value of the formatString in the <code>pattern</code>. - - + + + Alias used to obtain username and password, used when a <code>pattern</code> containing {username} or {password} is specified @@ -479,65 +403,11 @@ Default password that is used when a <code>pattern</code> containing {password} is specified - - - If set <code>true</code> pattern elements that cannot be resolved to a parameter or sessionKey are silently resolved to an empty string - - - - - Used in combination with types <code>DATE</code>, <code>TIME</code>, <code>DATETIME</code> and <code>TIMESTAMP</code> to parse the raw parameter string data into an object of the respective type Default: depends on type - - - - - Used in combination with type <code>NUMBER</code> Default: system default - - - - - Used in combination with type <code>NUMBER</code> Default: system default - - - - - If set (>=0) and the length of the value of the parameter falls short of this minimum length, the value is padded Default: -1 - - - - - If set (>=0) and the length of the value of the parameter exceeds this maximum length, the length is trimmed to this maximum length Default: -1 - - - - - Used in combination with type <code>number</code>; if set and the value of the parameter exceeds this maximum value, this maximum value is taken - - - - - Used in combination with type <code>number</code>; if set and the value of the parameter falls short of this minimum value, this minimum value is taken - - - - - If set to <code>true</code>, the value of the parameter will not be shown in the log (replaced by asterisks) Default: <code>false</code> - - - - - Set the mode of the parameter, which determines if the parameter is an INPUT, OUTPUT, or INOUT. - This parameter only has effect for StoredProcedureQuerySender. - An OUTPUT parameter does not need to have a value specified, but does need to have the type specified. - Parameter values will not be updated, but output values will be put into the result of the - StoredProcedureQuerySender. - <b/> - If not specified, the default is INPUT. - - - - - + + + + + @@ -811,18 +681,17 @@ <br/><br/> If no exits are specified, a default one is created with name="READY" and state="SUCCESS". <br/><br/> - <b>example:</b> <code><pre> - &lt;Exits&gt; - &lt;Exit name="READY" state="SUCCESS" /&gt; - &lt;Exit name="Created" state="ERROR" code="201" empty="true" /&gt; - &lt;Exit name="NotModified" state="ERROR" code="304" empty="true" /&gt; - &lt;Exit name="BadRequest" state="ERROR" code="400" empty="true" /&gt; - &lt;Exit name="NotAuthorized" state="ERROR" code="401" empty="true" /&gt; - &lt;Exit name="NotAllowed" state="ERROR" code="403" empty="true" /&gt; - &lt;Exit name="Teapot" state="SUCCESS" code="418" /&gt; - &lt;Exit name="ServerError" state="ERROR" code="500" /&gt; - &lt;/Exits&gt; - </pre></code> + <b>example:</b> + <pre><code>&lt;Exits&gt; + &lt;Exit name=&quot;&lt;code&gt;READY&lt;/code&gt;&quot; state=&quot;&lt;code&gt;SUCCESS&lt;/code&gt;&quot; /&gt; + &lt;Exit name=&quot;Created&quot; state=&quot;ERROR&quot; code=&quot;201&quot; empty=&quot;true&quot; /&gt; + &lt;Exit name=&quot;NotModified&quot; state=&quot;ERROR&quot; code=&quot;304&quot; empty=&quot;true&quot; /&gt; + &lt;Exit name=&quot;BadRequest&quot; state=&quot;ERROR&quot; code=&quot;400&quot; empty=&quot;true&quot; /&gt; + &lt;Exit name=&quot;NotAuthorized&quot; state=&quot;ERROR&quot; code=&quot;401&quot; empty=&quot;true&quot; /&gt; + &lt;Exit name=&quot;NotAllowed&quot; state=&quot;ERROR&quot; code=&quot;403&quot; empty=&quot;true&quot; /&gt; + &lt;Exit name=&quot;Teapot&quot; state=&quot;SUCCESS&quot; code=&quot;418&quot; /&gt; + &lt;Exit name=&quot;ServerError&quot; state=&quot;ERROR&quot; code=&quot;500&quot; /&gt; + &lt;/Exits&gt;</code></pre> @@ -838,21 +707,21 @@ the optionally specified http status code. Each Exit should have a unique name. See Exits for examples. <br/><br/> - When a Pipeline doesn't have an Exits element configured it will be initialized with one Exit having name READY and - state SUCCESS. + When a Pipeline doesn't have an Exits element configured it will be initialized with one Exit having name <code>READY</code> and + state <code>SUCCESS</code>. <br/><br/> The name of an Exit can be referenced by the <code>path</code> attribute of a Forward within a Pipe. The name of the Exit that can be referenced by a PipeForward's <code>path</code> attribute. When a Pipeline doesn't have an Exits - element configured it will be initialized with one Exit having name READY (and state SUCCESS) + element configured it will be initialized with one Exit having name <code>READY</code> (and state SUCCESS) The state of the Pipeline that is returned to the Receiver for this Exit. When a Pipeline doesn't have an Exits - element configured it will be initialized with one Exit having state SUCCESS (and name READY) + element configured it will be initialized with one Exit having state SUCCESS (and name <code>READY</code>) @@ -901,9 +770,92 @@ + + + The flow contains the handlers to handle records of a specific type. + Each flow is registered to a manager using the recordHandlerManagerRef. + + + + Key under which this flow is registered in the manager + + + + + Name of the manager to be used after handling this record + + + + + Name of the recordHandler to be used to transform records of the type specified in the key (optional) + + + + + Name of the manager to which this flow must be added + + + + + Name of the resultHandler to be used to handle the transformed result + + + + + Instructs the resultHandler to start a new block before the parsed line is processed + + + + + Instructs the resultHandler to end the specified block before the parsed line is processed + + + + + Instructs the resultHandler to start a new block after the parsed line is processed + + + + + Instructs the resultHandler to end the specified block after the parsed line is processed + + + + + If <code>true</code>, any open block of this type (and other nested open 'autoClose' block) is closed before a new one of the same type is opened. At a forced close, nested blocks are closed too (since 4.9) Default: true + + + + + If &gt;0 the <code>openBlockBeforeLine</code> instruction is only performed when the current line number is a multiple of this value Default: 0 + + + + + + + + + + + + + + + + + + + + + + + - Container for jobs that are scheduled for periodic execution. + Container for jobs that are scheduled for periodic execution. + <p> + Configure/start/stop lifecycles are managed by Spring. @@ -924,7 +876,8 @@ - time (with suffix 'd', 'h', 'm' or 's' in milliseconds) that must have passed at least before a file will be deleted Default: 30d + Minimum amount of time (with suffix 'd', 'h', 'm' or 's') that must have passed before a file will be deleted. + You may only use one suffix! Default: 30d @@ -1020,7 +973,9 @@ - Manager for Monitoring. + Manager for Monitoring. + <p> + Configure/start/stop lifecycles are managed by Spring. @@ -1034,19 +989,14 @@ <p>Example configuration:</p> - <pre><code> - {@literal - <monitor name="Receiver Shutdown" destinations="MONITOR_LOG"> - <trigger className="org.frankframework.monitoring.Alarm" severity="WARNING"> - <event>Receiver Shutdown</event> - </trigger> - <trigger className="org.frankframework.monitoring.Clearing" severity="WARNING"> - <event>Receiver Shutdown</event> - </trigger> - </monitor> - } - - </code></pre> + <pre><code>&lt;monitor name=&quot;Receiver Shutdown&quot; destinations=&quot;MONITOR_LOG&quot;&gt; + &lt;trigger className=&quot;org.frankframework.monitoring.Alarm&quot; severity=&quot;WARNING&quot;&gt; + &lt;event&gt;Receiver Shutdown&lt;/event&gt; + &lt;/trigger&gt; + &lt;trigger className=&quot;org.frankframework.monitoring.Clearing&quot; severity=&quot;WARNING&quot;&gt; + &lt;event&gt;Receiver Shutdown&lt;/event&gt; + &lt;/trigger&gt; + &lt;/monitor&gt;</code></pre> @@ -1124,7 +1074,7 @@ - + @@ -1136,124 +1086,334 @@ - + - - - Listener that allows a Receiver to receive messages as a REST webservice. - Prepends the configured URI pattern with <code>api/</code>. The structure of REST messages is described - by OpenAPI specifications. The Frank!Framework generates an OpenAPI specification for each ApiListener and - also an OpenAPI specification for all ApiListeners in all configurations. You can - find them in the Frank!Console under main menu item Webservices, heading Available ApiListeners. - <p> - The generated OpenAPI specifications have <code>servers</code> and <code>paths</code> objects and - therefore they document the full URLs of the provided services. - <p> - It is possible to automatically generate eTags over the listener result. This can be controlled by globally - setting the property <code>api.etag.enabled</code> or by setting the attribute <code>updateEtag="true"</code>. - When enabled the listener will respond to the 'if-match', 'if-none-match' headers and may return status code 304. - <p> - In order to make eTags work across multiple nodes you must configure Memcached to store the eTags. - The following properties will need to be set: - <ul> - <li>etag.cache.server=ip or hostname:port</li> - <li>etag.cache.type=memcached</li> - </ul> - In case authentication, is required the following application properties can be used: - <ul> - <li>etag.cache.username</li> - <li>etag.cache.password</li> - <li>etag.cache.authalias</li> - </ul> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ESB (Enterprise Service Bus) extension of JmsListener. - + - - - - - + + + + + + + + + - - - Microsoft Exchange Implementation of a MailListener. - + + + + + + - - + + - + - - + + - - - FxF extension of EsbJmsListener. - - <p><b>Configuration </b><i>(where deviating from EsbJmsListener)</i><b>:</b> - <table border="1"> - <tr><th>attributes</th><th>description</th><th>default</th></tr> - <tr><td>destinationName</td><td>name of the JMS destination (queue or topic) to use</td><td>"jms/FileTransferAction"</td></tr> - <tr><td>jmsRealm</td><td>&nbsp;</td><td>"qcf_tibco_p2p_ff"</td></tr> - <tr><td>messageProtocol</td><td>protocol of ESB service to be called. Possible values - <ul> - <li>"FF": Fire & Forget protocol</li> - <li>"RR": Request-Reply protocol</li> - </ul></td><td>"FF"</td></tr> - </table></p> - + - - + + - - - - - + + + + + + + + + + + + + + + + Name of the parameter + + + + + + + + + URL to a stylesheet that wil be applied to the contents of the message or the value of the session-variable. + + + + + the XPath expression to extract the parameter value from the (xml formatted) input or session-variable. + + + + + If set to <code>2</code> or <code>3</code> a Saxon (net.sf.saxon) xslt processor 2.0 or 3.0 respectively will be used, otherwise xslt processor 1.0 (org.apache.xalan). <code>0</code> will auto-detect Default: 0 + + + + + Namespace definitions for xpathExpression. Must be in the form of a comma or space separated list of + <code>prefix=namespaceuri</code> definitions. One entry can be without a prefix, that will define the default namespace. + + + + + When set <code>true</code> namespaces (and prefixes) in the input message are removed before the stylesheet/xpathExpression is executed Default: <code>false</code> + + + + + + + + Alias used to obtain username and password, used when a <code>pattern</code> containing {username} or {password} is specified + + + + + Default username that is used when a <code>pattern</code> containing {username} is specified + + + + + Default password that is used when a <code>pattern</code> containing {password} is specified + + + + + + + + + + + + + + + + + + + Used in combination with types <code>DATE</code>, <code>TIME</code>, <code>DATETIME</code> and <code>TIMESTAMP</code> to parse the raw parameter string data into an object of the respective type Default: depends on type + + + + + + + + + + + + + + + + + + + + + Separate the integer part from the fractional part of a number. Default: system default + + + + + In the United States, the comma is typically used for the grouping separator; however, several publication standards follow international standards in using either a space or a thin space character. Default: system default + + + + + Used in combination with type <code>number</code>; if set and the value of the parameter exceeds this maximum value, this maximum value is taken + + + + + Used in combination with type <code>number</code>; if set and the value of the parameter falls short of this minimum value, this minimum value is taken + + + + + + + + + + + + Listener that allows a Receiver to receive messages as a REST webservice. + Prepends the configured URI pattern with <code>api/</code>. The structure of REST messages is described + by OpenAPI specifications. The Frank!Framework generates an OpenAPI specification for each ApiListener and + for all ApiListeners in all configurations combined. You can + find them in the Frank!Console under main menu item Webservices, heading Available ApiListeners. + <p> + The generated OpenAPI specifications have <code>servers</code> and <code>paths</code> objects and + therefore they document the full URLs of the provided services. + <p> + It is possible to automatically generate eTags over the listener result. This can be controlled by globally + setting the property <code>api.etag.enabled</code> or by setting the attribute <code>updateEtag="true"</code>. + When enabled the listener will respond to the <code>If-Match</code>, <code>If-None-Match</code> headers and may return status code 304. + <p> + In order to enable eTags for multiple nodes you must configure Memcached to store the eTags. + The following properties will need to be set: + <ul> + <li><code>etag.cache.server=ip or hostname:port</code></li> + <li><code>etag.cache.type=memcached</code></li> + </ul> + In case authentication, is required the following application properties can be used: + <ul> + <li><code>etag.cache.username</code></li> + <li><code>etag.cache.password</code></li> + <li><code>etag.cache.authalias</code></li> + </ul> + + + + + + + + + + + + + + + + + + + + + Listener that looks for files in a LocalFileSystem. The DirectoryListener keeps track of the file process by storing it in different folders. The application may create the folders if you (a) set the <code>root</code> attribute and (b) set the attribute <code>createFolders</code> to true. + + The attribute <code>messageType</code> dictates what information of the file is passed to the pipeline. This may be the name, canonical path, the entire file, or the file's metadata. + + <p> + Example usage:<br> + <pre><code> + &lt;DirectoryListener + name="directoryListener" + messageType="info" + root="${rootdirectory}" + inputFolder="in" + inProcessFolder="inProcess" + errorFolder="error" + createFolders="true" + /&gt; + </code></pre> + + </p> + + + + + + + + + + + + ESB (Enterprise Service Bus) extension of JmsListener. + + + + + + + + + + + + Microsoft Exchange Implementation of a mail filesystem. + + + + + + + + + + + + Listener to receive messages sent by the org.frankframework.senders.FrankSender, for situations where + calling an Adapter directly is not desired. This could be because message / error logging is required for messages + sent to the subadapter. + <br/> + See the org.frankframework.senders.FrankSender documentation for more information. + + + + + + + + + + + + + + + + + + + + + FxF extension of EsbJmsListener. + + <p><b>Configuration </b><i>(where deviating from EsbJmsListener)</i><b>:</b> + <table border="1"> + <tr><th>attributes</th><th>description</th><th>default</th></tr> + <tr><td>destinationName</td><td>name of the JMS destination (queue or topic) to use</td><td>"jms/FileTransferAction"</td></tr> + <tr><td>jmsRealm</td><td>&nbsp;</td><td>"qcf_tibco_p2p_ff"</td></tr> + <tr><td>messageProtocol</td><td>protocol of ESB service to be called. Possible values + <ul> + <li>"FF": Fire & Forget protocol</li> + <li>"RR": Request-Reply protocol</li> + </ul></td><td>"FF"</td></tr> + </table></p> + + + + + + + + + + + + + + @@ -1339,7 +1499,7 @@ <p>You can add parameters to the JmsListener, the values will be added as Headers to the JMS response message.</p> <p><b>Notice:</b> the JmsListener is ONLY capable of processing - javax.jms.TextMessages and javax.jms.BytesMessage<br/><br/> + jakarta.jms.TextMessages and jakarta.jms.BytesMessage<br/><br/> </p> @@ -1352,24 +1512,19 @@ - Read messages from the IBISSTORE database table previously stored by a - MessageStoreSender. - + Read messages from the IBISSTORE database table previously stored by a MessageStoreSender. + <p> Example configuration: - <code><pre> - &lt;Receiver - name="03 MessageStoreReceiver" - numThreads="4" - transactionAttribute="Required" - pollInterval="1" - &gt; - &lt;MessageStoreListener - name="03 MessageStoreListener" - slotId="${instance.name}/TestMessageStore" - statusValueInProcess="I" - /&gt; - &lt;/Receiver&gt; - </pre></code> + <pre><code>&lt;Receiver + name=&quot;03 MessageStoreReceiver&quot; + numThreads=&quot;4&quot; + transactionAttribute=&quot;Required&quot; + pollInterval=&quot;1&quot;&gt; + &lt;MessageStoreListener + name=&quot;03 MessageStoreListener&quot; + slotId=&quot;${instance.name}/TestMessageStore&quot; + statusValueInProcess=&quot;I&quot; /&gt; + &lt;/Receiver&gt;</code></pre> If you have a <code>MessageStoreListener</code>, failed messages are automatically kept in database table IBISSTORE. Messages are also kept after successful processing. The state of a message @@ -1444,7 +1599,7 @@ whatever it is configured to.</p> </p> <p><b>Notice:</b> the JmsListener is ONLY capable of processing - <code>javax.jms.TextMessage</code>s <br/><br/> + <code>jakarta.jms.TextMessage</code>s <br/><br/> </p> @@ -1494,7 +1649,7 @@ whatever it is configured to.</p> <p><b>Notice:</b> the JmsListener is ONLY capable of processing - javax.jms.TextMessages and javax.jms.BytesMessage<br/><br/> + jakarta.jms.TextMessages and jakarta.jms.BytesMessage<br/><br/> </p> @@ -1625,19 +1780,22 @@ - + - HTTP method(s) to listen to, separated by comma Default: GET + HTTP method(s) to listen to. Inside XML Configurations: for multiple values, use a comma as separator. Default: GET + + + - URI pattern to register this listener on, eq. `/my-listener/{something}/here` + URI pattern to register this listener on, eq. <code>/my-listener/{something}/here</code> - The required contentType on requests, if it doesn't match a 415 Unsupported Media Type is replied Default: ANY + The required contentType on requests, if it doesn't match a <code>415</code> status (Unsupported Media Type) is returned. Default: ANY @@ -1645,7 +1803,8 @@ - The specified contentType on response. When <code>ANY</code> the response will determine the content type based on the return data. Default: ANY + The specified contentType on response. When <code>ANY</code> the response will determine the content-type when it's known and will never calculate it. If no match is found <code>*&#47;*</code> will be used. + When <code>DETECT</code> the framework attempts to detect the MimeType (as well as charset) when not known. Default: ANY @@ -1664,7 +1823,7 @@ - Enables security for this listener. If you wish to use the application servers authorisation roles [AUTHROLE], you need to enable them globally for all ApiListeners with the `servlet.ApiListenerServlet.securityRoles=IbisTester,IbisWebService` property Default: <code>NONE</code> + Enables security for this listener. If you wish to use the application servers authorization roles [AUTHROLE], you need to enable them globally for all ApiListeners with the <code>servlet.ApiListenerServlet.securityRoles=IbisTester,IbisWebService</code> property Default: <code>NONE</code> @@ -1672,7 +1831,7 @@ - Only active when AuthenticationMethod=AUTHROLE. Comma separated list of authorization roles which are granted for this service, eq. IbisTester,IbisObserver", ""}) + Only active when AuthenticationMethod=AUTHROLE. Comma separated list of authorization roles which are granted for this service, eq. <code>IbisTester,IbisObserver</code> @@ -1702,7 +1861,7 @@ - Session key that provides the Content-Disposition header in the response + Session key that provides the <code>Content-Disposition</code> header in the response @@ -1717,7 +1876,7 @@ - Header to extract JWT from + Header to extract JWT from Default: <code>Authorization</code> @@ -1727,22 +1886,22 @@ - Comma separated key value pairs to exactly match with JWT payload. e.g. "sub=UnitTest, aud=test" + Comma separated key value pairs to exactly match with JWT payload. e.g. <code>sub=UnitTest, aud=test</code> - Comma separated key value pairs to one-of match with JWT payload. e.g. "appid=a,appid=b" + Comma separated key value pairs to one-of match with JWT payload. e.g. <code>appid=a,appid=b</code> - Claim name which specifies the role + Claim name which specifies the role (maps to <code>IsUserInRolePipe</code>) - Claim name which specifies the principal name (maps to GetPrincipalPipe) + Claim name which specifies the principal name (maps to <code>GetPrincipalPipe</code>) @@ -1781,6 +1940,14 @@ Optional base folder, that serves as root for all other folders + + + Determines the contents of the message that is sent to the pipeline. The value of the attribute matching the searchKey is returned when using <code>ATTRIBUTE</code> Default: PATH + + + + + @@ -1792,81 +1959,144 @@ Name of the listener - - - - - - - - - - - - - Determines the contents of the message that is sent to the pipeline. Can be 'name', for the filename, 'path', for the full file path, 'contents' for the contents of the file, 'info' for file information. For any other value, the attributes of the file are searched and used Default: path - - - - - - - - - - + - Charset to be used for extracting the contents + Folder that is scanned for files. If not set, the root is scanned - + - OutputFormat of message for messageType=info Default: XML + Folder where files are stored <i>while</i> being processed - - - - - - - - - - - - - + - protocol of ESB service to be called + Folder where files are stored <i>after</i> being processed - - - - + - if true, all JMS properties in the request starting with "ae_" are copied to the reply. Default: false + Folder where files are stored <i>after</i> being processed, in case the exit-state was not equal to <code>success</code> - + - if messageProtocol=RR, default value is: true Default: false + Folder where messages from the error folder can be put on Hold, temporarily - + - if messageProtocol=FF, default value is: false Default: true + Folder where a copy of every file that is received is stored - + - Comma separated list of all XPath keys that need to be logged. (overrides <code>msg.log.keys</code> property) + If set to <code>true</code>, the folders to look for files and to move files to when being processed and after being processed are created if they are specified and do not exist Default: false - - - + + + If set <code>true</code>, the file processed will be deleted after being processed, and not stored Default: false + + + + + Number of copies held of a file with the same name. Backup files have a dot and a number suffixed to their name. If set to 0, no backups will be kept. Default: 0 + + + + + If set <code>true</code>, the destination file will be deleted if it already exists Default: false + + + + + If <code>true</code>, the file modification time is used in addition to the filename to determine if a file has been seen before Default: false + + + + + Minimal age of file <i>in milliseconds</i>, to avoid receiving a file while it is still being written Default: 1000 + + + + + Key of Property to use as messageId. If not set, the filename of the file as it was received in the inputFolder is used as the messageId Default: for MailFileSystems: Message-ID + + + + + If set <code>true</code>, no browsers for process folders are generated Default: false + + + + + Filter of files to look for in inputFolder e.g. '*.inp'. + + + + + Filter of files to be excluded when looking in inputFolder. + + + + + If set, an XML with all message properties is provided under this key + + + + + Charset to be used for extracting the contents + + + + + OutputFormat of message for messageType=info Default: XML + + + + + + + + + + + + + + + + + protocol of ESB service to be called + + + + + + + + if true, all JMS properties in the request starting with "ae_" are copied to the reply. Default: false + + + + + if messageProtocol=RR, default value is: true Default: false + + + + + if messageProtocol=FF, default value is: false Default: true + + + + + Comma separated list of all XPath keys that need to be logged. (overrides <code>msg.log.keys</code> property) + + + + + @@ -1914,7 +2144,7 @@ - + @@ -2123,7 +2353,7 @@ - Comma separated list of fields to try as response address Default: replyTo,from,sender,Return-Path + Comma separated list of fields to try as response address Default: <code>replyTo,from,sender,Return-Path</code> @@ -2235,7 +2465,7 @@ - If <code>true</code>, the hostname in the certificate will be checked against the actual hostname of the peer + If <code>true</code>, the hostname in the certificate will be checked against the actual hostname of the peer Default: false @@ -2254,55 +2484,37 @@ - + Determines the contents of the message that is sent to the Pipeline. can be one of: <ul> - <li><code>email</code>, for an XML containing most relevant information, except the body and the attachments</li> - <li><code>contents</code>, for the body of the message</li> - <li><code>mime</code>, for the MIME contents of the message</li> - <li><code>name</code> or <code>path</code>, for an internal handle of mail message, that can be used by a related MailFileSystemSender</li> - <li>the key of any header present in the message context</li> - </ul> Default: email + <li><code>EMAIL</code>, for an XML containing most relevant information, except the body and the attachments</li> + <li><code>CONTENTS</code>, for the body of the message</li> + <li><code>MIME</code>, for the MIME contents of the message</li> + <li><code>NAME</code> or <code>PATH</code>, for an internal handle of mail message, that can be used by a related MailFileSystemSender</li> + <li><code>HEADER</code>, for the value of the header matching the searchKey in the message context</li> + </ul> Default: EMAIL + + + + + + + + + + - Name of the listener - - - - - - - - - - - - - - - - - - - - - - Charset to be used for extracting the contents - - - - - OutputFormat of message for messageType=info Default: XML + Name of the listener by which it can be found by the org.frankframework.senders.FrankSender. If this + is not configured, the name will default to the name of the org.frankframework.core.Adapter. + The name of the <code>FrankListener</code> must be unique across the configuration. - - - @@ -2312,6 +2524,14 @@ + + + Determines the contents of the message that is sent to the pipeline. The value of the attribute matching the searchKey is returned when using <code>ATTRIBUTE</code> Default: PATH + + + + + pathname of the file or directory to list. Default: Home folder of the ftp user @@ -2451,7 +2671,7 @@ - (ftps) If <code>true</code>, the hostname in the certificate will be checked against the actual hostname of the peer + (ftps) If <code>true</code>, the hostname in the certificate will be checked against the actual hostname of the peer Default: false @@ -2547,7 +2767,7 @@ - Comma separated list of fields to try as response address Default: replyTo,from,sender,Return-Path + Comma separated list of fields to try as response address Default: <code>replyTo,from,sender,Return-Path</code> @@ -2709,29 +2929,30 @@ - Field containing the status of the message. For optimal performance, and index should exist that starts with this field, contains all fields that are used with a fixed value in the select condition, and end with the orderField. + Field containing the status of the message. + <b>NB: For optimal performance, an index should exist that starts with this field, followed by all fields that are used with a fixed value in the select condition, and end with the <code>orderField</code>. - (optional) Field used to store the date and time of the last change of the statusField + (optional) Field used to store the date and time of the last change of the <code>statusField</code> - (optional) Field used to store the reason of the last change of the statusField + (optional) Field used to store the reason of the last change of the <code>statusField</code> - (optional) Value of statusField indicating row is available to be processed. If not specified, any row not having any of the other status values is considered available. + (optional) Value of <code>statusField</code> indicating row is available to be processed. If not specified, any row not having any of the other status values is considered available. - Value of statusField indicating the processing of the row resulted in an error + Value of <code>statusField</code> indicating the processing of the row resulted in an error @@ -2741,12 +2962,12 @@ - Value of status field indicating is being processed. Can be left emtpy if database has SKIP LOCKED functionality and the Receiver can be (and is) set to Required or RequiresNew. + Value of <code>statusField</code> indicating is being processed. Can be left emtpy if database has <code>SKIP LOCKED</code> functionality and the <code>transactionAttribute</code> of the <code>Receiver</code> can be (and is) set to <code>Required</code> or <code>RequiresNew</code>. - Value of status field indicating message is on Hold, temporarily + Value of <code>statusField</code> indicating message is on Hold, temporarily @@ -2818,17 +3039,18 @@ - Field containing the status of the message. For optimal performance, and index should exist that starts with this field, contains all fields that are used with a fixed value in the select condition, and end with the orderField. Default: TYPE + Field containing the status of the message. + <b>NB: For optimal performance, an index should exist that starts with this field, followed by all fields that are used with a fixed value in the select condition, and end with the <code>orderField</code>. Default: TYPE - (optional) Field used to store the date and time of the last change of the statusField Default: MESSAGEDATE + (optional) Field used to store the date and time of the last change of the <code>statusField</code> Default: MESSAGEDATE - (optional) Field used to store the reason of the last change of the statusField Default: COMMENTS + (optional) Field used to store the reason of the last change of the <code>statusField</code> Default: COMMENTS @@ -2843,7 +3065,7 @@ - Value of statusField indicating the processing of the row resulted in an error Default: <code>E</code> + Value of <code>statusField</code> indicating the processing of the row resulted in an error Default: <code>E</code> @@ -2980,11 +3202,6 @@ Can be either <code>/rest</code> or <code>/rest-public</code> and must correspond with the available RestListenerServlet path(s). - - - Indicates whether this listener supports a view (and a link should be put in the ibis console) Default: if <code>method=get</code> then <code>true</code>, else <code>false</code> - - Comma separated list of authorization roles which are granted for this rest service Default: IbisAdmin,IbisDataAdmin,IbisTester,IbisObserver,IbisWebService @@ -3023,6 +3240,12 @@ If set to true the ibis will automatically create an etag Default: false + + + Uses an JsonPipe to convert the json-input to xml, and xml-output to json. + Use with caution, a properly configured Input/Output-wrapper can do much more and is more robust! Default: true + + @@ -3033,6 +3256,14 @@ + + + Determines the contents of the message that is sent to the pipeline. The value of the attribute matching the searchKey is returned when using <code>ATTRIBUTE</code> Default: PATH + + + + + Hostname of the SMB share. @@ -3163,6 +3394,14 @@ + + + Determines the contents of the message that is sent to the pipeline. The value of the attribute matching the searchKey is returned when using <code>ATTRIBUTE</code> Default: PATH + + + + + Path of the file or directory to start working. Default: Home folder of the sftp user @@ -3338,7 +3577,7 @@ - + @@ -3424,7 +3663,7 @@ - If <code>true</code>, the the cache is reloaded after the JVM restarts Default: false + If <code>true</code>, the cache is stored on disk and survives configuration reloads & JVM restarts. Default: false @@ -3458,7 +3697,7 @@ - namespace defintions for keyxpath. must be in the form of a comma or space separated list of <code>prefix=namespaceuri</code>-definitions + namespace defintions for keyxpath. must be in the form of a comma or space separated list of <code>prefix=namespaceuri</code> definitions @@ -3488,7 +3727,7 @@ - namespace defintions for valuexpath. must be in the form of a comma or space separated list of <code>prefix=namespaceuri</code>-definitions + namespace defintions for valuexpath. must be in the form of a comma or space separated list of <code>prefix=namespaceuri</code> definitions @@ -3525,7 +3764,16 @@ - Sender to work with Amazon S3. + Sender to work with the Amazon S3 Filesystem. + <p> + In addition to regular parameters for filesystem senders, it is possible + to set custom user-metadata on S3 files by prefixing parameter names with + <code>FileAttribute.</code>. + This prefix will be not be part of the actual metadata property name. + </p> + <p> + The string value of these parameters will be used as value of the custom metadata attribute. + </p> @@ -3539,46 +3787,39 @@ Sender to obtain information from and write to a CMIS application. - <p> - When <code>action</code>=<code>get</code> the input (xml string) indicates the id of the document to get. This input is mandatory. + When <code>action=get</code> the input (xml string) indicates the id of the document to get. This input is mandatory. </p> <p> <b>Example:</b> - <pre><code> - &lt;cmis&gt; - &lt;id&gt;documentId&lt;/id&gt; - &lt;/cmis&gt; - </code></pre> + <pre><code>&lt;cmis&gt; + &lt;id&gt;documentId&lt;/id&gt; + &lt;/cmis&gt;</code></pre> </p> <p> - When <code>action</code>=<code>delete</code> the input (xml string) indicates the id of the document to get. This input is mandatory. + When <code>action=delete</code> the input (xml string) indicates the id of the document to get. This input is mandatory. </p> <p> <b>Example:</b> - <pre><code> - &lt;cmis&gt; - &lt;id&gt;documentId&lt;/id&gt; - &lt;/cmis&gt; - </code></pre> + <pre><code>&lt;cmis&gt; + &lt;id&gt;documentId&lt;/id&gt; + &lt;/cmis&gt;</code></pre> </p> <p> - When <code>action</code>=<code>create</code> the input (xml string) indicates document properties to set. This input is optional. + When <code>action=create</code> the input (xml string) indicates document properties to set. This input is optional. </p> <p> <b>Example:</b> - <pre><code> - &lt;cmis&gt; - &lt;name&gt;Offerte&lt;/name&gt; - &lt;objectTypeId&gt;NNB_Geldlening&lt;/objectTypeId&gt; - &lt;mediaType&gt;application/pdf&lt;/mediaType&gt; - &lt;properties&gt; - &lt;property name="ArrivedAt" type="datetime" formatString="yyyy-MM-dd'T'HH:mm:ss.SSSz"&gt;2014-11-27T16:43:01.268+0100&lt;/property&gt; - &lt;property name="ArrivedBy"&gt;HDN&lt;/property&gt; - &lt;property name="DocumentType"&gt;Geldlening&lt;/property&gt; - &lt;/properties&gt; - &lt;/cmis&gt; - </code></pre> + <pre><code>&lt;cmis&gt; + &lt;name&gt;Offerte&lt;/name&gt; + &lt;objectTypeId&gt;NNB_Geldlening&lt;/objectTypeId&gt; + &lt;mediaType&gt;application/pdf&lt;/mediaType&gt; + &lt;properties&gt; + &lt;property name=&quot;ArrivedAt&quot; type=&quot;datetime&quot; formatString=&quot;yyyy-MM-dd'T'HH:mm:ss.SSSz&quot;&gt;2014-11-27T16:43:01.268+0100&lt;/property&gt; + &lt;property name=&quot;ArrivedBy&quot;&gt;HDN&lt;/property&gt; + &lt;property name=&quot;DocumentType&quot;&gt;Geldlening&lt;/property&gt; + &lt;/properties&gt; + &lt;/cmis&gt;</code></pre> </p> <p> @@ -3601,42 +3842,38 @@ </table> </p> <p> - When <code>action</code>=<code>find</code> the input (xml string) indicates the query to perform. + When <code>action=find</code> the input (xml string) indicates the query to perform. </p> <p> <b>Example:</b> - <pre><code> - &lt;query&gt; - &lt;statement&gt;select * from cmis:document&lt;/statement&gt; - &lt;maxItems&gt;10&lt;/maxItems&gt; - &lt;skipCount&gt;0&lt;/skipCount&gt; - &lt;searchAllVersions&gt;true&lt;/searchAllVersions&gt; - &lt;includeAllowableActions&gt;true&lt;/includeAllowableActions&gt; - &lt;/query&gt; - </code></pre> + <pre><code>&lt;query&gt; + &lt;statement&gt;select * from cmis:document&lt;/statement&gt; + &lt;maxItems&gt;10&lt;/maxItems&gt; + &lt;skipCount&gt;0&lt;/skipCount&gt; + &lt;searchAllVersions&gt;true&lt;/searchAllVersions&gt; + &lt;includeAllowableActions&gt;true&lt;/includeAllowableActions&gt; + &lt;/query</code></pre> </p> <p> - When <code>action</code>=<code>update</code> the input (xml string) indicates document properties to update. + When <code>action=update</code> the input (xml string) indicates document properties to update. </p> <p> <b>Example:</b> - <pre><code> - &lt;cmis&gt; - &lt;id&gt;123456789&lt;/id&gt; - &lt;properties&gt; - &lt;property name="ArrivedAt" type="datetime" formatString="yyyy-MM-dd'T'HH:mm:ss.SSSz"&gt;2014-11-27T16:43:01.268+0100&lt;/property&gt; - &lt;property name="ArrivedBy"&gt;HDN&lt;/property&gt; - &lt;property name="DocumentType"&gt;Geldlening&lt;/property&gt; - &lt;/properties&gt; - &lt;/cmis&gt; - </code></pre> + <pre><code>&lt;cmis&gt; + &lt;id&gt;123456789&lt;/id&gt; + &lt;properties&gt; + &lt;property name=&quot;ArrivedAt&quot; type=&quot;datetime&quot; formatString=&quot;yyyy-MM-dd'T'HH:mm:ss.SSSz&quot;&gt;2014-11-27T16:43:01.268+0100&lt;/property&gt; + &lt;property name=&quot;ArrivedBy&quot;&gt;HDN&lt;/property&gt; + &lt;property name=&quot;DocumentType&quot;&gt;Geldlening&lt;/property&gt; + &lt;/properties&gt; + &lt;/cmis&gt;</code></pre> </p> <p> <table border="1"> <tr><th>attributes</th><th>description</th><th>default</th></tr> <tr><td>id</td><td>mandatory property "cmis:objectId" which indicates the document to update</td><td>&nbsp;</td></tr> - <tr><td>property</td><td>custom document property to update. See <code>action</code>=<code>create</code> for possible attributes</td><td>&nbsp;</td></tr> + <tr><td>property</td><td>custom document property to update. See <code>action=create</code> for possible attributes</td><td>&nbsp;</td></tr> </table> </p> @@ -3760,6 +3997,215 @@ + + + Sender to send a message to another Frank! Adapter, or an external program running in the same JVM as the Frank!Framework. + <p> + Sends a message to another Frank!Framework-adapter in the same Frank!Framework instance, or an external program running in + the same JVM as the Frank!Framework. If the callee exits with an <code>&lt;Exit/&gt;</code> that has state PipeLine.ExitState#ERROR, + an error is considered to happen in the caller which means that the <code>exception</code> forward is followed if it is present. + </p> + <p> + Returns <code>exit.code</code> as forward name to the SenderPipe, provided that <code>exit.code</code> can be parsed as integer. + For example, if the called adapter has an exit state with code + <code>2</code>, then the SenderPipe supports a forward with name <code>2</code> + that is followed when the called adapter exits with the mentioned exit. This does not work if the code is for example <code>c2</code>. + </p> + <p> + A FrankSender makes a call to either an Adapter or an external program by setting the #scope. By default the scope is <code>ADAPTER</code>. + </p> + <p/> + + <h3>Configuration of the Adapter to be called</h3> + <p> + A call to another Adapter in the same Frank!Framework instance is preferably made using the combination + of a FrankSender configured with the name of the adapter. + </p> + <h4>Configuring FrankSender and Adapter</h4> + <ul> + <li>Define a SenderPipe with a FrankSender</li> + <li>Set the attribute <code>target</code> to <i>targetAdapterName</i></li> + <li>If the adapter is in another Configuration deployed in the same Frank!Framework instance, then set <code>target</code> to <code>targetConfigurationName/targetAdapterName</code> (note the slash-separator between Configuration name and Adapter name).</li> + </ul> + In the Adapter to be called: + <ul> + <li>The adapter does not need to have a receiver configured to be called from a FrankSender,</li> + <li>The adapter will run in the same transaction as the calling adapter,</li> + <li>If the called adapter does not to run in its own transaction, set the transaction attributes on the PipeLine attribute of this adapter + or on the SenderPipe that contains this <code>FrankSender</code>.</li> + </ul> + + <h4>Configuring FrankSender with FrankListener</h4> + <ul> + <li>Define a SenderPipe with a FrankSender</li> + <li>In the target adapter, define a org.frankframework.receivers.Receiver with a FrankListener</li> + <li>Give a unique name to the listener: FrankListener#setName(String). If the name is not set, the name of the Adapter will be used.</li> + <li>Set the #setScope(Scope) to <code>LISTENER</code> and the #setTarget(String) to the listener name as per previous point</li> + <li>If the listener is in a different configuration, prefix the listener name with the name of the configuration and a slash (<code>/</code>) as separator between configuration and listener name</li> + </ul> + + <h4>Configuring FrankSender and Remote Application</h4> + <p> + <em>NB:</em> Please make sure that the IbisServiceDispatcher-1.4.jar or newer is present on the class path of the server. For more information, see: + </p> + <ul> + <li>Define a SenderPipe with a FrankSender</li> + <li>Set the attribute <code>scope</code> to either <code>JVM</code> for a Java application, or to <code>DLL</code> for code loaded from a DLL</li> + <li>Set the attribute <code>target</code> to the service-name the other application used to register itself</li> + </ul> + <p> + In the other application: + <ul> + <li>Implement the interface <code>nl.nn.adapterframework.dispatcher.RequestProcessor</code> from the IbisServiceDispatcher library</li> + <li>Register the instance with the <code>nl.nn.adapterframework.dispatcher.DispatcherManager</code> obtained via the <code>nl.nn.adapterframework.dispatcher.DispatcherManagerFactory</code></li> + <li>See the implementation code of the <code>JavaListener</code> in the Frank!Framework for an example</li> + </ul> + </p> + <p> + See also the repository of the IbisServiceDispatcher: + <a href="https://github.com/frankframework/servicedispatcher">https://github.com/frankframework/servicedispatcher</a> + </p> + + <h4>Using FrankSender to call an adapter from Larva tests</h4> + <p> + You can configure a FrankSender in Larva property files to use the FrankSender to invoke an adapter to test. When doing this, keep the following in mind: + <ul> + <li>If you leave the default scope as <code>ADAPTER</code>, then the <code>target</code> property needs to have both configuration name and adapter name, separated by a <code>/</code> character</li> + <li>When scope is left as default, the receiver and JavaListener are skipped and no transaction is started unless it is set on the adapter's <code>PipeLine</code></li> + <li>If you do need a transaction and the adapter has a JavaListener that has org.frankframework.receivers.JavaListener#setServiceName(String) defined, you can use the FrankSender with scope <code>JVM</code> + and set the <code>target</code> attribute to the <code>serviceName</code> attribute of the <code>JavaListener</code>.</li> + </ul> + </p> + + <h3>Migrating Existing Configurations</h3> + <p> + When one adapter (named A) needs to call another adapter (named B) like a subroutine, you will usually have an IbisLocalSender or an IbisJavaSender + in adapter A, and a org.frankframework.receivers.JavaListener in adapter B. + </p> + <p> + <em>NB:</em> For the example it is assumed that all adapters are defined in the same configuration. + </p> + + <h4>Example of Existing Configuration</h4> + The existing configuration might look like this in the calling adapter: + <pre><code>&lt;module&gt; + &lt;adapter name=&quot;Adapter A&quot;&gt; + &lt;receiver name=&quot;Adapter A Receiver&quot;&gt; + &lt;listener name=&quot;Adapter A Listener&quot; + className=&quot;org.frankframework...&quot; etc/&gt; + &lt;/receiver&gt; + &lt;pipeline firstPipe=&quot;...&quot;&gt; + &lt;pipe name=&quot;send&quot; className=&quot;org.frankframework.pipes.SenderPipe&quot;&gt; + &lt;sender className=&quot;org.frankframework.senders.IbisJavaSender&quot; + serviceName=&quot;service-Adapter-B&quot; /&gt; + &lt;forward name=&quot;success&quot; path=&quot;...&quot; /&gt; + &lt;/pipe&gt; + &lt;/pipeline&gt; + &lt;/adapter&gt; + &lt;/module&gt;</code></pre> + + Or like using the modern XML XSD and an IbisLocalSender instead: + <pre><code>&lt;Module&gt; + &lt;Adapter name=&quot;Adapter A&quot;&gt; + &lt;Receiver name=&quot;Adapter A Receiver&quot;&gt; + ... Listener setup and other configuration + &lt;/Receiver&gt; + &lt;Pipeline&gt; + &lt;SenderPipe name=&quot;send&quot;&gt; + &lt;IbisLocalSender name=&quot;call Adapter B&quot; + javaListener=&quot;Adapter B Listener&quot;/&gt; + &lt;Forward name=&quot;success&quot; path=&quot;EXIT&quot; /&gt; + &lt;/SenderPipe&gt; + &lt;/Pipeline&gt; + &lt;/Adapter&gt; + &lt;/Module&gt;</code></pre> + + In the receiving adapter B the listener would have been configured like this: + <pre><code>&lt;Module&gt; + &lt;Adapter name=&quot;adapter B&quot;&gt; + &lt;Receiver name=&quot;Receiver B&quot;&gt; + &lt;JavaListener name=&quot;Adapter B Listener&quot; serviceName=&quot;service-Adapter-B&quot;/&gt; + &lt;/Receiver&gt; + &lt;Pipeline&gt; + ... + &lt;/Pipeline&gt; + &lt;/Adapter&gt; + &lt;/Module&gt;</code></pre> + <p/> + + <h4>Rewritten Example Configuration With FrankSender</h4> + This example shows the most simple way of using the FrankSender to call another adapter with least amount of overhead. + + <pre><code>&lt;Module&gt; + &lt;Adapter name=&quot;Adapter A&quot;&gt; + &lt;Receiver name=&quot;Adapter A Receiver&quot;&gt; + ... Listener setup and other configuration + &lt;/Receiver&gt; + &lt;Pipeline&gt; + &lt;SenderPipe name=&quot;send&quot;&gt; + &lt;!-- when scope=&quot;ADAPTER&quot;, then target is directly the name of the adapter you want to call --&gt; + &lt;FrankSender name=&quot;call Adapter C&quot; + scope=&quot;ADAPTER&quot; + target=&quot;adapter B&quot; + /&gt; + &lt;Forward name=&quot;success&quot; path=&quot;EXIT&quot; /&gt; + &lt;/SenderPipe&gt; + &lt;/Pipeline&gt; + &lt;/Adapter&gt; + &lt;Adapter name=&quot;adapter B&quot;&gt; + &lt;!-- No receiver needed for FrankSender in this scenario --&gt; + &lt;Pipeline&gt; + ... Exits, Pipes etc + &lt;/Pipeline&gt; + &lt;/Adapter&gt; + &lt;/Module&gt;</code></pre> + + <h4>Rewritten Example Configuration With FrankSender and FrankListener</h4> + This example shows why you might want to call the other adapter via the FrankListener. This adds a bit more overhead to the call + of the sub-adapter for the extra error-handling done by the target receiver. + + <pre><code>&lt;Module&gt; + &lt;Adapter name=&quot;Adapter A&quot;&gt; + &lt;Receiver name=&quot;Adapter A Receiver&quot;&gt; + ... Listener setup and other configuration + &lt;/Receiver&gt; + &lt;Pipeline&gt; + &lt;SenderPipe name=&quot;send&quot;&gt; + &lt;!-- when scope=&quot;LISTENER&quot;, then target is directly the name of the FrankListener in the adapter you want to call --&gt; + &lt;FrankSender + scope=&quot;LISTENER&quot; + target=&quot;Adapter B Listener&quot;/&gt; + &lt;Forward name=&quot;success&quot; path=&quot;EXIT&quot; /&gt; + &lt;/SenderPipe&gt; + &lt;/Pipeline&gt; + &lt;/Adapter&gt; + &lt;Adapter name=&quot;adapter B&quot;&gt; + &lt;!-- Messages will only be sent to the error storage if: + - The target receiver is not transactional, and has maxTries=&quot;0&quot;, or + - The target receiver is transaction, and the Sender is set up to retry sending on error + For internal adapters, sending / receiving with retries might not make sense so the example does not show that. + --&gt; + &lt;Receiver name=&quot;Receiver B&quot; maxRetries=&quot;0&quot; transactionAttribute=&quot;NotSupported&quot;&gt; + &lt;!-- Listener name is optional, defaults to Adapter name --&gt; + &lt;FrankListener name=&quot;Adapter B Listener&quot;/&gt; + &lt;!-- This adapter now has an error storage -- without Receiver and FrankListener the sub-adapter couldn't have that --&gt; + &lt;JdbcErrorStorage slotId=&quot;Adapter B - Errors&quot; /&gt; + &lt;/Receiver&gt; + &lt;!-- If transactions are required, set transaction-attribute on the Pipeline --&gt; + &lt;Pipeline transactionAttribute=&quot;RequiresNew&quot;&gt; + ... Exits, Pipes etc + &lt;/Pipeline&gt; + &lt;/Adapter&gt; + &lt;/Module&gt;</code></pre> + + + + + + + + + @@ -3816,14 +4262,18 @@ - Posts a message to another IBIS-adapter or application in the same JVM using IbisServiceDispatcher. - + Posts a message to another Frank!Framework-adapter or an application in the same JVM using IbisServiceDispatcher. + <p> An IbisJavaSender makes a call to a Receiver with a JavaListener or any other application in the same JVM that has registered a <code>RequestProcessor</code> with the IbisServiceDispatcher. - + </p> + The IbisJavaSender is now considered to be legacy. The new way to call another adapter or java application from your own + adapter is by using the FrankSender. + </p> <h4>configuring IbisJavaSender and JavaListener</h4> <ul> - <li>Define a SenderPipe with an IbisJavaSender</li> + <li><em>NB:</em> Using IbisJavaSender to call another adapter is inefficient and therefore not recommended. It is much more efficient to use for this a FrankSender or IbisLocalSender.</li> + <li>Define a org.frankframework.pipes.SenderPipe with an IbisJavaSender</li> <li>Set the attribute <code>serviceName</code> to <i>yourExternalServiceName</i></li> </ul> In the Adapter to be called: @@ -3831,7 +4281,8 @@ <li>Define a Receiver with a JavaListener</li> <li>Set the attribute <code>serviceName</code> to <i>yourExternalServiceName</i></li> </ul> - N.B. Please make sure that the IbisServiceDispatcher-1.4.jar or newer is present on the class path of the server. + N.B. Please make sure that the IbisServiceDispatcher-1.4.jar or newer is present on the class path of the server. For more information, see: + <a href="https://github.com/frankframework/servicedispatcher">https://github.com/frankframework/servicedispatcher</a> @@ -3843,24 +4294,27 @@ - Posts a message to another IBIS-adapter in the same IBIS instance. If the callee exits with an &lt;<code>exit</code>&gt; + Posts a message to another Frank!Framework-adapter in the same Frank!Framework instance. If the callee exits with an &lt;<code>exit</code>&gt; that has state PipeLine.ExitState#ERROR, an error is considered to happen in the caller which means that the <code>exception</code> forward is followed if it is present. - <p/> - <p/> + <p> + The IbisLocalSender is now considered to be legacy. The new way to call another adapter from your own + adapter is by using the FrankSender. + </p> + <p> Returns exit.code as forward name to SenderPipe provided that exit.code can be parsed as integer. For example, if the called adapter has an exit state with code <code>2</code>, then the SenderPipe supports a forward with name <code>2</code> that is followed when the called adapter exits with the mentioned exit. This does not work if the code is for example <code>c2</code>. - <p/> - <p/> - An IbisLocalSender makes a call to a Receiver with either a WebServiceListener + </p> + <p> + An IbisLocalSender makes a call to a org.frankframework.receivers.Receiver with either a WebServiceListener or a JavaListener. - + </p> <h3>Configuration of the Adapter to be called</h3> - A call to another Adapter in the same IBIS instance is preferably made using the combination + A call to another Adapter in the same Frank!Framework instance is preferably made using the combination of an IbisLocalSender and a JavaListener. If, however, a Receiver with a WebServiceListener is already present, that can be used in some cases, too. @@ -3875,7 +4329,7 @@ <li>Define a Receiver with a JavaListener</li> <li>Set the attribute <code>name</code> to <i>yourServiceName</i></li> <li>Do not set the attribute <code>serviceName</code>, except if the service is to be called also - from applications other than this IBIS-instance</li> + from applications other than this Frank!Framework-instance</li> </ul> <h4>configuring IbisLocalSender and WebServiceListener</h4> @@ -3901,8 +4355,7 @@ - Requires the net.bankid.merchant.library V1.06+. - Compile with Java 1.7+ + Requires the net.bankid.merchant.library V1.2.9 @@ -3932,19 +4385,19 @@ - Sender used to run JavaScript code using J2V8 + Sender used to run JavaScript code using `JavascriptEngine` implementations. <p> - This sender can execute a function of a given javascript file, the result of the function will be the output of the sender. - The parameters of the javascript function to run are given as parameters by the adapter configuration + This sender can execute a function of a given Javascript file, the result of the function will be the output of the sender. + The parameters of the Javascript function to run are given as parameters by the adapter configuration The sender doesn't accept nor uses the given input, instead for each argument for the #jsFunctionName method, you will need to create a parameter on the sender. </p> <p> - The result of the javascript function should be of type String, or directly convertible to String from a primitive type + The result of the Javascript function should be of type String, or directly convertible to String from a primitive type or an array of primitive types / strings, as the output of the sender will be of type String. </p> <p> - Failure to ensure the output is a string may mean the result will look like {@code [Object object]}. + Failure to ensure the output is a string may mean the result will look like <code>[Object object]</code>. </p> @@ -3988,40 +4441,32 @@ <h2>example</h2> Consider the following configuration example: - <code> - <pre> - &lt;sender - className="org.frankframework.ldap.LdapSender" - ldapProviderURL="ldap://servername:389/o=ing" - operation="read" - attributesToReturn="givenName,sn,telephoneNumber" &gt; - &lt;param name="entryName" xpathExpression="entryName" /&gt; - &lt;/sender&gt; - </pre> - </code> + <pre><code>&lt;sender + className=&quot;org.frankframework.ldap.LdapSender&quot; + ldapProviderURL=&quot;ldap://servername:389/o=ing&quot; + operation=&quot;read&quot; + attributesToReturn=&quot;givenName,sn,telephoneNumber&quot; &gt; + &lt;param name=&quot;entryName&quot; xpathExpression=&quot;entryName&quot; /&gt; + &lt;/sender&gt;</code></pre> <br/> This may result in the following output: - <code><pre> - &lt;ldap&gt; - &lt;entryName&gt;uid=srp,ou=people&lt;/entryName&gt; - - &lt;attributes&gt; - &lt;attribute attrID="givenName"&gt; - &lt;value&gt;Jan&lt;/value&gt; - &lt;/attribute&gt; - - &lt;attribute attrID="telephoneNumber"&gt; - &lt;value&gt;010 5131123&lt;/value&gt; - &lt;value&gt;06 23456064&lt;/value&gt; - &lt;/attribute&gt; - - &lt;attribute attrID="sn"&gt; - &lt;value&gt;Jansen&lt;/value&gt; - &lt;/attribute&gt; - &lt;/attributes&gt; - &lt;/ldap&gt; - </pre></code> <br/> + <pre><code>&lt;ldap&gt; + &lt;entryName&gt;uid=srp,ou=people&lt;/entryName&gt; + &lt;attributes&gt; + &lt;attribute attrID=&quot;givenName&quot;&gt; + &lt;value&gt;Jan&lt;/value&gt; + &lt;/attribute&gt; + &lt;attribute attrID=&quot;telephoneNumber&quot;&gt; + &lt;value&gt;010 5131123&lt;/value&gt; + &lt;value&gt;06 23456064&lt;/value&gt; + &lt;/attribute&gt; + &lt;attribute attrID=&quot;sn&quot;&gt; + &lt;value&gt;Jansen&lt;/value&gt; + &lt;/attribute&gt; + &lt;/attributes&gt; + &lt;/ldap&gt;</code></pre> + <br/> Search or Read? @@ -4031,41 +4476,40 @@ together with the attributes. If the specified attributes are null or empty all the attributes of all the entries within the specified context are returned. - Sample result of a <code>read</code> operation:<br/><code><pre> - &lt;attributes&gt; - &lt;attribute&gt; - &lt;attribute name="employeeType" value="Extern"/&gt; - &lt;attribute name="roomNumber" value="DP 2.13.025"/&gt; - &lt;attribute name="departmentCode" value="358000"/&gt; - &lt;attribute name="organizationalHierarchy"&gt; - &lt;item value="ou=ING-EUR,ou=Group,ou=Organization,o=ing"/&gt; - &lt;item value="ou=OPS&amp;IT,ou=NL,ou=ING-EUR,ou=Group,ou=Organization,o=ing"/&gt; - &lt;item value="ou=000001,ou=OPS&amp;IT,ou=NL,ou=ING-EUR,ou=Group,ou=Organization,o=ing"/&gt; - &lt;/attribute> - &lt;attribute name="givenName" value="Gerrit"/> - &lt;/attributes&gt; - - </pre></code> <br/> - Sample result of a <code>search</code> operation:<br/><code><pre> - &lt;entries&gt; - &lt;entry name="uid=srp"&gt; - &lt;attributes&gt; - &lt;attribute&gt; - &lt;attribute name="employeeType" value="Extern"/&gt; - &lt;attribute name="roomNumber" value="DP 2.13.025"/&gt; - &lt;attribute name="departmentCode" value="358000"/&gt; - &lt;attribute name="organizationalHierarchy"&gt; - &lt;item value="ou=ING-EUR,ou=Group,ou=Organization,o=ing"/&gt; - &lt;item value="ou=OPS&amp;IT,ou=NL,ou=ING-EUR,ou=Group,ou=Organization,o=ing"/&gt; - &lt;item value="ou=000001,ou=OPS&amp;IT,ou=NL,ou=ING-EUR,ou=Group,ou=Organization,o=ing"/&gt; - &lt;/attribute> - &lt;attribute name="givenName" value="Gerrit"/> - &lt;/attributes&gt; - &lt;/entry&gt; - &lt;entry&gt; .... &lt;/entry&gt; - ..... - &lt;/entries&gt; - </pre></code> <br/> + Sample result of a <code>read</code> operation:<br/> + <pre><code>&lt;attributes&gt; + &lt;attribute&gt; + &lt;attribute name=&quot;employeeType&quot; value=&quot;Extern&quot;/&gt; + &lt;attribute name=&quot;roomNumber&quot; value=&quot;DP 2.13.025&quot;/&gt; + &lt;attribute name=&quot;departmentCode&quot; value=&quot;358000&quot;/&gt; + &lt;attribute name=&quot;organizationalHierarchy&quot;&gt; + &lt;item value=&quot;ou=ING-EUR,ou=Group,ou=Organization,o=ing&quot;/&gt; + &lt;item value=&quot;ou=OPS&amp;IT,ou=NL,ou=ING-EUR,ou=Group,ou=Organization,o=ing&quot;/&gt; + &lt;item value=&quot;ou=000001,ou=OPS&amp;IT,ou=NL,ou=ING-EUR,ou=Group,ou=Organization,o=ing&quot;/&gt; + &lt;/attribute&gt; + &lt;attribute name=&quot;givenName&quot; value=&quot;Gerrit&quot;/&gt; + &lt;/attributes&gt;</code></pre> + <br/> + Sample result of a <code>search</code> operation:<br/> + <pre><code>&lt;entries&gt; + &lt;entry name=&quot;uid=srp&quot;&gt; + &lt;attributes&gt; + &lt;attribute&gt; + &lt;attribute name=&quot;employeeType&quot; value=&quot;Extern&quot;/&gt; + &lt;attribute name=&quot;roomNumber&quot; value=&quot;DP 2.13.025&quot;/&gt; + &lt;attribute name=&quot;departmentCode&quot; value=&quot;358000&quot;/&gt; + &lt;attribute name=&quot;organizationalHierarchy&quot;&gt; + &lt;item value=&quot;ou=ING-EUR,ou=Group,ou=Organization,o=ing&quot;/&gt; + &lt;item value=&quot;ou=OPS&amp;IT,ou=NL,ou=ING-EUR,ou=Group,ou=Organization,o=ing&quot;/&gt; + &lt;item value=&quot;ou=000001,ou=OPS&amp;IT,ou=NL,ou=ING-EUR,ou=Group,ou=Organization,o=ing&quot;/&gt; + &lt;/attribute&gt; + &lt;attribute name=&quot;givenName&quot; value=&quot;Gerrit&quot;/&gt; + &lt;/attributes&gt; + &lt;/entry&gt; + &lt;entry&gt; .... &lt;/entry&gt; + ..... + &lt;/entries&gt;</code></pre> + <br/> @@ -4076,6 +4520,18 @@ + + Sender to work with the server local filesystem. + <p> + In addition to regular parameters for filesystem senders, it is possible + to set custom extended attributes on files by prefixing parameter names with + <code>FileAttribute.</code>. + This prefix will be not be part of the actual metadata property name. + </p> + <p> + The string value of these parameters will be used as value of the custom metadata attribute. + </p> + @@ -4119,33 +4575,29 @@ sender that sends a mail specified by an XML message. <p> Sample email.xml: - <code><pre> - &lt;email&gt; - &lt;recipients&gt; - &lt;recipient type="to"&gt;***@hotmail.com&lt;/recipient&gt; - &lt;recipient type="cc"&gt;***@gmail.com&lt;/recipient&gt; - &lt;/recipients&gt; - &lt;from name="*** ***"&gt;***@yahoo.com&lt;/from&gt; - &lt;subject&gt;This is the subject&lt;/subject&gt; - &lt;threadTopic&gt;subject&lt;/threadTopic&gt; - &lt;message&gt;This is the message&lt;/message&gt; - &lt;messageType&gt;text/plain&lt;/messageType&gt;&lt;!-- Optional --&gt; - &lt;messageBase64&gt;false&lt;/messageBase64&gt;&lt;!-- Optional --&gt; - &lt;charset&gt;UTF-8&lt;/charset&gt;&lt;!-- Optional --&gt; - &lt;attachments&gt; - &lt;attachment name="filename1.txt"&gt;This is the first attachment&lt;/attachment&gt; - &lt;attachment name="filename2.pdf" base64="true"&gt;JVBERi0xLjQKCjIgMCBvYmoKPDwvVHlwZS9YT2JqZWN0L1N1YnR5cGUvSW1...vSW5mbyA5IDAgUgo+PgpzdGFydHhyZWYKMzQxNDY2CiUlRU9GCg==&lt;/attachment&gt; - &lt;attachment name="filename3.pdf" url="file:/c:/filename3.pdf"/&gt; - &lt;attachment name="filename4.pdf" sessionKey="fileContent"/&gt; - &lt;/attachments&gt;&lt;!-- Optional --&gt; - &lt;/email&gt; - </pre></code> + <pre><code>&lt;email&gt; + &lt;recipients&gt; + &lt;recipient type=&quot;to&quot;&gt;***@hotmail.com&lt;/recipient&gt; + &lt;recipient type=&quot;cc&quot;&gt;***@gmail.com&lt;/recipient&gt; + &lt;/recipients&gt; + &lt;from name=&quot;*** ***&quot;&gt;***@yahoo.com&lt;/from&gt; + &lt;subject&gt;This is the subject&lt;/subject&gt; + &lt;threadTopic&gt;subject&lt;/threadTopic&gt; + &lt;message&gt;This is the message&lt;/message&gt; + &lt;messageType&gt;text/plain&lt;/messageType&gt;&lt;!-- Optional --&gt; + &lt;messageBase64&gt;false&lt;/messageBase64&gt;&lt;!-- Optional --&gt; + &lt;charset&gt;UTF-8&lt;/charset&gt;&lt;!-- Optional --&gt; + &lt;attachments&gt; + &lt;attachment name=&quot;filename1.txt&quot;&gt;This is the first attachment&lt;/attachment&gt; + &lt;attachment name=&quot;filename2.pdf&quot; base64=&quot;true&quot;&gt;JVBERi0xLjQKCjIgMCBvYmoKPDwvVHlwZS9YT2JqZWN0L1N1YnR5cGUvSW1...vSW5mbyA5IDAgUgo+PgpzdGFydHhyZWYKMzQxNDY2CiUlRU9GCg==&lt;/attachment&gt; + &lt;attachment name=&quot;filename3.pdf&quot; url=&quot;file:/c:/filename3.pdf&quot;/&gt; + &lt;attachment name=&quot;filename4.pdf&quot; sessionKey=&quot;fileContent&quot;/&gt; + &lt;/attachments&gt;&lt;!-- Optional --&gt; + &lt;/email&gt;</code></pre> </p><p> Notice: the XML message must be valid XML. Therefore, especially the message element must be plain text or be wrapped as CDATA. Example: - <code><pre> - &lt;message&gt;&lt;![CDATA[&lt;h1&gt;This is a HtmlMessage&lt;/h1&gt;]]&gt;&lt;/message&gt; - </pre></code> + <pre><code>&lt;message&gt;&lt;![CDATA[&lt;h1&gt;This is a HtmlMessage&lt;/h1&gt;]]&gt;&lt;/message&gt;</code></pre> </p><p> The <code>sessionKey</code> attribute for attachment can contain an inputstream or a string. Other types are not supported at this moment. </p><p> @@ -4188,14 +4640,11 @@ to the adapter around the sender pipe, because errors may occur before the message reaches the sender pipe. <br/><br/> Example configuration: - <code><pre> - &lt;SenderPipe name="Send"&gt; - &lt;MessageStoreSender - slotId="${instance.name}/TestMessageStore" - onlyStoreWhenMessageIdUnique="false" - /&gt; - &lt;/SenderPipe&gt; - </pre></code> + <pre><code>&lt;SenderPipe name=&quot;Send&quot;&gt; + &lt;MessageStoreSender + slotId=&quot;${instance.name}/TestMessageStore&quot; + onlyStoreWhenMessageIdUnique=&quot;false&quot; /&gt; + &lt;/SenderPipe&gt;</code></pre> @@ -4239,7 +4688,8 @@ <p><b>AuthAlias:</b></p> - <p>If you do not want to specify the nonce and the accesstoken used to authenticate with Akamai, you can use the authalias property. The username represents the nonce and the password the accesstoken.</p> + <p>If you do not want to specify the nonce and the access token used to authenticate with Akamai, you can use the authalias property. The username + represents the nonce and the password the access token.</p> @@ -4267,13 +4717,11 @@ This prevents (long) open connections inside Senders and possible connection failures. <b>Example:</b> - <pre><code> - &lt;SenderPipe&gt; + <pre><code>&lt;SenderPipe&gt; &lt;ReconnectSenderWrapper&gt; - &lt;EchoSender myAttribute="myValue" /&gt; + &lt;EchoSender myAttribute=&quot;myValue&quot; /&gt; &lt;/ReconnectSenderWrapper&gt; - &lt;/SenderPipe&gt; - </code></pre> + &lt;/SenderPipe&gt;</code></pre> </p> @@ -4414,7 +4862,7 @@ Collection of Senders, that are executed all at the same time. Once the results are processed, all results will be sent to the resultSender, - while the original sender will return it's result to the pipeline. + while the original sender will return its result to the pipeline. <p>Multiple sub-senders can be configured within the ShadowSender, the minimum amount of senders is 2 (originalSender + resultSender)</p> @@ -4446,79 +4894,73 @@ </ul> </p> <p> - All stored procedure parameters that are not fixed, so specified in the query with a {@code ?}, should - have a corresponding Parameter entry. Output parameters should have {@code mode="OUTPUT"}, or - {@code mode="INOUT"} depending on how the stored procedure is defined. + All stored procedure parameters that are not fixed, so specified in the query with a <code>?</code>, should + have a corresponding IParameter entry. Output parameters should have <code>mode=&quot;OUTPUT&quot;</code>, or + <code>mode=&quot;INOUT&quot;</code> depending on how the stored procedure is defined. </p> <p> <h3>Sample Output for queryType=OTHER</h3> <h4>Basic Example with Only Simple Output Parameters</h4> - <code><pre> - &lt;resultset&gt; - &lt;result param="r1" type="STRING"&gt;MESSAGE-CONTENTS&lt;/result&gt; - &lt;result param="r2" type="STRING"&gt;E&lt;/result&gt; - &lt;/resultset&gt; - </pre></code> + <pre><code>&lt;resultset&gt; + &lt;result param=&quot;r1&quot; type=&quot;STRING&quot;&gt;MESSAGE-CONTENTS&lt;/result&gt; + &lt;result param=&quot;r2&quot; type=&quot;STRING&quot;&gt;E&lt;/result&gt; + &lt;/resultset&gt;</code></pre> <h4>Example with Resultset and Simple Output Parameters</h4> - <code><pre> - &lt;resultset&gt; - &lt;result resultNr="1"&gt; - &lt;fielddefinition&gt; - &lt;field name="FIELDNAME" - type="columnType" - columnDisplaySize="" - precision="" - scale="" - isCurrency="" - columnTypeName="" - columnClassName=""/&gt; - &lt;field ...../&gt; - &lt;/fielddefinition&gt; - &lt;rowset&gt; - &lt;row number="0"&gt; - &lt;field name="TKEY"&gt;MSG-ID&lt;/field&gt; - &lt;field name="TCHAR"&gt;E&lt;/field&gt; - &lt;field name="TMESSAGE"&gt;MESSAGE-CONTENTS&lt;/field&gt; - &lt;field name="TCLOB" null="true"/&gt; - &lt;field name="TBLOB" null="true"/&gt; - &lt;/row&gt; - &lt;row number="1" ...../&gt; - &lt;/rowset&gt; - &lt;/result&gt; - &lt;result param="count" type="INTEGER"&gt;5&lt;/result&gt; - &lt;/resultset&gt; - </pre></code> + <pre><code>&lt;resultset&gt; + &lt;result resultNr=&quot;1&quot;&gt; + &lt;fielddefinition&gt; + &lt;field name=&quot;FIELDNAME&quot; + type=&quot;columnType&quot; + columnDisplaySize=&quot;&quot; + precision=&quot;&quot; + scale=&quot;&quot; + isCurrency=&quot;&quot; + columnTypeName=&quot;&quot; + columnClassName=&quot;&quot;/&gt; + &lt;field ...../&gt; + &lt;/fielddefinition&gt; + &lt;rowset&gt; + &lt;row number=&quot;0&quot;&gt; + &lt;field name=&quot;TKEY&quot;&gt;MSG-ID&lt;/field&gt; + &lt;field name=&quot;TCHAR&quot;&gt;E&lt;/field&gt; + &lt;field name=&quot;TMESSAGE&quot;&gt;MESSAGE-CONTENTS&lt;/field&gt; + &lt;field name=&quot;TCLOB&quot; null=&quot;true&quot;/&gt; + &lt;field name=&quot;TBLOB&quot; null=&quot;true&quot;/&gt; + &lt;/row&gt; + &lt;row number=&quot;1&quot; ...../&gt; + &lt;/rowset&gt; + &lt;/result&gt; + &lt;result param=&quot;count&quot; type=&quot;INTEGER&quot;&gt;5&lt;/result&gt; + &lt;/resultset&gt;</code></pre> <h4>Example with Simple and Cursor Output Parameters</h4> - <code><pre> - &lt;resultset&gt; - &lt;result param="count" type="INTEGER"&gt;5&lt;/result&gt; - &lt;result param="cursor1" type="LIST"&gt; - &lt;fielddefinition&gt; - &lt;field name="FIELDNAME" - type="columnType" - columnDisplaySize="" - precision="" - scale="" - isCurrency="" - columnTypeName="" - columnClassName=""/&gt; - &lt;field ...../&gt; - &lt;/fielddefinition&gt; - &lt;rowset&gt; - &lt;row number="0"&gt; - &lt;field name="TKEY"&gt;MSG-ID&lt;/field&gt; - &lt;field name="TCHAR"&gt;E&lt;/field&gt; - &lt;field name="TMESSAGE"&gt;MESSAGE-CONTENTS&lt;/field&gt; - &lt;field name="TCLOB" null="true"/&gt; - &lt;field name="TBLOB" null="true"/&gt; - &lt;/row&gt; - &lt;row number="1" ..... /&gt; - &lt;/rowset&gt; - &lt;/result&gt; - &lt;/resultset&gt; - </pre></code> + <pre><code>&lt;resultset&gt; + &lt;result param=&quot;count&quot; type=&quot;INTEGER&quot;&gt;5&lt;/result&gt; + &lt;result param=&quot;cursor1&quot; type=&quot;LIST&quot;&gt; + &lt;fielddefinition&gt; + &lt;field name=&quot;FIELDNAME&quot; + type=&quot;columnType&quot; + columnDisplaySize=&quot;&quot; + precision=&quot;&quot; + scale=&quot;&quot; + isCurrency=&quot;&quot; + columnTypeName=&quot;&quot; + columnClassName=&quot;&quot;/&gt; + &lt;field ...../&gt; + &lt;/fielddefinition&gt; + &lt;rowset&gt; + &lt;row number=&quot;0&quot;&gt; + &lt;field name=&quot;TKEY&quot;&gt;MSG-ID&lt;/field&gt; + &lt;field name=&quot;TCHAR&quot;&gt;E&lt;/field&gt; + &lt;field name=&quot;TMESSAGE&quot;&gt;MESSAGE-CONTENTS&lt;/field&gt; + &lt;field name=&quot;TCLOB&quot; null=&quot;true&quot;/&gt; + &lt;field name=&quot;TBLOB&quot; null=&quot;true&quot;/&gt; + &lt;/row&gt; + &lt;row number=&quot;1&quot; ..... /&gt; + &lt;/rowset&gt; + &lt;/result&gt; + &lt;/resultset&gt;</code></pre> </p> <p><em>NOTE:</em> Support for stored procedures is currently experimental and changes in the currently produced output-format are expected.</p> @@ -4531,33 +4973,21 @@ - + - Sender that sends a message via a WebService based on NTLM authentication. + Sender that sends a message via a WebService. - + - + - Sender that sends a message via a WebService. - - - - - - - - - - - - XCom client voor het versturen van files via XCom. + XCom client voor het versturen van files via XCom. @@ -4623,52 +5053,37 @@ </p> <p> <b>example (input):</b> - <code> - <pre> - &lt;browse&gt; - &lt;jmsRealm&gt;qcf&lt;/jmsRealm&gt; - &lt;destinationName&gt;jms/GetPolicyDetailsRequest&lt;/destinationName&gt; - &lt;destinationType&gt;QUEUE&lt;/destinationType&gt; - &lt;/browse> - </pre> - </code> + <pre><code>&lt;browse&gt; + &lt;jmsRealm&gt;qcf&lt;/jmsRealm&gt; + &lt;destinationName&gt;jms/GetPolicyDetailsRequest&lt;/destinationName&gt; + &lt;destinationType&gt;QUEUE&lt;/destinationType&gt; + &lt;/browse&gt;</code></pre> </p> - - <p> <b>example (browse output):</b> - <code> - <pre> - &lt;result&gt; - &lt;items count="2"&gt; - &lt;item&gt; - &lt;timestamp&gt;Thu Nov 20 13:36:31 CET 2014&lt;/timestamp&gt; - &lt;messageId&gt;ID:LPAB00000003980-61959-1416486781822-3:5:33:1:1&lt;/messageId&gt; - &lt;correlationId&gt;...&lt;/correlationId&gt; - &lt;message&gt;&lt;![CDATA[...]]&gt;&lt;/message&gt; - &lt;/item&gt; - &lt;item&gt; - &lt;timestamp&gt;Thu Dec 12 11:59:22 CET 2014&lt;/timestamp&gt; - &lt;messageId&gt;ID:LPAB00000003980-58359-1721486799722-3:4:19:1:1&lt;/messageId&gt; - &lt;correlationId&gt;...&lt;/correlationId&gt; - &lt;message&gt;&lt;![CDATA[...]]&gt;&lt;/message&gt; - &lt;/item&gt; - &lt;/items&gt; - &lt;/result&gt; - </pre> - </code> + <pre><code>&lt;result&gt; + &lt;items count=&quot;2&quot;&gt; + &lt;item&gt; + &lt;timestamp&gt;Thu Nov 20 13:36:31 CET 2014&lt;/timestamp&gt; + &lt;messageId&gt;ID:LPAB00000003980-61959-1416486781822-3:5:33:1:1&lt;/messageId&gt; + &lt;correlationId&gt;...&lt;/correlationId&gt; + &lt;message&gt;&lt;![CDATA[...]]&gt;&lt;/message&gt; + &lt;/item&gt; + &lt;item&gt; + &lt;timestamp&gt;Thu Dec 12 11:59:22 CET 2014&lt;/timestamp&gt; + &lt;messageId&gt;ID:LPAB00000003980-58359-1721486799722-3:4:19:1:1&lt;/messageId&gt; + &lt;correlationId&gt;...&lt;/correlationId&gt; + &lt;message&gt;&lt;![CDATA[...]]&gt;&lt;/message&gt; + &lt;/item&gt; + &lt;/items&gt; + &lt;/result&gt;</code></pre> </p> <p> <b>example (remove output):</b> - <code> - <pre> - &lt;result&gt; - &lt;itemsRemoved&gt;2&lt;/itemsRemoved&gt; - &lt;/result&gt; - </pre> - </code> - </p> + <pre><code>&lt;result&gt; + &lt;itemsRemoved&gt;2&lt;/itemsRemoved&gt; + &lt;/result&gt;</code></pre> @@ -4681,8 +5096,8 @@ QuerySender that transforms the input message to a query. - <br/><code><pre> - select + <br/> + <pre><code>select delete insert update - tableName @@ -4694,14 +5109,13 @@ - formatString [0..1] only applicable for type=datetime, yyyy-MM-dd HH:mm:ss.SSS by default - where [0..1] - order [0..1] - <br/> + alter - sequenceName - startWith - <br/> + sql - type [0..1] one of {select;ddl;other}, other by default - - query - <br/> - </pre></code><br/> + - query</code></pre> + <br/> @@ -4797,17 +5211,17 @@ - Set whether the client should be configured with global bucket access enabled. Default: false + Option to enable or disable the usage of multi-region access point ARNs. Default: false - Name of the region that the client will be created from Default: eu-west-1 + Name of the AWS region that the client is using. Default: eu-west-1 - Name of the bucket to access. The bucketName can also be specified by prefixing it to the object name, separated from it by | + Name of the bucket to access. The bucketName can also be specified by prefixing it to the object name, separated from it by <code>|</code> @@ -4827,7 +5241,7 @@ - Maximum concurrent connections towards S3 + Maximum concurrent connections towards S3 Default: 50 @@ -4837,7 +5251,7 @@ - + @@ -4852,7 +5266,7 @@ - If parameter [action] is set, then the attribute action value will be overridden with the value of the parameter. + If parameter [<code>action</code>] is set, then the attribute action value will be overridden with the value of the parameter. @@ -4860,52 +5274,52 @@ - Filename to operate on. If not set, the parameter filename is used. If that is not set either, the input is used + Filename to operate on. If not set, the parameter <code>filename</code> is used. If that is not set either, the input is used - Destination for move, copy or rename. If not set, the parameter destination is used. If that is not set either, the input is used + Destination for <code>move</code>, <code>copy</code> or <code>rename</code>. If not set, the parameter <code>destination</code> is used. If that is not set either, the input is used - Folder that is scanned for files when action=list. When not set, the root is scanned + Folder that is scanned for files when action=<code>list</code>. When not set, the root is scanned - If set <code>true</code>, the folder to create, write, move or copy the file to is created if it does not exist Default: false + If <code>true</code>: if a non-existing folder is part of the fileName, it will be created. Default: false - If set <code>true</code>, for actions create, write, move, copy or rename, the destination file is overwritten if it already exists Default: false + If set <code>true</code>, for actions <code>create</code>, <code>write</code>, <code>move</code>, <code>copy</code> or <code>rename</code>, the destination file is overwritten if it already exists Default: false - For action=append: If set to a positive number, the file is rotated each day, and this number of files is kept. The inputFolder must point to the directory where the file resides Default: 0 + For action=<code>append</code>: If set to a positive number, the file is rotated each day, and this number of files is kept. The inputFolder must point to the directory where the file resides Default: 0 - For action=append: If set to a positive number, the file is rotated when it has reached the specified size, and the number of files specified in numberOfBackups is kept. Size is specified in plain bytes, suffixes like 'K', 'M' or 'G' are not recognized. The inputFolder must point to the directory where the file resides Default: 0 + For action=<code>append</code>: If set to a positive number, the file is rotated when it has reached the specified size, and the number of files specified in numberOfBackups is kept. Size is specified in plain bytes, suffixes like 'K', 'M' or 'G' are not recognized. The inputFolder must point to the directory where the file resides Default: 0 - For the actions write and append, with rotateSize>0: the number of backup files that is kept. The inputFolder must point to the directory where the file resides Default: 0 + For the actions <code>write</code> and <code>append</code>, with rotateSize>0: the number of backup files that is kept. The inputFolder must point to the directory where the file resides Default: 0 - Filter of files to look for in inputFolder e.g. '*.inp'. Works with actions move, copy, delete and list + Filter of files to look for in inputFolder e.g. '*.inp'. Works with actions <code>move</code>, <code>copy</code>, <code>delete</code> and <code>list</code> - Filter of files to be excluded when looking in inputFolder. Works with actions move, copy, delete and list + Filter of files to be excluded when looking in inputFolder. Works with actions <code>move</code>, <code>copy</code>, <code>delete</code> and <code>list</code> @@ -4915,17 +5329,17 @@ - If set to <code>true</code> then the system specific line separator will be appended to the file after executing the action. Works with actions write and append Default: false + If set to <code>true</code> then the system specific line separator will be appended to the file after executing the action. Works with actions <code>write</code> and <code>append</code> Default: false - Charset to be used for read and write action + Charset to be used for <code>read</code> and <code>write</code> action - If set to true then the folder will be deleted if it is empty after processing the action. Works with actions delete, readDelete and move + If set to true then the folder will be deleted if it is empty after processing the action. Works with actions <code>delete</code>, <code>readDelete</code> and <code>move</code> @@ -4936,6 +5350,14 @@ + + + Filter for action <code>list</code>. Specify <code>FILES_ONLY</code>, <code>FOLDERS_ONLY</code> or <code>FILES_AND_FOLDERS</code>. Default: FILES_ONLY + + + + + @@ -4962,7 +5384,8 @@ - The connection timeout in seconds Default: 10 + READ_TIMEOUT timeout in MS. + Defaults to 10000, inherited from HttpSender#setTimeout. Default: 10000 @@ -5000,32 +5423,32 @@ - If <code>action</code>=<code>create</code> the sessionKey that contains the file to use. If <code>action</code>=<code>get</code> and <code>getProperties</code>=<code>true</code> the sessionKey to store the result in + If <code>action=create</code> the sessionKey that contains the file to use. If <code>action=get</code> and <code>getProperties=true</code> the sessionKey to store the result in - If <code>action</code>=<code>create</code> the session key that contains the name of the file to use. If not set, the value of the property <code>filename</code> from the input message is used + If <code>action=create</code> the session key that contains the name of the file to use. If not set, the value of the property <code>filename</code> from the input message is used - If <code>action</code>=<code>create</code> the mime type used to store the document when it's not set in the input message by a property Default: 'application/octet-stream' + If <code>action=create</code> the mime type used to store the document when it's not set in the input message by a property Default: 'application/octet-stream' - (Only used when <code>action</code>=<code>get</code>). If true, the content of the document is put to <code>FileSessionKey</code> and all document properties are put in the result as a xml string Default: false + (Only used when <code>action=get</code>). If true, the content of the document is put to <code>FileSessionKey</code> and all document properties are put in the result as a xml string Default: false - (Only used when <code>action</code>=<code>get</code>). If true, the attachment for the document is the sender result or, if set, stored in <code>FileSessionKey</code>. If false, only the properties are returned Default: true + (Only used when <code>action=get</code>). If true, the attachment for the document is the sender result or, if set, stored in <code>fileSessionKey</code>. If false, only the properties are returned Default: true - (Only used when <code>action</code>=<code>create</code>). If true, the document is created in the root folder of the repository. Otherwise the document is created in the repository Default: true + (Only used when <code>action=create</code>). If true, the document is created in the root folder of the repository. Otherwise the document is created in the repository Default: true @@ -5111,17 +5534,17 @@ - If <code>true</code>, the hostname in the certificate will be checked against the actual hostname of the peer + If <code>true</code>, the hostname in the certificate will be checked against the actual hostname of the peer. Note: This attribute is unsafe and should not be used in a production environment. Default: false - If <code>true</code>, self signed certificates are accepted Default: false + If <code>true</code>, self signed certificates are accepted. Note: This attribute is unsafe and should not be used in a production environment. Default: false - If <code>true</code>, CertificateExpiredExceptions are ignored Default: false + If <code>true</code>, CertificateExpiredExceptions are ignored. Note: This attribute is unsafe and should not be used in a production environment. Default: false @@ -5202,7 +5625,7 @@ - + @@ -5325,14 +5748,7 @@ - - - The type of output. If not set then defaults to old-style XML. If set to XML, new-style XML is used. EXPERIMENTAL: datatypes like numbers are not yet rendered correctly Default: false - - - - - + @@ -5423,7 +5839,7 @@ - + @@ -5437,7 +5853,7 @@ - (Only for <code>synchronous</code>=<code>true</code>). Maximum time in ms to wait for a reply. 0 means no timeout. Default: 5000 + (Only for <code>synchronous=true</code>). Maximum time in ms to wait for a reply. 0 means no timeout. Default: 5000 @@ -5520,7 +5936,7 @@ - Comma separated list of fields to try as response address Default: replyTo,from,sender,Return-Path + Comma separated list of fields to try as response address Default: <code>replyTo,from,sender,Return-Path</code> @@ -5632,7 +6048,7 @@ - If <code>true</code>, the hostname in the certificate will be checked against the actual hostname of the peer + If <code>true</code>, the hostname in the certificate will be checked against the actual hostname of the peer Default: false @@ -5701,6 +6117,54 @@ + + + + + + + + + Synchronous or Asynchronous execution of the call to other adapter or system. + <br/> + Set to <code>false</code> to make the call asynchronously. This means that the current adapter + continues with the next pipeline and the result of the sub-adapter that was called, or other system that was called, + is ignored. Instead, the input message will be returned as the result message. Default: true + + + + + Scope decides if the FrankSender calls another adapter, or another Java program running in the same JVM. + <br/> + It is possible to set this via a parameter. If the parameter is defined but the value at runtime + is empty, then the value set via this attribute will be used as default. Default: ADAPTER + + + + + + + + Target: service-name of service in other application that should be called, or name of adapter to be called. + If the adapter is in another configuration, prefix the adapter name with the name of that configuration and a slash ("<code>/</code>"). + <br/> + It is possible to set a target at runtime via a parameter. + <br/> + If a parameter with name <code>target</code> exists but has no value, then the target configured + via the attribute will be used as a default. + + + + + Comma separated list of keys of session variables that will be returned to caller, for correct results as well as for erroneous results. + The set of available sessionKeys to be returned might be limited by the returnedSessionKeys attribute of the corresponding JavaListener. + + + + + + + @@ -5846,7 +6310,7 @@ - (ftps) If <code>true</code>, the hostname in the certificate will be checked against the actual hostname of the peer + (ftps) If <code>true</code>, the hostname in the certificate will be checked against the actual hostname of the peer Default: false @@ -5888,12 +6352,12 @@ - (Only used when <code>methodType</code>=<code>POST</code> and <code>postType</code>=<code>URLENCODED</code>, <code>FORM-DATA</code> or <code>MTOM</code>) Prepends a new BodyPart using the specified name and uses the input of the Sender as content + (Only used when <code>methodType=POST</code> and <code>postType=URLENCODED</code>, <code>FORM-DATA</code> or <code>MTOM</code>) Prepends a new BodyPart using the specified name and uses the input of the Sender as content - If set and <code>methodType</code>=<code>POST</code> and <code>paramsInUrl</code>=<code>false</code>, a multipart/form-data entity is created instead of a request body. + If set and <code>methodType=POST</code> and <code>paramsInUrl=false</code>, a multipart/form-data entity is created instead of a request body. For each part element in the session key a part in the multipart entity is created. Part elements can contain the following attributes: <ul> <li>name: optional, used as 'filename' in Content-Disposition</li> @@ -5911,7 +6375,8 @@ - If <code>true</code>, the input will be added to the URL for <code>methodType</code>=<code>GET</code>, or for <code>methodType</code>=<code>POST</code>, <code>PUT</code> or <code>PATCH</code> if <code>postType</code>=<code>RAW</code>. This used to be the default behaviour in framework version 7.7 and earlier Default: for methodType=<code>GET</code>: <code>false</code>,<br/>for methodTypes <code>POST</code>, <code>PUT</code>, <code>PATCH</code>: <code>true</code> + If <code>true</code>, the input will be added to the URL for <code>methodType=GET</code>, or for <code>methodType=POST</code>, <code>PUT</code> or + <code>PATCH</code> if <code>postType=RAW</code>. This used to be the default behaviour in framework version 7.7 and earlier Default: for methodType=<code>GET</code>: <code>false</code>,<br/>for methodTypes <code>POST</code>, <code>PUT</code>, <code>PATCH</code>: <code>true</code> @@ -5921,7 +6386,7 @@ - + @@ -5950,7 +6415,7 @@ - Timeout in ms of obtaining a connection/result. 0 means no timeout Default: 10000 + Timeout in ms of obtaining a connection/result. Default: 10000 @@ -6015,7 +6480,7 @@ - Timeout in ms of obtaining a connection/result. 0 means no timeout Default: 10000 + Timeout in ms of obtaining a connection/result. Default: 10000 @@ -6116,11 +6581,6 @@ The set of available sessionKeys to be returned might be limited by the returnedSessionKeys attribute of the corresponding JavaListener. - - - Currently used to mimic the HttpSender when it is stubbed locally. It could be useful in other situations too although currently the response string is used which isn't streamed, it would be better to pass the multipart as an input stream in the context map in which case content type and charset could also be passed Default: false - - Set to 'DLL' to make the dispatcher communicate with a DLL set on the classpath @@ -6155,7 +6615,7 @@ - If set <code>false</code>, the call is made asynchronously. This implies isolated=<code>true</code> Default: true + If set <code>false</code>, the call is made asynchronously. This implies <code>isolated=true</code> Default: true @@ -6189,7 +6649,11 @@ - + + + + + This is the contract number for iDIN the Merchant received from its Acquirer after registration, @@ -6264,7 +6728,7 @@ has the file extension .cer,.crt or .pem. - + This is the certificate owned by the Merchant. Its public key is used by the Issuer to encrypt information. The Merchant can then use the private key to decrypt that information. The SAML certificate must be in @@ -6285,6 +6749,13 @@ + + + + + Load configuration from XML. Attributes may overwrite this 'default'. + + @@ -6297,7 +6768,7 @@ - + @@ -6356,7 +6827,7 @@ - Comma separated list of fields to try as response address Default: replyTo,from,sender,Return-Path + Comma separated list of fields to try as response address Default: <code>replyTo,from,sender,Return-Path</code> @@ -6381,7 +6852,7 @@ - + the name of the javascript file containing the functions to run @@ -6393,7 +6864,7 @@ - the name of the JavaScript engine to be used. Default: J2V8 + the name of the JavaScript engine to use. Default: J2V8 @@ -6482,7 +6953,7 @@ - Namespace definitions for xpathExpression. Must be in the form of a comma or space separated list of <code>prefix=namespaceuri</code>-definitions Default: j=http://www.w3.org/2013/XSL/json + Namespace definitions for xpathExpression. Must be in the form of a comma or space separated list of <code>prefix=namespaceuri</code> definitions Default: j=http://www.w3.org/2013/XSL/json @@ -6654,7 +7125,7 @@ - + @@ -6727,7 +7198,13 @@ - Optional base folder, that serves as root for all other folders + Path to the folder that serves as the root of this virtual filesystem. All specifications of folders or files are relative to this root. + When the root is left unspecified, absolute paths to files and folders can be used + + + + + Whether the LocalFileSystem tries to create the root folder if it doesn't exist yet. Default: false @@ -6823,7 +7300,7 @@ - + @@ -6837,10 +7314,17 @@ If set to <code>true</code>, the message is stored only if the MessageId is not present in the store yet. Default: <code>true</code> + + + Set the slotId, an identifier to keep separate the messages inserted + by different MessageStoreSenders. + <br/> + This field should be set. + + - @@ -6866,7 +7350,15 @@ - + + + Set the slotId, an identifier to keep separate the messages inserted + by different JdbcTransactionalStorage instances. + <br/> + This field is optional, unless the attribute #onlyStoreWhenMessageIdUnique is + set to <code>true</code>. + + @@ -6968,7 +7460,14 @@ - Regular expression to mask strings in the errorStore/logStore. Every character between to the strings in this expression will be replaced by a '*'. For example, the regular expression (?&lt;=&lt;party&gt;).*?(?=&lt;/party&gt;) will replace every character between keys &lt;party&gt; and &lt;/party&gt; + Regular expression to mask strings in the errorStore/logStore. + Every character between to the strings in this expression will be replaced by a '*'. + <br/> + For example, the regular expression (?&lt;=&lt;party&gt;).*?(?=&lt;/party&gt;) will replace every + character between keys &lt;party&gt; and &lt;/party&gt; + <br/> + When no hideRegex is configured on the errorStore / logStore but is configured on the org.frankframework.receivers.Receiver#setHideRegex(String), + then the Receiver's hideRegex is used for the errorStore / logStore. @@ -6992,17 +7491,17 @@ - The MongoDB datasource Default: mongodb.datasource.default + The MongoDB datasource Default: <code>mongodb.datasource.default</code> - Database to connect to. Can be overridden by parameter database + Database to connect to. Can be overridden by parameter <code>database</code> - Collection to act upon. Can be overridden by parameter collection + Collection to act upon. Can be overridden by parameter <code>collection</code> @@ -7015,12 +7514,12 @@ - Filter. Can contain references to parameters between ?{ and }. Can be overridden by parameter filter + Filter. Can contain references to parameters between <code>?{</code> and <code>}</code>. Can be overridden by parameter <code>filter</code> - Limit to number of results returned. A value of 0 means 'no limit'. Can be overridden by parameter limit. Default: 0 + Limit to number of results returned. A value of 0 means 'no limit'. Can be overridden by parameter <code>limit</code>. Default: 0 @@ -7053,7 +7552,7 @@ - + @@ -7075,7 +7574,7 @@ NetStorage action to be used - + @@ -7142,7 +7641,7 @@ - Timeout in ms of obtaining a connection/result. 0 means no timeout Default: 10000 + Timeout in ms of obtaining a connection/result. Default: 10000 @@ -7471,7 +7970,7 @@ - Timeout in ms of obtaining a connection/result. 0 means no timeout Default: 10000 + Timeout in ms of obtaining a connection/result. Default: 10000 @@ -7587,7 +8086,7 @@ - If <code>true</code>, the hostname in the certificate will be checked against the actual hostname of the peer + If <code>true</code>, the hostname in the certificate will be checked against the actual hostname of the peer Default: false @@ -7612,7 +8111,7 @@ - Used when StaleChecking=<code>true</code>. Timeout after which an idle connection will be validated before being used. Default: 5000 ms + Used when <code>staleChecking</code> is <code>true</code>. Timeout after which an idle connection will be validated before being used. Default: 5000 ms @@ -7841,74 +8340,9 @@ - - - The type of output. If not set then defaults to old-style XML. If set to XML, new-style XML is used. EXPERIMENTAL: datatypes like numbers are not yet rendered correctly Default: false - - - - - + - - - - - - - - - content-type of the request Default: text/html; charset=utf-8 - - - - - url or base of url to be used - - - - - timeout in ms of obtaining a connection/result. 0 means no timeout Default: 10000 - - - - - the maximum number of concurrent connections Default: 10 - - - - - alias used to obtain credentials for authentication to host - - - - - username used in authentication to host - - - - - password used to authenticate with the host - - - - - - - Default: 80 - - - - - the soapactionuri to be set in the requestheader - - - - - - - @@ -8000,7 +8434,7 @@ - Timeout in ms of obtaining a connection/result. 0 means no timeout Default: 10000 + Timeout in ms of obtaining a connection/result. Default: 10000 @@ -8209,15 +8643,9 @@ - - - - - - @@ -8270,7 +8698,7 @@ If set <code>true</code>, send warnings to logging and console about syntax problems in the configured schema('s). - Alternatively, warnings can be switched off using suppression properties XSD_VALIDATION_WARNINGS_SUPPRESS_KEY, XSD_VALIDATION_ERROR_SUPPRESS_KEY and XSD_VALIDATION_FATAL_ERROR_SUPPRESS_KEY Default: true + Alternatively, warnings can be switched off using suppression properties <code>XSD_VALIDATION_WARNINGS_SUPPRESS_KEY</code>, <code>XSD_VALIDATION_ERROR_SUPPRESS_KEY</code> and <code>XSD_VALIDATION_FATAL_ERROR_SUPPRESS_KEY</code> Default: true @@ -8318,7 +8746,7 @@ - + @@ -8347,7 +8775,16 @@ - Sender to work with Amazon S3. + Sender to work with the Amazon S3 Filesystem. + <p> + In addition to regular parameters for filesystem senders, it is possible + to set custom user-metadata on S3 files by prefixing parameter names with + <code>FileAttribute.</code>. + This prefix will be not be part of the actual metadata property name. + </p> + <p> + The string value of these parameters will be used as value of the custom metadata attribute. + </p> @@ -8361,46 +8798,39 @@ Sender to obtain information from and write to a CMIS application. - <p> - When <code>action</code>=<code>get</code> the input (xml string) indicates the id of the document to get. This input is mandatory. + When <code>action=get</code> the input (xml string) indicates the id of the document to get. This input is mandatory. </p> <p> <b>Example:</b> - <pre><code> - &lt;cmis&gt; - &lt;id&gt;documentId&lt;/id&gt; - &lt;/cmis&gt; - </code></pre> + <pre><code>&lt;cmis&gt; + &lt;id&gt;documentId&lt;/id&gt; + &lt;/cmis&gt;</code></pre> </p> <p> - When <code>action</code>=<code>delete</code> the input (xml string) indicates the id of the document to get. This input is mandatory. + When <code>action=delete</code> the input (xml string) indicates the id of the document to get. This input is mandatory. </p> <p> <b>Example:</b> - <pre><code> - &lt;cmis&gt; - &lt;id&gt;documentId&lt;/id&gt; - &lt;/cmis&gt; - </code></pre> + <pre><code>&lt;cmis&gt; + &lt;id&gt;documentId&lt;/id&gt; + &lt;/cmis&gt;</code></pre> </p> <p> - When <code>action</code>=<code>create</code> the input (xml string) indicates document properties to set. This input is optional. + When <code>action=create</code> the input (xml string) indicates document properties to set. This input is optional. </p> <p> <b>Example:</b> - <pre><code> - &lt;cmis&gt; - &lt;name&gt;Offerte&lt;/name&gt; - &lt;objectTypeId&gt;NNB_Geldlening&lt;/objectTypeId&gt; - &lt;mediaType&gt;application/pdf&lt;/mediaType&gt; - &lt;properties&gt; - &lt;property name="ArrivedAt" type="datetime" formatString="yyyy-MM-dd'T'HH:mm:ss.SSSz"&gt;2014-11-27T16:43:01.268+0100&lt;/property&gt; - &lt;property name="ArrivedBy"&gt;HDN&lt;/property&gt; - &lt;property name="DocumentType"&gt;Geldlening&lt;/property&gt; - &lt;/properties&gt; - &lt;/cmis&gt; - </code></pre> + <pre><code>&lt;cmis&gt; + &lt;name&gt;Offerte&lt;/name&gt; + &lt;objectTypeId&gt;NNB_Geldlening&lt;/objectTypeId&gt; + &lt;mediaType&gt;application/pdf&lt;/mediaType&gt; + &lt;properties&gt; + &lt;property name=&quot;ArrivedAt&quot; type=&quot;datetime&quot; formatString=&quot;yyyy-MM-dd'T'HH:mm:ss.SSSz&quot;&gt;2014-11-27T16:43:01.268+0100&lt;/property&gt; + &lt;property name=&quot;ArrivedBy&quot;&gt;HDN&lt;/property&gt; + &lt;property name=&quot;DocumentType&quot;&gt;Geldlening&lt;/property&gt; + &lt;/properties&gt; + &lt;/cmis&gt;</code></pre> </p> <p> @@ -8423,42 +8853,38 @@ </table> </p> <p> - When <code>action</code>=<code>find</code> the input (xml string) indicates the query to perform. + When <code>action=find</code> the input (xml string) indicates the query to perform. </p> <p> <b>Example:</b> - <pre><code> - &lt;query&gt; - &lt;statement&gt;select * from cmis:document&lt;/statement&gt; - &lt;maxItems&gt;10&lt;/maxItems&gt; - &lt;skipCount&gt;0&lt;/skipCount&gt; - &lt;searchAllVersions&gt;true&lt;/searchAllVersions&gt; - &lt;includeAllowableActions&gt;true&lt;/includeAllowableActions&gt; - &lt;/query&gt; - </code></pre> + <pre><code>&lt;query&gt; + &lt;statement&gt;select * from cmis:document&lt;/statement&gt; + &lt;maxItems&gt;10&lt;/maxItems&gt; + &lt;skipCount&gt;0&lt;/skipCount&gt; + &lt;searchAllVersions&gt;true&lt;/searchAllVersions&gt; + &lt;includeAllowableActions&gt;true&lt;/includeAllowableActions&gt; + &lt;/query</code></pre> </p> <p> - When <code>action</code>=<code>update</code> the input (xml string) indicates document properties to update. + When <code>action=update</code> the input (xml string) indicates document properties to update. </p> <p> <b>Example:</b> - <pre><code> - &lt;cmis&gt; - &lt;id&gt;123456789&lt;/id&gt; - &lt;properties&gt; - &lt;property name="ArrivedAt" type="datetime" formatString="yyyy-MM-dd'T'HH:mm:ss.SSSz"&gt;2014-11-27T16:43:01.268+0100&lt;/property&gt; - &lt;property name="ArrivedBy"&gt;HDN&lt;/property&gt; - &lt;property name="DocumentType"&gt;Geldlening&lt;/property&gt; - &lt;/properties&gt; - &lt;/cmis&gt; - </code></pre> + <pre><code>&lt;cmis&gt; + &lt;id&gt;123456789&lt;/id&gt; + &lt;properties&gt; + &lt;property name=&quot;ArrivedAt&quot; type=&quot;datetime&quot; formatString=&quot;yyyy-MM-dd'T'HH:mm:ss.SSSz&quot;&gt;2014-11-27T16:43:01.268+0100&lt;/property&gt; + &lt;property name=&quot;ArrivedBy&quot;&gt;HDN&lt;/property&gt; + &lt;property name=&quot;DocumentType&quot;&gt;Geldlening&lt;/property&gt; + &lt;/properties&gt; + &lt;/cmis&gt;</code></pre> </p> <p> <table border="1"> <tr><th>attributes</th><th>description</th><th>default</th></tr> <tr><td>id</td><td>mandatory property "cmis:objectId" which indicates the document to update</td><td>&nbsp;</td></tr> - <tr><td>property</td><td>custom document property to update. See <code>action</code>=<code>create</code> for possible attributes</td><td>&nbsp;</td></tr> + <tr><td>property</td><td>custom document property to update. See <code>action=create</code> for possible attributes</td><td>&nbsp;</td></tr> </table> </p> @@ -8582,6 +9008,215 @@ + + + Sender to send a message to another Frank! Adapter, or an external program running in the same JVM as the Frank!Framework. + <p> + Sends a message to another Frank!Framework-adapter in the same Frank!Framework instance, or an external program running in + the same JVM as the Frank!Framework. If the callee exits with an <code>&lt;Exit/&gt;</code> that has state PipeLine.ExitState#ERROR, + an error is considered to happen in the caller which means that the <code>exception</code> forward is followed if it is present. + </p> + <p> + Returns <code>exit.code</code> as forward name to the SenderPipe, provided that <code>exit.code</code> can be parsed as integer. + For example, if the called adapter has an exit state with code + <code>2</code>, then the SenderPipe supports a forward with name <code>2</code> + that is followed when the called adapter exits with the mentioned exit. This does not work if the code is for example <code>c2</code>. + </p> + <p> + A FrankSender makes a call to either an Adapter or an external program by setting the #scope. By default the scope is <code>ADAPTER</code>. + </p> + <p/> + + <h3>Configuration of the Adapter to be called</h3> + <p> + A call to another Adapter in the same Frank!Framework instance is preferably made using the combination + of a FrankSender configured with the name of the adapter. + </p> + <h4>Configuring FrankSender and Adapter</h4> + <ul> + <li>Define a SenderPipe with a FrankSender</li> + <li>Set the attribute <code>target</code> to <i>targetAdapterName</i></li> + <li>If the adapter is in another Configuration deployed in the same Frank!Framework instance, then set <code>target</code> to <code>targetConfigurationName/targetAdapterName</code> (note the slash-separator between Configuration name and Adapter name).</li> + </ul> + In the Adapter to be called: + <ul> + <li>The adapter does not need to have a receiver configured to be called from a FrankSender,</li> + <li>The adapter will run in the same transaction as the calling adapter,</li> + <li>If the called adapter does not to run in its own transaction, set the transaction attributes on the PipeLine attribute of this adapter + or on the SenderPipe that contains this <code>FrankSender</code>.</li> + </ul> + + <h4>Configuring FrankSender with FrankListener</h4> + <ul> + <li>Define a SenderPipe with a FrankSender</li> + <li>In the target adapter, define a org.frankframework.receivers.Receiver with a FrankListener</li> + <li>Give a unique name to the listener: FrankListener#setName(String). If the name is not set, the name of the Adapter will be used.</li> + <li>Set the #setScope(Scope) to <code>LISTENER</code> and the #setTarget(String) to the listener name as per previous point</li> + <li>If the listener is in a different configuration, prefix the listener name with the name of the configuration and a slash (<code>/</code>) as separator between configuration and listener name</li> + </ul> + + <h4>Configuring FrankSender and Remote Application</h4> + <p> + <em>NB:</em> Please make sure that the IbisServiceDispatcher-1.4.jar or newer is present on the class path of the server. For more information, see: + </p> + <ul> + <li>Define a SenderPipe with a FrankSender</li> + <li>Set the attribute <code>scope</code> to either <code>JVM</code> for a Java application, or to <code>DLL</code> for code loaded from a DLL</li> + <li>Set the attribute <code>target</code> to the service-name the other application used to register itself</li> + </ul> + <p> + In the other application: + <ul> + <li>Implement the interface <code>nl.nn.adapterframework.dispatcher.RequestProcessor</code> from the IbisServiceDispatcher library</li> + <li>Register the instance with the <code>nl.nn.adapterframework.dispatcher.DispatcherManager</code> obtained via the <code>nl.nn.adapterframework.dispatcher.DispatcherManagerFactory</code></li> + <li>See the implementation code of the <code>JavaListener</code> in the Frank!Framework for an example</li> + </ul> + </p> + <p> + See also the repository of the IbisServiceDispatcher: + <a href="https://github.com/frankframework/servicedispatcher">https://github.com/frankframework/servicedispatcher</a> + </p> + + <h4>Using FrankSender to call an adapter from Larva tests</h4> + <p> + You can configure a FrankSender in Larva property files to use the FrankSender to invoke an adapter to test. When doing this, keep the following in mind: + <ul> + <li>If you leave the default scope as <code>ADAPTER</code>, then the <code>target</code> property needs to have both configuration name and adapter name, separated by a <code>/</code> character</li> + <li>When scope is left as default, the receiver and JavaListener are skipped and no transaction is started unless it is set on the adapter's <code>PipeLine</code></li> + <li>If you do need a transaction and the adapter has a JavaListener that has org.frankframework.receivers.JavaListener#setServiceName(String) defined, you can use the FrankSender with scope <code>JVM</code> + and set the <code>target</code> attribute to the <code>serviceName</code> attribute of the <code>JavaListener</code>.</li> + </ul> + </p> + + <h3>Migrating Existing Configurations</h3> + <p> + When one adapter (named A) needs to call another adapter (named B) like a subroutine, you will usually have an IbisLocalSender or an IbisJavaSender + in adapter A, and a org.frankframework.receivers.JavaListener in adapter B. + </p> + <p> + <em>NB:</em> For the example it is assumed that all adapters are defined in the same configuration. + </p> + + <h4>Example of Existing Configuration</h4> + The existing configuration might look like this in the calling adapter: + <pre><code>&lt;module&gt; + &lt;adapter name=&quot;Adapter A&quot;&gt; + &lt;receiver name=&quot;Adapter A Receiver&quot;&gt; + &lt;listener name=&quot;Adapter A Listener&quot; + className=&quot;org.frankframework...&quot; etc/&gt; + &lt;/receiver&gt; + &lt;pipeline firstPipe=&quot;...&quot;&gt; + &lt;pipe name=&quot;send&quot; className=&quot;org.frankframework.pipes.SenderPipe&quot;&gt; + &lt;sender className=&quot;org.frankframework.senders.IbisJavaSender&quot; + serviceName=&quot;service-Adapter-B&quot; /&gt; + &lt;forward name=&quot;success&quot; path=&quot;...&quot; /&gt; + &lt;/pipe&gt; + &lt;/pipeline&gt; + &lt;/adapter&gt; + &lt;/module&gt;</code></pre> + + Or like using the modern XML XSD and an IbisLocalSender instead: + <pre><code>&lt;Module&gt; + &lt;Adapter name=&quot;Adapter A&quot;&gt; + &lt;Receiver name=&quot;Adapter A Receiver&quot;&gt; + ... Listener setup and other configuration + &lt;/Receiver&gt; + &lt;Pipeline&gt; + &lt;SenderPipe name=&quot;send&quot;&gt; + &lt;IbisLocalSender name=&quot;call Adapter B&quot; + javaListener=&quot;Adapter B Listener&quot;/&gt; + &lt;Forward name=&quot;success&quot; path=&quot;EXIT&quot; /&gt; + &lt;/SenderPipe&gt; + &lt;/Pipeline&gt; + &lt;/Adapter&gt; + &lt;/Module&gt;</code></pre> + + In the receiving adapter B the listener would have been configured like this: + <pre><code>&lt;Module&gt; + &lt;Adapter name=&quot;adapter B&quot;&gt; + &lt;Receiver name=&quot;Receiver B&quot;&gt; + &lt;JavaListener name=&quot;Adapter B Listener&quot; serviceName=&quot;service-Adapter-B&quot;/&gt; + &lt;/Receiver&gt; + &lt;Pipeline&gt; + ... + &lt;/Pipeline&gt; + &lt;/Adapter&gt; + &lt;/Module&gt;</code></pre> + <p/> + + <h4>Rewritten Example Configuration With FrankSender</h4> + This example shows the most simple way of using the FrankSender to call another adapter with least amount of overhead. + + <pre><code>&lt;Module&gt; + &lt;Adapter name=&quot;Adapter A&quot;&gt; + &lt;Receiver name=&quot;Adapter A Receiver&quot;&gt; + ... Listener setup and other configuration + &lt;/Receiver&gt; + &lt;Pipeline&gt; + &lt;SenderPipe name=&quot;send&quot;&gt; + &lt;!-- when scope=&quot;ADAPTER&quot;, then target is directly the name of the adapter you want to call --&gt; + &lt;FrankSender name=&quot;call Adapter C&quot; + scope=&quot;ADAPTER&quot; + target=&quot;adapter B&quot; + /&gt; + &lt;Forward name=&quot;success&quot; path=&quot;EXIT&quot; /&gt; + &lt;/SenderPipe&gt; + &lt;/Pipeline&gt; + &lt;/Adapter&gt; + &lt;Adapter name=&quot;adapter B&quot;&gt; + &lt;!-- No receiver needed for FrankSender in this scenario --&gt; + &lt;Pipeline&gt; + ... Exits, Pipes etc + &lt;/Pipeline&gt; + &lt;/Adapter&gt; + &lt;/Module&gt;</code></pre> + + <h4>Rewritten Example Configuration With FrankSender and FrankListener</h4> + This example shows why you might want to call the other adapter via the FrankListener. This adds a bit more overhead to the call + of the sub-adapter for the extra error-handling done by the target receiver. + + <pre><code>&lt;Module&gt; + &lt;Adapter name=&quot;Adapter A&quot;&gt; + &lt;Receiver name=&quot;Adapter A Receiver&quot;&gt; + ... Listener setup and other configuration + &lt;/Receiver&gt; + &lt;Pipeline&gt; + &lt;SenderPipe name=&quot;send&quot;&gt; + &lt;!-- when scope=&quot;LISTENER&quot;, then target is directly the name of the FrankListener in the adapter you want to call --&gt; + &lt;FrankSender + scope=&quot;LISTENER&quot; + target=&quot;Adapter B Listener&quot;/&gt; + &lt;Forward name=&quot;success&quot; path=&quot;EXIT&quot; /&gt; + &lt;/SenderPipe&gt; + &lt;/Pipeline&gt; + &lt;/Adapter&gt; + &lt;Adapter name=&quot;adapter B&quot;&gt; + &lt;!-- Messages will only be sent to the error storage if: + - The target receiver is not transactional, and has maxTries=&quot;0&quot;, or + - The target receiver is transaction, and the Sender is set up to retry sending on error + For internal adapters, sending / receiving with retries might not make sense so the example does not show that. + --&gt; + &lt;Receiver name=&quot;Receiver B&quot; maxRetries=&quot;0&quot; transactionAttribute=&quot;NotSupported&quot;&gt; + &lt;!-- Listener name is optional, defaults to Adapter name --&gt; + &lt;FrankListener name=&quot;Adapter B Listener&quot;/&gt; + &lt;!-- This adapter now has an error storage -- without Receiver and FrankListener the sub-adapter couldn't have that --&gt; + &lt;JdbcErrorStorage slotId=&quot;Adapter B - Errors&quot; /&gt; + &lt;/Receiver&gt; + &lt;!-- If transactions are required, set transaction-attribute on the Pipeline --&gt; + &lt;Pipeline transactionAttribute=&quot;RequiresNew&quot;&gt; + ... Exits, Pipes etc + &lt;/Pipeline&gt; + &lt;/Adapter&gt; + &lt;/Module&gt;</code></pre> + + + + + + + + + @@ -8638,14 +9273,18 @@ - Posts a message to another IBIS-adapter or application in the same JVM using IbisServiceDispatcher. - + Posts a message to another Frank!Framework-adapter or an application in the same JVM using IbisServiceDispatcher. + <p> An IbisJavaSender makes a call to a Receiver with a JavaListener or any other application in the same JVM that has registered a <code>RequestProcessor</code> with the IbisServiceDispatcher. - + </p> + The IbisJavaSender is now considered to be legacy. The new way to call another adapter or java application from your own + adapter is by using the FrankSender. + </p> <h4>configuring IbisJavaSender and JavaListener</h4> <ul> - <li>Define a SenderPipe with an IbisJavaSender</li> + <li><em>NB:</em> Using IbisJavaSender to call another adapter is inefficient and therefore not recommended. It is much more efficient to use for this a FrankSender or IbisLocalSender.</li> + <li>Define a org.frankframework.pipes.SenderPipe with an IbisJavaSender</li> <li>Set the attribute <code>serviceName</code> to <i>yourExternalServiceName</i></li> </ul> In the Adapter to be called: @@ -8653,7 +9292,8 @@ <li>Define a Receiver with a JavaListener</li> <li>Set the attribute <code>serviceName</code> to <i>yourExternalServiceName</i></li> </ul> - N.B. Please make sure that the IbisServiceDispatcher-1.4.jar or newer is present on the class path of the server. + N.B. Please make sure that the IbisServiceDispatcher-1.4.jar or newer is present on the class path of the server. For more information, see: + <a href="https://github.com/frankframework/servicedispatcher">https://github.com/frankframework/servicedispatcher</a> @@ -8665,24 +9305,27 @@ - Posts a message to another IBIS-adapter in the same IBIS instance. If the callee exits with an &lt;<code>exit</code>&gt; + Posts a message to another Frank!Framework-adapter in the same Frank!Framework instance. If the callee exits with an &lt;<code>exit</code>&gt; that has state PipeLine.ExitState#ERROR, an error is considered to happen in the caller which means that the <code>exception</code> forward is followed if it is present. - <p/> - <p/> + <p> + The IbisLocalSender is now considered to be legacy. The new way to call another adapter from your own + adapter is by using the FrankSender. + </p> + <p> Returns exit.code as forward name to SenderPipe provided that exit.code can be parsed as integer. For example, if the called adapter has an exit state with code <code>2</code>, then the SenderPipe supports a forward with name <code>2</code> that is followed when the called adapter exits with the mentioned exit. This does not work if the code is for example <code>c2</code>. - <p/> - <p/> - An IbisLocalSender makes a call to a Receiver with either a WebServiceListener + </p> + <p> + An IbisLocalSender makes a call to a org.frankframework.receivers.Receiver with either a WebServiceListener or a JavaListener. - + </p> <h3>Configuration of the Adapter to be called</h3> - A call to another Adapter in the same IBIS instance is preferably made using the combination + A call to another Adapter in the same Frank!Framework instance is preferably made using the combination of an IbisLocalSender and a JavaListener. If, however, a Receiver with a WebServiceListener is already present, that can be used in some cases, too. @@ -8697,7 +9340,7 @@ <li>Define a Receiver with a JavaListener</li> <li>Set the attribute <code>name</code> to <i>yourServiceName</i></li> <li>Do not set the attribute <code>serviceName</code>, except if the service is to be called also - from applications other than this IBIS-instance</li> + from applications other than this Frank!Framework-instance</li> </ul> <h4>configuring IbisLocalSender and WebServiceListener</h4> @@ -8723,8 +9366,7 @@ - Requires the net.bankid.merchant.library V1.06+. - Compile with Java 1.7+ + Requires the net.bankid.merchant.library V1.2.9 @@ -8754,19 +9396,19 @@ - Sender used to run JavaScript code using J2V8 + Sender used to run JavaScript code using `JavascriptEngine` implementations. <p> - This sender can execute a function of a given javascript file, the result of the function will be the output of the sender. - The parameters of the javascript function to run are given as parameters by the adapter configuration + This sender can execute a function of a given Javascript file, the result of the function will be the output of the sender. + The parameters of the Javascript function to run are given as parameters by the adapter configuration The sender doesn't accept nor uses the given input, instead for each argument for the #jsFunctionName method, you will need to create a parameter on the sender. </p> <p> - The result of the javascript function should be of type String, or directly convertible to String from a primitive type + The result of the Javascript function should be of type String, or directly convertible to String from a primitive type or an array of primitive types / strings, as the output of the sender will be of type String. </p> <p> - Failure to ensure the output is a string may mean the result will look like {@code [Object object]}. + Failure to ensure the output is a string may mean the result will look like <code>[Object object]</code>. </p> @@ -8810,40 +9452,32 @@ <h2>example</h2> Consider the following configuration example: - <code> - <pre> - &lt;sender - className="org.frankframework.ldap.LdapSender" - ldapProviderURL="ldap://servername:389/o=ing" - operation="read" - attributesToReturn="givenName,sn,telephoneNumber" &gt; - &lt;param name="entryName" xpathExpression="entryName" /&gt; - &lt;/sender&gt; - </pre> - </code> + <pre><code>&lt;sender + className=&quot;org.frankframework.ldap.LdapSender&quot; + ldapProviderURL=&quot;ldap://servername:389/o=ing&quot; + operation=&quot;read&quot; + attributesToReturn=&quot;givenName,sn,telephoneNumber&quot; &gt; + &lt;param name=&quot;entryName&quot; xpathExpression=&quot;entryName&quot; /&gt; + &lt;/sender&gt;</code></pre> <br/> This may result in the following output: - <code><pre> - &lt;ldap&gt; - &lt;entryName&gt;uid=srp,ou=people&lt;/entryName&gt; - - &lt;attributes&gt; - &lt;attribute attrID="givenName"&gt; - &lt;value&gt;Jan&lt;/value&gt; - &lt;/attribute&gt; - - &lt;attribute attrID="telephoneNumber"&gt; - &lt;value&gt;010 5131123&lt;/value&gt; - &lt;value&gt;06 23456064&lt;/value&gt; - &lt;/attribute&gt; - - &lt;attribute attrID="sn"&gt; - &lt;value&gt;Jansen&lt;/value&gt; - &lt;/attribute&gt; - &lt;/attributes&gt; - &lt;/ldap&gt; - </pre></code> <br/> + <pre><code>&lt;ldap&gt; + &lt;entryName&gt;uid=srp,ou=people&lt;/entryName&gt; + &lt;attributes&gt; + &lt;attribute attrID=&quot;givenName&quot;&gt; + &lt;value&gt;Jan&lt;/value&gt; + &lt;/attribute&gt; + &lt;attribute attrID=&quot;telephoneNumber&quot;&gt; + &lt;value&gt;010 5131123&lt;/value&gt; + &lt;value&gt;06 23456064&lt;/value&gt; + &lt;/attribute&gt; + &lt;attribute attrID=&quot;sn&quot;&gt; + &lt;value&gt;Jansen&lt;/value&gt; + &lt;/attribute&gt; + &lt;/attributes&gt; + &lt;/ldap&gt;</code></pre> + <br/> Search or Read? @@ -8853,41 +9487,40 @@ together with the attributes. If the specified attributes are null or empty all the attributes of all the entries within the specified context are returned. - Sample result of a <code>read</code> operation:<br/><code><pre> - &lt;attributes&gt; - &lt;attribute&gt; - &lt;attribute name="employeeType" value="Extern"/&gt; - &lt;attribute name="roomNumber" value="DP 2.13.025"/&gt; - &lt;attribute name="departmentCode" value="358000"/&gt; - &lt;attribute name="organizationalHierarchy"&gt; - &lt;item value="ou=ING-EUR,ou=Group,ou=Organization,o=ing"/&gt; - &lt;item value="ou=OPS&amp;IT,ou=NL,ou=ING-EUR,ou=Group,ou=Organization,o=ing"/&gt; - &lt;item value="ou=000001,ou=OPS&amp;IT,ou=NL,ou=ING-EUR,ou=Group,ou=Organization,o=ing"/&gt; - &lt;/attribute> - &lt;attribute name="givenName" value="Gerrit"/> - &lt;/attributes&gt; - - </pre></code> <br/> - Sample result of a <code>search</code> operation:<br/><code><pre> - &lt;entries&gt; - &lt;entry name="uid=srp"&gt; - &lt;attributes&gt; - &lt;attribute&gt; - &lt;attribute name="employeeType" value="Extern"/&gt; - &lt;attribute name="roomNumber" value="DP 2.13.025"/&gt; - &lt;attribute name="departmentCode" value="358000"/&gt; - &lt;attribute name="organizationalHierarchy"&gt; - &lt;item value="ou=ING-EUR,ou=Group,ou=Organization,o=ing"/&gt; - &lt;item value="ou=OPS&amp;IT,ou=NL,ou=ING-EUR,ou=Group,ou=Organization,o=ing"/&gt; - &lt;item value="ou=000001,ou=OPS&amp;IT,ou=NL,ou=ING-EUR,ou=Group,ou=Organization,o=ing"/&gt; - &lt;/attribute> - &lt;attribute name="givenName" value="Gerrit"/> - &lt;/attributes&gt; - &lt;/entry&gt; - &lt;entry&gt; .... &lt;/entry&gt; - ..... - &lt;/entries&gt; - </pre></code> <br/> + Sample result of a <code>read</code> operation:<br/> + <pre><code>&lt;attributes&gt; + &lt;attribute&gt; + &lt;attribute name=&quot;employeeType&quot; value=&quot;Extern&quot;/&gt; + &lt;attribute name=&quot;roomNumber&quot; value=&quot;DP 2.13.025&quot;/&gt; + &lt;attribute name=&quot;departmentCode&quot; value=&quot;358000&quot;/&gt; + &lt;attribute name=&quot;organizationalHierarchy&quot;&gt; + &lt;item value=&quot;ou=ING-EUR,ou=Group,ou=Organization,o=ing&quot;/&gt; + &lt;item value=&quot;ou=OPS&amp;IT,ou=NL,ou=ING-EUR,ou=Group,ou=Organization,o=ing&quot;/&gt; + &lt;item value=&quot;ou=000001,ou=OPS&amp;IT,ou=NL,ou=ING-EUR,ou=Group,ou=Organization,o=ing&quot;/&gt; + &lt;/attribute&gt; + &lt;attribute name=&quot;givenName&quot; value=&quot;Gerrit&quot;/&gt; + &lt;/attributes&gt;</code></pre> + <br/> + Sample result of a <code>search</code> operation:<br/> + <pre><code>&lt;entries&gt; + &lt;entry name=&quot;uid=srp&quot;&gt; + &lt;attributes&gt; + &lt;attribute&gt; + &lt;attribute name=&quot;employeeType&quot; value=&quot;Extern&quot;/&gt; + &lt;attribute name=&quot;roomNumber&quot; value=&quot;DP 2.13.025&quot;/&gt; + &lt;attribute name=&quot;departmentCode&quot; value=&quot;358000&quot;/&gt; + &lt;attribute name=&quot;organizationalHierarchy&quot;&gt; + &lt;item value=&quot;ou=ING-EUR,ou=Group,ou=Organization,o=ing&quot;/&gt; + &lt;item value=&quot;ou=OPS&amp;IT,ou=NL,ou=ING-EUR,ou=Group,ou=Organization,o=ing&quot;/&gt; + &lt;item value=&quot;ou=000001,ou=OPS&amp;IT,ou=NL,ou=ING-EUR,ou=Group,ou=Organization,o=ing&quot;/&gt; + &lt;/attribute&gt; + &lt;attribute name=&quot;givenName&quot; value=&quot;Gerrit&quot;/&gt; + &lt;/attributes&gt; + &lt;/entry&gt; + &lt;entry&gt; .... &lt;/entry&gt; + ..... + &lt;/entries&gt;</code></pre> + <br/> @@ -8898,6 +9531,18 @@ + + Sender to work with the server local filesystem. + <p> + In addition to regular parameters for filesystem senders, it is possible + to set custom extended attributes on files by prefixing parameter names with + <code>FileAttribute.</code>. + This prefix will be not be part of the actual metadata property name. + </p> + <p> + The string value of these parameters will be used as value of the custom metadata attribute. + </p> + @@ -8941,33 +9586,29 @@ sender that sends a mail specified by an XML message. <p> Sample email.xml: - <code><pre> - &lt;email&gt; - &lt;recipients&gt; - &lt;recipient type="to"&gt;***@hotmail.com&lt;/recipient&gt; - &lt;recipient type="cc"&gt;***@gmail.com&lt;/recipient&gt; - &lt;/recipients&gt; - &lt;from name="*** ***"&gt;***@yahoo.com&lt;/from&gt; - &lt;subject&gt;This is the subject&lt;/subject&gt; - &lt;threadTopic&gt;subject&lt;/threadTopic&gt; - &lt;message&gt;This is the message&lt;/message&gt; - &lt;messageType&gt;text/plain&lt;/messageType&gt;&lt;!-- Optional --&gt; - &lt;messageBase64&gt;false&lt;/messageBase64&gt;&lt;!-- Optional --&gt; - &lt;charset&gt;UTF-8&lt;/charset&gt;&lt;!-- Optional --&gt; - &lt;attachments&gt; - &lt;attachment name="filename1.txt"&gt;This is the first attachment&lt;/attachment&gt; - &lt;attachment name="filename2.pdf" base64="true"&gt;JVBERi0xLjQKCjIgMCBvYmoKPDwvVHlwZS9YT2JqZWN0L1N1YnR5cGUvSW1...vSW5mbyA5IDAgUgo+PgpzdGFydHhyZWYKMzQxNDY2CiUlRU9GCg==&lt;/attachment&gt; - &lt;attachment name="filename3.pdf" url="file:/c:/filename3.pdf"/&gt; - &lt;attachment name="filename4.pdf" sessionKey="fileContent"/&gt; - &lt;/attachments&gt;&lt;!-- Optional --&gt; - &lt;/email&gt; - </pre></code> + <pre><code>&lt;email&gt; + &lt;recipients&gt; + &lt;recipient type=&quot;to&quot;&gt;***@hotmail.com&lt;/recipient&gt; + &lt;recipient type=&quot;cc&quot;&gt;***@gmail.com&lt;/recipient&gt; + &lt;/recipients&gt; + &lt;from name=&quot;*** ***&quot;&gt;***@yahoo.com&lt;/from&gt; + &lt;subject&gt;This is the subject&lt;/subject&gt; + &lt;threadTopic&gt;subject&lt;/threadTopic&gt; + &lt;message&gt;This is the message&lt;/message&gt; + &lt;messageType&gt;text/plain&lt;/messageType&gt;&lt;!-- Optional --&gt; + &lt;messageBase64&gt;false&lt;/messageBase64&gt;&lt;!-- Optional --&gt; + &lt;charset&gt;UTF-8&lt;/charset&gt;&lt;!-- Optional --&gt; + &lt;attachments&gt; + &lt;attachment name=&quot;filename1.txt&quot;&gt;This is the first attachment&lt;/attachment&gt; + &lt;attachment name=&quot;filename2.pdf&quot; base64=&quot;true&quot;&gt;JVBERi0xLjQKCjIgMCBvYmoKPDwvVHlwZS9YT2JqZWN0L1N1YnR5cGUvSW1...vSW5mbyA5IDAgUgo+PgpzdGFydHhyZWYKMzQxNDY2CiUlRU9GCg==&lt;/attachment&gt; + &lt;attachment name=&quot;filename3.pdf&quot; url=&quot;file:/c:/filename3.pdf&quot;/&gt; + &lt;attachment name=&quot;filename4.pdf&quot; sessionKey=&quot;fileContent&quot;/&gt; + &lt;/attachments&gt;&lt;!-- Optional --&gt; + &lt;/email&gt;</code></pre> </p><p> Notice: the XML message must be valid XML. Therefore, especially the message element must be plain text or be wrapped as CDATA. Example: - <code><pre> - &lt;message&gt;&lt;![CDATA[&lt;h1&gt;This is a HtmlMessage&lt;/h1&gt;]]&gt;&lt;/message&gt; - </pre></code> + <pre><code>&lt;message&gt;&lt;![CDATA[&lt;h1&gt;This is a HtmlMessage&lt;/h1&gt;]]&gt;&lt;/message&gt;</code></pre> </p><p> The <code>sessionKey</code> attribute for attachment can contain an inputstream or a string. Other types are not supported at this moment. </p><p> @@ -9010,14 +9651,11 @@ to the adapter around the sender pipe, because errors may occur before the message reaches the sender pipe. <br/><br/> Example configuration: - <code><pre> - &lt;SenderPipe name="Send"&gt; - &lt;MessageStoreSender - slotId="${instance.name}/TestMessageStore" - onlyStoreWhenMessageIdUnique="false" - /&gt; - &lt;/SenderPipe&gt; - </pre></code> + <pre><code>&lt;SenderPipe name=&quot;Send&quot;&gt; + &lt;MessageStoreSender + slotId=&quot;${instance.name}/TestMessageStore&quot; + onlyStoreWhenMessageIdUnique=&quot;false&quot; /&gt; + &lt;/SenderPipe&gt;</code></pre> @@ -9061,7 +9699,8 @@ <p><b>AuthAlias:</b></p> - <p>If you do not want to specify the nonce and the accesstoken used to authenticate with Akamai, you can use the authalias property. The username represents the nonce and the password the accesstoken.</p> + <p>If you do not want to specify the nonce and the access token used to authenticate with Akamai, you can use the authalias property. The username + represents the nonce and the password the access token.</p> @@ -9089,13 +9728,11 @@ This prevents (long) open connections inside Senders and possible connection failures. <b>Example:</b> - <pre><code> - &lt;SenderPipe&gt; + <pre><code>&lt;SenderPipe&gt; &lt;ReconnectSenderWrapper&gt; - &lt;EchoSender myAttribute="myValue" /&gt; + &lt;EchoSender myAttribute=&quot;myValue&quot; /&gt; &lt;/ReconnectSenderWrapper&gt; - &lt;/SenderPipe&gt; - </code></pre> + &lt;/SenderPipe&gt;</code></pre> </p> @@ -9236,7 +9873,7 @@ Collection of Senders, that are executed all at the same time. Once the results are processed, all results will be sent to the resultSender, - while the original sender will return it's result to the pipeline. + while the original sender will return its result to the pipeline. <p>Multiple sub-senders can be configured within the ShadowSender, the minimum amount of senders is 2 (originalSender + resultSender)</p> @@ -9268,79 +9905,73 @@ </ul> </p> <p> - All stored procedure parameters that are not fixed, so specified in the query with a {@code ?}, should - have a corresponding Parameter entry. Output parameters should have {@code mode="OUTPUT"}, or - {@code mode="INOUT"} depending on how the stored procedure is defined. + All stored procedure parameters that are not fixed, so specified in the query with a <code>?</code>, should + have a corresponding IParameter entry. Output parameters should have <code>mode=&quot;OUTPUT&quot;</code>, or + <code>mode=&quot;INOUT&quot;</code> depending on how the stored procedure is defined. </p> <p> <h3>Sample Output for queryType=OTHER</h3> <h4>Basic Example with Only Simple Output Parameters</h4> - <code><pre> - &lt;resultset&gt; - &lt;result param="r1" type="STRING"&gt;MESSAGE-CONTENTS&lt;/result&gt; - &lt;result param="r2" type="STRING"&gt;E&lt;/result&gt; - &lt;/resultset&gt; - </pre></code> + <pre><code>&lt;resultset&gt; + &lt;result param=&quot;r1&quot; type=&quot;STRING&quot;&gt;MESSAGE-CONTENTS&lt;/result&gt; + &lt;result param=&quot;r2&quot; type=&quot;STRING&quot;&gt;E&lt;/result&gt; + &lt;/resultset&gt;</code></pre> <h4>Example with Resultset and Simple Output Parameters</h4> - <code><pre> - &lt;resultset&gt; - &lt;result resultNr="1"&gt; - &lt;fielddefinition&gt; - &lt;field name="FIELDNAME" - type="columnType" - columnDisplaySize="" - precision="" - scale="" - isCurrency="" - columnTypeName="" - columnClassName=""/&gt; - &lt;field ...../&gt; - &lt;/fielddefinition&gt; - &lt;rowset&gt; - &lt;row number="0"&gt; - &lt;field name="TKEY"&gt;MSG-ID&lt;/field&gt; - &lt;field name="TCHAR"&gt;E&lt;/field&gt; - &lt;field name="TMESSAGE"&gt;MESSAGE-CONTENTS&lt;/field&gt; - &lt;field name="TCLOB" null="true"/&gt; - &lt;field name="TBLOB" null="true"/&gt; - &lt;/row&gt; - &lt;row number="1" ...../&gt; - &lt;/rowset&gt; - &lt;/result&gt; - &lt;result param="count" type="INTEGER"&gt;5&lt;/result&gt; - &lt;/resultset&gt; - </pre></code> + <pre><code>&lt;resultset&gt; + &lt;result resultNr=&quot;1&quot;&gt; + &lt;fielddefinition&gt; + &lt;field name=&quot;FIELDNAME&quot; + type=&quot;columnType&quot; + columnDisplaySize=&quot;&quot; + precision=&quot;&quot; + scale=&quot;&quot; + isCurrency=&quot;&quot; + columnTypeName=&quot;&quot; + columnClassName=&quot;&quot;/&gt; + &lt;field ...../&gt; + &lt;/fielddefinition&gt; + &lt;rowset&gt; + &lt;row number=&quot;0&quot;&gt; + &lt;field name=&quot;TKEY&quot;&gt;MSG-ID&lt;/field&gt; + &lt;field name=&quot;TCHAR&quot;&gt;E&lt;/field&gt; + &lt;field name=&quot;TMESSAGE&quot;&gt;MESSAGE-CONTENTS&lt;/field&gt; + &lt;field name=&quot;TCLOB&quot; null=&quot;true&quot;/&gt; + &lt;field name=&quot;TBLOB&quot; null=&quot;true&quot;/&gt; + &lt;/row&gt; + &lt;row number=&quot;1&quot; ...../&gt; + &lt;/rowset&gt; + &lt;/result&gt; + &lt;result param=&quot;count&quot; type=&quot;INTEGER&quot;&gt;5&lt;/result&gt; + &lt;/resultset&gt;</code></pre> <h4>Example with Simple and Cursor Output Parameters</h4> - <code><pre> - &lt;resultset&gt; - &lt;result param="count" type="INTEGER"&gt;5&lt;/result&gt; - &lt;result param="cursor1" type="LIST"&gt; - &lt;fielddefinition&gt; - &lt;field name="FIELDNAME" - type="columnType" - columnDisplaySize="" - precision="" - scale="" - isCurrency="" - columnTypeName="" - columnClassName=""/&gt; - &lt;field ...../&gt; - &lt;/fielddefinition&gt; - &lt;rowset&gt; - &lt;row number="0"&gt; - &lt;field name="TKEY"&gt;MSG-ID&lt;/field&gt; - &lt;field name="TCHAR"&gt;E&lt;/field&gt; - &lt;field name="TMESSAGE"&gt;MESSAGE-CONTENTS&lt;/field&gt; - &lt;field name="TCLOB" null="true"/&gt; - &lt;field name="TBLOB" null="true"/&gt; - &lt;/row&gt; - &lt;row number="1" ..... /&gt; - &lt;/rowset&gt; - &lt;/result&gt; - &lt;/resultset&gt; - </pre></code> + <pre><code>&lt;resultset&gt; + &lt;result param=&quot;count&quot; type=&quot;INTEGER&quot;&gt;5&lt;/result&gt; + &lt;result param=&quot;cursor1&quot; type=&quot;LIST&quot;&gt; + &lt;fielddefinition&gt; + &lt;field name=&quot;FIELDNAME&quot; + type=&quot;columnType&quot; + columnDisplaySize=&quot;&quot; + precision=&quot;&quot; + scale=&quot;&quot; + isCurrency=&quot;&quot; + columnTypeName=&quot;&quot; + columnClassName=&quot;&quot;/&gt; + &lt;field ...../&gt; + &lt;/fielddefinition&gt; + &lt;rowset&gt; + &lt;row number=&quot;0&quot;&gt; + &lt;field name=&quot;TKEY&quot;&gt;MSG-ID&lt;/field&gt; + &lt;field name=&quot;TCHAR&quot;&gt;E&lt;/field&gt; + &lt;field name=&quot;TMESSAGE&quot;&gt;MESSAGE-CONTENTS&lt;/field&gt; + &lt;field name=&quot;TCLOB&quot; null=&quot;true&quot;/&gt; + &lt;field name=&quot;TBLOB&quot; null=&quot;true&quot;/&gt; + &lt;/row&gt; + &lt;row number=&quot;1&quot; ..... /&gt; + &lt;/rowset&gt; + &lt;/result&gt; + &lt;/resultset&gt;</code></pre> </p> <p><em>NOTE:</em> Support for stored procedures is currently experimental and changes in the currently produced output-format are expected.</p> @@ -9353,18 +9984,6 @@ - - - Sender that sends a message via a WebService based on NTLM authentication. - - - - - - - - - Sender that sends a message via a WebService. @@ -9445,52 +10064,37 @@ </p> <p> <b>example (input):</b> - <code> - <pre> - &lt;browse&gt; - &lt;jmsRealm&gt;qcf&lt;/jmsRealm&gt; - &lt;destinationName&gt;jms/GetPolicyDetailsRequest&lt;/destinationName&gt; - &lt;destinationType&gt;QUEUE&lt;/destinationType&gt; - &lt;/browse> - </pre> - </code> + <pre><code>&lt;browse&gt; + &lt;jmsRealm&gt;qcf&lt;/jmsRealm&gt; + &lt;destinationName&gt;jms/GetPolicyDetailsRequest&lt;/destinationName&gt; + &lt;destinationType&gt;QUEUE&lt;/destinationType&gt; + &lt;/browse&gt;</code></pre> </p> - - <p> <b>example (browse output):</b> - <code> - <pre> - &lt;result&gt; - &lt;items count="2"&gt; - &lt;item&gt; - &lt;timestamp&gt;Thu Nov 20 13:36:31 CET 2014&lt;/timestamp&gt; - &lt;messageId&gt;ID:LPAB00000003980-61959-1416486781822-3:5:33:1:1&lt;/messageId&gt; - &lt;correlationId&gt;...&lt;/correlationId&gt; - &lt;message&gt;&lt;![CDATA[...]]&gt;&lt;/message&gt; - &lt;/item&gt; - &lt;item&gt; - &lt;timestamp&gt;Thu Dec 12 11:59:22 CET 2014&lt;/timestamp&gt; - &lt;messageId&gt;ID:LPAB00000003980-58359-1721486799722-3:4:19:1:1&lt;/messageId&gt; - &lt;correlationId&gt;...&lt;/correlationId&gt; - &lt;message&gt;&lt;![CDATA[...]]&gt;&lt;/message&gt; - &lt;/item&gt; - &lt;/items&gt; - &lt;/result&gt; - </pre> - </code> + <pre><code>&lt;result&gt; + &lt;items count=&quot;2&quot;&gt; + &lt;item&gt; + &lt;timestamp&gt;Thu Nov 20 13:36:31 CET 2014&lt;/timestamp&gt; + &lt;messageId&gt;ID:LPAB00000003980-61959-1416486781822-3:5:33:1:1&lt;/messageId&gt; + &lt;correlationId&gt;...&lt;/correlationId&gt; + &lt;message&gt;&lt;![CDATA[...]]&gt;&lt;/message&gt; + &lt;/item&gt; + &lt;item&gt; + &lt;timestamp&gt;Thu Dec 12 11:59:22 CET 2014&lt;/timestamp&gt; + &lt;messageId&gt;ID:LPAB00000003980-58359-1721486799722-3:4:19:1:1&lt;/messageId&gt; + &lt;correlationId&gt;...&lt;/correlationId&gt; + &lt;message&gt;&lt;![CDATA[...]]&gt;&lt;/message&gt; + &lt;/item&gt; + &lt;/items&gt; + &lt;/result&gt;</code></pre> </p> <p> <b>example (remove output):</b> - <code> - <pre> - &lt;result&gt; - &lt;itemsRemoved&gt;2&lt;/itemsRemoved&gt; - &lt;/result&gt; - </pre> - </code> - </p> + <pre><code>&lt;result&gt; + &lt;itemsRemoved&gt;2&lt;/itemsRemoved&gt; + &lt;/result&gt;</code></pre> @@ -9503,8 +10107,8 @@ QuerySender that transforms the input message to a query. - <br/><code><pre> - select + <br/> + <pre><code>select delete insert update - tableName @@ -9516,14 +10120,13 @@ - formatString [0..1] only applicable for type=datetime, yyyy-MM-dd HH:mm:ss.SSS by default - where [0..1] - order [0..1] - <br/> + alter - sequenceName - startWith - <br/> + sql - type [0..1] one of {select;ddl;other}, other by default - - query - <br/> - </pre></code><br/> + - query</code></pre> + <br/> @@ -9730,7 +10333,14 @@ - Regular expression to mask strings in the errorStore/logStore. Every character between to the strings in this expression will be replaced by a '*'. For example, the regular expression (?&lt;=&lt;party&gt;).*?(?=&lt;/party&gt;) will replace every character between keys &lt;party&gt; and &lt;/party&gt; + Regular expression to mask strings in the errorStore/logStore. + Every character between to the strings in this expression will be replaced by a '*'. + <br/> + For example, the regular expression (?&lt;=&lt;party&gt;).*?(?=&lt;/party&gt;) will replace every + character between keys &lt;party&gt; and &lt;/party&gt; + <br/> + When no hideRegex is configured on the errorStore / logStore but is configured on the org.frankframework.receivers.Receiver#setHideRegex(String), + then the Receiver's hideRegex is used for the errorStore / logStore. @@ -9927,6 +10537,18 @@ + + + ErrorMessageFormatter for JUICE, introduced with the Y01-project. + + + + + + + + + @@ -9979,6 +10601,11 @@ + + + + + @@ -9987,7 +10614,7 @@ - + @@ -10157,7 +10784,7 @@ - + @@ -10245,11 +10872,7 @@ - - - Characterset used for reading file, only used when <code>validateFile</code> is <code>true</code> Default: utf-8 - - + @@ -10315,11 +10938,7 @@ - - - Characterset used for reading file, only used when <code>validateFile</code> is <code>true</code> Default: utf-8 - - + @@ -10382,7 +11001,7 @@ - Session key to store the inputFormat in, to be able to set the outputformat when autoFormat=true. Can also be used to pass the value of an HTTP Accept header, to obtain a properly formatted response Default: Json2XmlValidator.inputFormat &lt;name of the pipe&gt; + Session key to store the inputFormat in, to be able to set the outputformat when autoFormat=true. Can also be used to pass the value of an HTTP Accept header, to obtain a properly formatted response Default: <code>Json2XmlValidator.inputFormat </code>&lt;name of the pipe&gt; @@ -10471,11 +11090,7 @@ - - - Characterset used for reading file, only used when <code>validateFile</code> is <code>true</code> Default: utf-8 - - + @@ -10723,7 +11338,7 @@ - + @@ -10883,7 +11498,7 @@ - + @@ -11212,12 +11827,12 @@ - Key of session variable to store auto-detected soapNamespace Default: If configured as Pipeline Input Wrapper or PipeLine Output Wrapper: soapNamespace + Key of session variable to store auto-detected soapNamespace Default: If configured as Pipeline Input Wrapper or PipeLine Output Wrapper: <code>soapNamespace</code> - Key of session variable to store soap header Default: If configured as Pipeline Input Wrapper and direction=<code>unwrap</code>: soapHeader + Key of session variable to store soap header Default: If configured as Pipeline Input Wrapper and direction=<code>unwrap</code>: <code>soapHeader</code> @@ -11290,6 +11905,11 @@ If true, the password is sent digested; Otherwise it is sent in clear text Default: true + + + For direction=<code>wrap</code> only: When false, adds an XML declaration to the output message. Default: true + + The functional name of this pipe. Can be referenced by the <code>path</code> attribute of a PipeForward. @@ -11428,7 +12048,7 @@ - + @@ -11735,10 +12355,14 @@ + - + + + + @@ -11757,7 +12381,7 @@ - + @@ -11808,7 +12432,7 @@ whatever it is configured to.</p> </p> <p><b>Notice:</b> the JmsListener is ONLY capable of processing - <code>javax.jms.TextMessage</code>s <br/><br/> + <code>jakarta.jms.TextMessage</code>s <br/><br/> </p> @@ -11821,6 +12445,622 @@ + + + + + + + + + + + + + + + + + + + + + + + Manager that decides the handlers based on the content of a field in the specified + position in a record. The fields in the record are separated by a separator. + The value of the specified field is taken as key in the flow-table. + + + + + + + + + + + + Manager that decides the handlers based on the content of a field in the specified + position in a record. The fields in the record are of a fixed length. + The data beween the start position and end position is taken as key in the flow-table. + + + + + + + + + + + + + + + + + + + + position of field that identifies the recordtype (position of first field is 1) + + + + + separator that separates the fields in the record + + + + + + + + + + + + + + + + + + + + + Name of the manager + + + + + This manager is the initial manager, i.e. to be used for the first record Default: false + + + + + + + + + + + + + + Start position of the field in the record that identifies the recordtype (first character is 0) Default: 0 + + + + + If endposition &gt;= 0 then this field contains the endPosition of the recordtype field in the record; All characters beyond this position are ignored. Else, if endPosition &lt; 0 then it depends on the length of the recordkey in the flow Default: -1 + + + + + + + + + + + + + + + + + + + + + + + + + Basic InputStreamReaderFactory. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Translate a record using an outputFields description. + + + The outputFields description can contain the following functions: + + <table border="1"> + <tr><td>string(value)</td><td>inserts the value between the braces</td><td>string( Dit wordt geinsert inclusief spaties ervoor en erna. )</td></tr> + <tr><td>align(value,size,align,fillchar)</td><td>inserts the value aligned</td><td>align(test~10~left~ )</td></tr> + <tr><td>fill(size,fillchar)</td><td>insert size fillchars</td><td>fill(2,0)</td></tr> + <tr><td>now(outformat)</td><td>inserts the current date</td><td>now(dd MMM yyyy)</td></tr> + <tr><td>incopy(fieldnr)</td><td>simply inserts the value of the field</td><td>incopy(2)</td></tr> + <tr><td>substr(fieldnr,startindex,endindex)</td><td>insert part of the value of the field</td><td>substr(2,0,8)</td></tr> + <tr><td>lookup(fieldnr,orgvval=newval,...)</td><td>replace original value using lookup table</td><td>lookup(3,Debit=+,Credit=-)</td></tr> + <tr><td>indate(fieldnr,informat,outformat)</td><td>inserts an input datefield using a different format</td><td>indate(2~MMddYY~dd MMM yyyy)</td></tr> + <tr><td>inalign(fieldnr,size,align,fillchar)</td><td>inserts an input field</td><td>inalign(3~5~left~0)</td></tr> + <tr><td>if(fieldnr,comparator,compareval)</td><td>only output the next fields if condition is true. Comparator is EQ (is equal to), NE (is not equal to), SW (starts with) or NS (not starts with). Use "{..|..|..}" for multiple compareValues</td><td>if(1,eq,3)</td></tr> + <tr><td>elseif(fieldnr,comparator,compareval)</td><td>only output the next fields if condition is true. Comparator is EQ, NE, SW or NS</td><td>elseif(1,ne,4)</td></tr> + <tr><td>endif()</td><td>endmarker for if</td><td>endif()</td></tr> + </table> + + + + + + + + + + + + Translate a record into XML, then send it using a sender. + + + + + + + + + + + + Encapsulates a record in XML, optionally translates it using XSLT or XPath. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + semicolon separated list of output record field specifications (see table below) + + + + + optional separator to add between the fields + + + + + + + + + + + + + + + + + comma separated list of numbers of those fields that are compared with the previous record to determine if a prefix must be written. if any of these fields is not equal in both records, the record types are assumed to be different + + + + + Name of the recordhandler + + + + + Comma separated specification of field lengths. if neither this attribute nor <code>inputSeparator</code> is specified then the entire record is parsed + + + + + Separator that separates the fields in the input record. If neither this attribute nor <code>inputFields</code> is specified then the entire record is parsed + + + + + If set to <code>true</code>, trailing spaces are removed from each field Default: false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + comma separated string with tagnames for the individual input fields (related using there positions). if you leave a tagname empty, the field is not xml-ized + + + + + Root tag for the generated xml document that will be send to the Sender Default: record + + + + + Name of stylesheet to transform an individual record + + + + + Alternatively: xpath-expression to create stylesheet from + + + + + Namespace defintions for xpathExpression. Must be in the form of a comma or space separated list of <code>prefix=namespaceuri</code>-definitions. One entry can be without a prefix, that will define the default namespace. + + + + + Only valid for <code>xpathExpression</code> Default: text + + + + + + + + Force the transformer generated from the xpath-expression to omit the xml declaration Default: true + + + + + String which ends the record and must be ignored + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ResultHandler that writes the transformed record to a BLOB. + + + + + + + + + + + + ResultHandler that writes the transformed record to a CLOB. + + + + + + + + + + + + Resulthandler that writes the transformed record to a file. + + + + + + + + + + + + Resulthandler that writes the transformed record to a String, that is passed to the next Pipe literally. + + + + + + + + + + + + ResultHandler that collects a number of records and sends them together to a sender. + + + + + + + + + + + + + + + + + + + + Column that contains the BLOB to be updated Default: 1 + + + + + controls whether blobdata is stored compressed in the database Default: true + + + + + Charset that is used to read and write BLOBs. This assumes the blob contains character data. + If blobCharset and blobSmartGet are not set, BLOBs are returned as bytes. Before version 7.6, blobs were base64 encoded after being read to accommodate for the fact that senders need to return a String. This is no longer the case + + + + + + + + + + + + + + + + The functional name of the object. + + + + + if set to <code>true</code>, this resultHandler is the default for all flows that do not have a handler specified Default: false + + + + + When set to <code>true</code>(default), every group of records, as indicated by RecordHandler.newRecordType, + is handled as a block. Default: true + + + + + + + + + The SQL query text + + + + + JNDI name of datasource to be used, can be configured via jmsRealm, too Default: <code>jdbc.datasource.default</code> + + + + + loads JNDI (and other) properties from a JmsRealm + + + + + + + + + + + string that is written before any data of results is written Default: &lt;document name=&quot;#name#&quot;&gt; + + + + + string that is written after all data of results is written Default: &lt;/document&gt; + + + + + string that is written before the start of each logical block, as defined in the flow Default: &lt;#name#&gt; + + + + + string that is written after the end of each logical block, as defined in the flow Default: &lt;/#name#&gt; + + + + + string that is replaced by name of block or name of stream in above strings Default: #name# + + + + + + + + + + + + + + + + Column that contains the CLOB to be updated Default: 1 + + + + + + + + + + + + + + + + Directory in which the resultfile must be stored + + + + + Directory to which the created file must be moved after finalization (is optional) + + + + + Name of the file is created using the messageformat. Params: 1=inputfilename, 2=extension of file, 3=current date + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -11829,15 +13069,13 @@ <p> Sample xml:<br/> - <pre><code> - &lt;adios rekenbox="L76HB150"&gt; - &lt;rubriek naam="BER_VERZ_CD" waarde="COMBIFLEX_BELEGGING" /&gt; - &lt;rubriek naam="INBR_CD" waarde="NIEUWE_VERZEKERING" /&gt; - &lt;rubriek naam="PENS_DT_BEP_CD" waarde="DT_UIT_PENS_LFT" /&gt; - &lt;rubriek nummer="313" naam="AS_OPSL_PRD_TRM_PRM" index="3" recordnr="74" record="VUT_VERZEKERING" waarde="52.34" /&gt; - ... - &lt;/adios&gt; - </code></pre> + <pre><code>&lt;adios rekenbox=&quot;L76HB150&quot;&gt; + &lt;rubriek naam=&quot;BER_VERZ_CD&quot; waarde=&quot;COMBIFLEX_BELEGGING&quot; /&gt; + &lt;rubriek naam=&quot;INBR_CD&quot; waarde=&quot;NIEUWE_VERZEKERING&quot; /&gt; + &lt;rubriek naam=&quot;PENS_DT_BEP_CD&quot; waarde=&quot;DT_UIT_PENS_LFT&quot; /&gt; + &lt;rubriek nummer=&quot;313&quot; naam=&quot;AS_OPSL_PRD_TRM_PRM&quot; index=&quot;3&quot; recordnr=&quot;74&quot; record=&quot;VUT_VERZEKERING&quot; waarde=&quot;52.34&quot; /&gt; + ... + &lt;/adios&gt;</code></pre> <br/> For input, a 'naam' or a 'nummer'-attribute must be specified. If both are specified, their match is checked. On output, 'nummer', 'naam' and 'waarde'-attributes are always present in each rubriek-element. @@ -11949,6 +13187,26 @@ + + + Pipe for transforming a (batch)file with records. Records in the file must be separated + with new line characters. + You can use the &lt;child&gt; tag to register RecordHandlers, RecordHandlerManagers, ResultHandlers + and RecordHandlingFlow elements. This is deprecated, however. Since 4.7 one should use &lt;manager&gt;, + &lt;recordHandler&gt;, &lt;resultHandler&gt; and &lt;flow&gt; + + For files containing only a single type of lines, a simpler configuration without managers and flows + can be specified. A single recordHandler with key="*" and (optional) a single resultHandler need to be specified. + Each line will be handled by this recordHandler and resultHandler. + + + + + + + + + Pipe that iterates over the lines in a BLOB. @@ -12140,38 +13398,33 @@ Pipe that reads a CRL from an input stream and transforms it to an XML. - The steam is closed after reading. + The stream is closed after reading. Example configuration: - <pre><code> - &lt;pipe - name="Read issuer" - className="org.frankframework.pipes.FilePipe" - actions="read" - fileName="dir/issuer.cer" - preserveInput="true" - outputType="stream" - storeResultInSessionKey="issuer" - &gt; - &lt;forward name="success" path="Read CRL" /&gt; - &lt;/pipe&gt; - &lt;pipe - name="Read CRL" - className="org.frankframework.pipes.FilePipe" - actions="read" - fileName="dir/CRL.crl" - outputType="stream" - &gt; - &lt;forward name="success" path="Transform CRL" /&gt; - &lt;/pipe&gt; - &lt;pipe - name="Transform CRL" - className="org.frankframework.pipes.CrlPipe" - issuerSessionKey="issuer" - &gt; - &lt;forward name="success" path="EXIT" /&gt; - &lt;/pipe&gt; - </code></pre> + <pre><code>&lt;pipe name=&quot;Read input CSV file&quot; + className=&quot;org.frankframework.pipes.FixedResultPipe&quot;&gt; + &lt;param name=&quot;filename&quot; sessionKey=&quot;filePathName&quot;/&gt; + &lt;forward name=&quot;success&quot; path=&quot;Process each Line&quot; /&gt; + &lt;/pipe&gt; + &lt;pipe + name=&quot;Read issuer&quot; + className=&quot;org.frankframework.pipes.FixedResultPipe&quot; + filename=&quot;dir/issuer.cer&quot; + storeResultInSessionKey=&quot;issuer&quot;&gt; + &lt;forward name=&quot;success&quot; path=&quot;Read CRL&quot; /&gt; + &lt;/pipe&gt; + &lt;pipe + name=&quot;Read CRL&quot; + className=&quot;org.frankframework.pipes.FixedResultPipe&quot; + fileName=&quot;dir/CRL.crl&quot;&gt; + &lt;forward name=&quot;success&quot; path=&quot;Transform CRL&quot; /&gt; + &lt;/pipe&gt; + &lt;pipe + name=&quot;Transform CRL&quot; + className=&quot;org.frankframework.pipes.CrlPipe&quot; + issuerSessionKey=&quot;issuer&quot;&gt; + &lt;forward name=&quot;success&quot; path=&quot;EXIT&quot; /&gt; + &lt;/pipe&gt;</code></pre> @@ -12193,6 +13446,43 @@ + + + <p> + Using <code>.jsonnet</code> transformation files, the DataSonnetPipe uses JSonnet at it's core to transform files + from and to different file formats specified by supported outputTypes. + </p> + <p> + The pipe input message will be set to the JSON object called <code>payload</code>. + It's required for the input message to have a correct MimeType, else the text will be interpreted as a String. + </p> + <p> + Input message (JSON) format: + <pre><code>{ + &quot;userId&quot; : &quot;123&quot;, + &quot;name&quot; : &quot;DataSonnet&quot; + }</code></pre> + + Jsonnet stylesheet: + <pre><code>{ + &quot;uid&quot;: payload.userId, + &quot;uname&quot;: payload.name, + }</code></pre> + Produces the following JSON output: + <pre><code>{ + &quot;uid&quot;: &quot;123&quot;, + &quot;uname&quot;: &quot;DataSonnet&quot; + }</code></pre> + </p> + + + + + + + + + Pipe that sleeps for a specified time, which defaults to 5000 msecs. @@ -12499,8 +13789,133 @@ - Produces a fixed result that does not depend on the input message. It may return the contents of a file - when <code>filename</code> or <code>filenameSessionKey</code> is specified. Otherwise the + This Pipe opens and returns a file from the classpath. The filename is a mandatory parameter to use. You can + provide this by using the <code>filename</code> attribute or with a <code>param</code> element to be able to + use a sessionKey for instance. + + <h2>Migrating from deprecated features</h2> + The FixedResultPipe was a jack of all trades. You could use it to read a file (only text) and/or use + a 'resultString' to find / replace values in. The following migrations are available: + + <h3>For using a 'resultString'</h3> + You can use the EchoPipe for a static value. This looked like this before: + + <pre> + <code>&lt;pipe name=&quot;HelloWorld&quot; className=&quot;org.frankframework.pipes.FixedResult&quot; returnString=&quot;Hello World&quot;&gt; + &lt;forward name=&quot;success&quot; path=&quot;EXIT&quot;/&gt; + &lt;/pipe&gt;</code> + </pre> + Becomes: + <pre> + <code>&lt;pipe name=&quot;HelloWorld&quot; className=&quot;org.frankframework.pipes.EchoPipe&quot; getInputFromFixedValue=&quot;Hello World&quot;&gt; + &lt;forward name=&quot;success&quot; path=&quot;EXIT&quot;/&gt; + &lt;/pipe&gt;</code> + </pre> + + <h3>For replacing a value</h3> + You can use the ReplacerPipe to replace a value in multiple ways. First, when you need to replace a placeholder with a parameter. + This looked like: + <pre> + <code>&lt;pipe name=&quot;make unique message&quot; className=&quot;org.frankframework.pipes.FixedResultPipe&quot; + returnString=&quot;&amp;lt;msg mid=&amp;quot;MID&amp;quot; action=&amp;quot;ACTION&amp;quot; /&amp;gt;&quot; replaceFixedParams=&quot;true&quot;&gt; + &lt;param name=&quot;MID&quot; sessionKey=&quot;mid&quot; /&gt; + &lt;param name=&quot;ACTION&quot; xpathExpression=&quot;request/@action&quot; /&gt; + &lt;/pipe&gt;</code> + </pre> + + And can now be written like this (note the ?{..} syntax): + <pre> + <code>&lt;pipe name=&quot;make unique message&quot; className=&quot;org.frankframework.pipes.ReplacerPipe&quot; + getInputFromFixedValue=&quot;&amp;lt;msg mid=&amp;quot;?{MID}&amp;quot; action=&amp;quot;?{ACTION}&amp;quot; /&amp;gt;&quot;&gt; + &lt;param name=&quot;MID&quot; sessionKey=&quot;mid&quot; /&gt; + &lt;param name=&quot;ACTION&quot; xpathExpression=&quot;request/@action&quot; /&gt; + &lt;/pipe&gt;</code> + </pre> + + When you need to replace a fixed value use the ReplacerPipe with find and replace. This looked like this: + <pre> + <code>&lt;FixedResultPipe name=&quot;InputValidateError&quot; + filename=&quot;ManageFileSystem/xml/ErrorMessage.xml&quot; + replaceFrom=&quot;%reasonCode&quot; replaceTo=&quot;NOT_WELL_FORMED_XML&quot;&gt; + &lt;forward name=&quot;success&quot; path=&quot;EXIT&quot; /&gt; + &lt;/FixedResultPipe&gt;</code> + </pre> + + And now should be solved like this: + <pre> + <code>&lt;FixedResultPipe name=&quot;InputValidateError&quot; + filename=&quot;ManageFileSystem/xml/ErrorMessage.xml&quot;&gt; + &lt;forward name=&quot;success&quot; path=&quot;replaceReasonCode&quot; /&gt; + &lt;/FixedResultPipe&gt; + &lt;ReplacerPipe name=&quot;replaceReasonCode&quot; + find=&quot;%reasonCode&quot; + replace=&quot;NOT_WELL_FORMED_XML&quot;&gt; + &lt;forward name=&quot;success&quot; path=&quot;EXIT&quot; /&gt; + &lt;/ReplacerPipe&gt;</code> + </pre> + This is also an example of now using two pipes to achieve the same result. Each pipe has its own responsibility. + + <h2>More complex configurations</h2> + In some cases, a combination of the above is needed to achieve what worked before. In some cases, FixedResultPipe + was also used to store information in the session. For example, a port of configuration in the JMS listener sender configuration looked like this: + <pre> + <code>&lt;CompareStringPipe name=&quot;compareIdAndCid&quot; &gt; + &lt;param name=&quot;operand1&quot; sessionKey=&quot;id&quot;/&gt; + &lt;param name=&quot;operand2&quot; sessionKey=&quot;cid&quot;/&gt; + &lt;forward name=&quot;equals&quot; path=&quot;IdAndCidSame&quot; /&gt; + &lt;forward name=&quot;lessthan&quot; path=&quot;IdAndCidDifferent&quot; /&gt; + &lt;forward name=&quot;greaterthan&quot; path=&quot;IdAndCidDifferent&quot; /&gt; + &lt;/CompareStringPipe&gt; + &lt;FixedResultPipe name=&quot;IdAndCidSame&quot; returnString=&quot;true&quot; storeResultInSessionKey=&quot;IdAndCidSame&quot;&gt; + &lt;forward name=&quot;success&quot; path=&quot;displayKeys&quot; /&gt; + &lt;/FixedResultPipe&gt; + &lt;FixedResultPipe name=&quot;IdAndCidDifferent&quot; returnString=&quot;false&quot; storeResultInSessionKey=&quot;IdAndCidSame&quot;&gt; + &lt;forward name=&quot;success&quot; path=&quot;displayKeys&quot; /&gt; + &lt;/FixedResultPipe&gt; + + &lt;pipe name=&quot;displayKeys&quot; className=&quot;org.frankframework.pipes.FixedResultPipe&quot; + returnString=&quot;branch [BRANCH] Orignal Id [MID] cid [CID] id=cid [SAME]&quot; replaceFixedParams=&quot;true&quot;&gt; + &lt;param name=&quot;BRANCH&quot; sessionKey=&quot;originalMessage&quot; xpathExpression=&quot;*&amp;#47;@branch&quot; /&gt; + &lt;param name=&quot;MID&quot; sessionKey=&quot;id&quot; /&gt; + &lt;param name=&quot;CID&quot; sessionKey=&quot;cid&quot; /&gt; + &lt;param name=&quot;SAME&quot; sessionKey=&quot;IdAndCidSame&quot; /&gt; + &lt;forward name=&quot;success&quot; path=&quot;EXIT&quot; /&gt; + &lt;/pipe&gt;</code> + </pre> + + Was rewritten to the following: + <pre> + <code>&lt;CompareStringPipe name=&quot;compareIdAndCid&quot; &gt; + &lt;param name=&quot;operand1&quot; sessionKey=&quot;id&quot;/&gt; + &lt;param name=&quot;operand2&quot; sessionKey=&quot;cid&quot;/&gt; + &lt;forward name=&quot;equals&quot; path=&quot;IdAndCidSame&quot; /&gt; + &lt;forward name=&quot;lessthan&quot; path=&quot;IdAndCidDifferent&quot; /&gt; + &lt;forward name=&quot;greaterthan&quot; path=&quot;IdAndCidDifferent&quot; /&gt; + &lt;/CompareStringPipe&gt; + + &lt;PutInSessionPipe name=&quot;IdAndCidSame&quot; value=&quot;true&quot; sessionKey=&quot;IdAndCidSame&quot;&gt; + &lt;forward name=&quot;success&quot; path=&quot;putOriginalMessageInSession&quot; /&gt; + &lt;/PutInSessionPipe&gt; + &lt;PutInSessionPipe name=&quot;IdAndCidDifferent&quot; value=&quot;false&quot; sessionKey=&quot;IdAndCidSame&quot;&gt; + &lt;forward name=&quot;success&quot; path=&quot;putOriginalMessageInSession&quot; /&gt; + &lt;/PutInSessionPipe&gt; + + &lt;PutInSessionPipe name=&quot;putOriginalMessageInSession&quot; sessionKey=&quot;incomingMessage&quot;/&gt; + + &lt;pipe name=&quot;displayKeys&quot; className=&quot;org.frankframework.pipes.ReplacerPipe&quot; + getInputFromFixedValue=&quot;branch [?{BRANCH}] Original Id [?{MID}] cid [?{CID}] id=cid [?{SAME}]&quot;&gt; + &lt;param name=&quot;BRANCH&quot; sessionKey=&quot;originalMessage&quot; xpathExpression=&quot;*&amp;#47;@branch&quot; /&gt; + &lt;param name=&quot;MID&quot; sessionKey=&quot;id&quot; /&gt; + &lt;param name=&quot;CID&quot; sessionKey=&quot;cid&quot; /&gt; + &lt;param name=&quot;SAME&quot; sessionKey=&quot;IdAndCidSame&quot; /&gt; + &lt;forward name=&quot;success&quot; path=&quot;EXIT&quot; /&gt; + &lt;/pipe&gt;</code> + </pre> + <p> + + <h2>The features/documentation of the deprecated features</h2> + Produces a fixed result that does not depend on the input message. It may return the contents of a file + when <code>filename</code> or <code>filenameSessionKey</code> is specified. Otherwise, the value of attribute <code>returnString</code> is returned. <br/><br/> Using parameters and the attributes of this pipe, it is possible to substitute values. This pipe @@ -12508,11 +13923,13 @@ <ol> <li>During execution, this pipe first obtains a string based on attributes <code>returnString</code>, <code>filename</code> or <code>filenameSessionKey</code>.</li> <li>The resulting string is transformed according to attributes <code>replaceFrom</code> and <code>replaceTo</code> if set. - Please note that the plain value of attribute <code>replaceFrom</code> is matched, no <code>${...}</code> here.</li> + Please note that the plain value of attribute <code>replaceFrom</code> is matched, no <code>?{...}</code> here.</li> + <li>The resulting string is substituted based on the parameters of this pipe. This step depends on attribute <code>replaceFixedParams</code>. Assume that there is a parameter with name <code>xyz</code>. If <code>replaceFixedParams</code> is <code>false</code>, then - each occurrence of <code>${xyz}</code> is replaced by the parameter's value. Otherwise, the text <code>xyz</code> + each occurrence of <code>?{xyz}</code> is replaced by the parameter's value. Otherwise, the text <code>xyz</code> is substituted. See Parameter to see how parameter values are determined.</li> + <li>If attribute <code>substituteVars</code> is <code>true</code>, then expressions <code>${...}</code> are substituted using system properties, pipelinesession variables and application properties. Please note that no <code>${...}</code> patterns are left if the initial string came from attribute <code>returnString</code>, because @@ -12646,19 +14063,6 @@ - - - Selects an exitState, based on the content-type of a httpServletRequest - object as input. - - - - - - - - - Pipe that increases the integer value of a session variable. @@ -12784,28 +14188,26 @@ Transforms between ascii and an XML representation. <p> - Sample xml:<br/><code><pre> - &lt;CALCBOXMESSAGE&gt; - &lt;OPDRACHT&gt; - &lt;OPDRACHTSOORT&gt;ONTTREK_RISICO_EN_KOSTEN&lt;/OPDRACHTSOORT&gt; - &lt;BASISRENDEMENTSOORT&gt;NVT&lt;/BASISRENDEMENTSOORT&gt; - &lt;BEDRAG&gt;625&lt;/BEDRAG&gt; - &lt;DATUM&gt;20071201&lt;/DATUM&gt; - - ... - &lt;/CALCBOXMESSAGE&gt; - </pre></code> <br/> + Sample xml:<br/> + <pre><code>&lt;CALCBOXMESSAGE&gt; + &lt;OPDRACHT&gt; + &lt;OPDRACHTSOORT&gt;ONTTREK_RISICO_EN_KOSTEN&lt;/OPDRACHTSOORT&gt; + &lt;BASISRENDEMENTSOORT&gt;NVT&lt;/BASISRENDEMENTSOORT&gt; + &lt;BEDRAG&gt;625&lt;/BEDRAG&gt; + &lt;DATUM&gt;20071201&lt;/DATUM&gt; + ... + &lt;/CALCBOXMESSAGE&gt;</code></pre> + <br/> - Sample ascii:<br/><code><pre> - OPDRACHT : #SAMENGESTELD + Sample ascii:<br/> + <pre><code>OPDRACHT : #SAMENGESTELD OPDRACHT.OPDRACHTSOORT :ONTTREK_RISICO_EN_KOSTEN OPDRACHT.BASISRENDEMENTSOORT :NVT OPDRACHT.BEDRAG :625 OPDRACHT.DATUM :20071201 ... - EINDEREKENVERZOEK :EINDE - </pre></code> + EINDEREKENVERZOEK :EINDE</code></pre> </p> <p><b>Configuration:</b> @@ -12897,6 +14299,21 @@ + + Pipe to work with the server local filesystem. + <p> + In addition to regular parameters for filesystem senders, it is possible + to set custom extended attributes on files by prefixing parameter names with + <code>FileAttribute.</code>. + This prefix will be not be part of the actual metadata property name. + </p> + <p> + The string value of these parameters will be used as value of the custom metadata attribute. + </p> + <p> + If extended attributes actually can be written depends on the underlying OS / filesystem. + </p> + @@ -12922,22 +14339,22 @@ Pipe that sends a mail-message using a MailSender as its sender. <br/> - Sample email.xml:<br/><code><pre> - &lt;email&gt; - &lt;recipients&gt; - &lt;recipient&gt;***@natned&lt;/recipient&gt; - &lt;recipient&gt;***@nn.nl&lt;/recipient&gt; - &lt;/recipients&gt; - &lt;from&gt;***@nn.nl&lt;/from&gt; - &lt;subject&gt;this is the subject&lt;/subject&gt; - &lt;message&gt;dit is de message&lt;/message&gt; - &lt;/email&gt; - </pre></code> <br/> + Sample email.xml:<br/> + <pre><code>&lt;email&gt; + &lt;recipients&gt; + &lt;recipient&gt;***@natned&lt;/recipient&gt; + &lt;recipient&gt;***@nn.nl&lt;/recipient&gt; + &lt;/recipients&gt; + &lt;from&gt;***@nn.nl&lt;/from&gt; + &lt;subject&gt;this is the subject&lt;/subject&gt; + &lt;message&gt;dit is de message&lt;/message&gt; + &lt;/email&gt;</code></pre> + <br/> Notice: it must be valid XML. Therefore, especially the message element must be plain text or be wrapped as CDATA.<br/><br/> - example:<br/><code><pre> - &lt;message&gt;&lt;![CDATA[&lt;h1&gt;This is a HtmlMessage&lt;/h1&gt;]]&gt;&lt;/message&gt; - </pre></code><br/> + example:<br/> + <pre><code>&lt;message&gt;&lt;![CDATA[&lt;h1&gt;This is a HtmlMessage&lt;/h1&gt;]]&gt;&lt;/message&gt;</code></pre> + <br/> @@ -12984,7 +14401,7 @@ - Returns random password. + Generates a random password. @@ -13101,8 +14518,18 @@ - Replaces all occurrences of one string with another. - Optionally strips or replaces XML non-printable characters. + This Pipe is used to replace values in a few ways. The following steps are performed: + <ol> + <li>If <code>find</code> is provided, it will be replaced by <code>replace</code></li> + <li>The resulting string is substituted based on the parameters of this pipe. It will replace values in the input enclosed + with ?{}, for instance: ?{parameterOne}, with parameters of this pipe. If a parameter for the given value is not found, it + will not be replaced and the '?{parameterOne}' value will remain in the output. + <p> + See Parameter to see how parameter values are determined.</li> + <p> + <li>If attribute <code>substituteVars</code> is <code>true</code>, then expressions <code>${...}</code> are substituted using + system properties, session variables and application properties. Please note that no <code>${...}</code> patterns are left in the input. </li> + </ol> @@ -13239,7 +14666,7 @@ - Skip a number of bytes or characters from the input. + Skip a number of bytes or characters from the input message. @@ -13307,6 +14734,22 @@ + + + Pipe for transforming a stream with records. Records in the stream must be separated with new line characters. + + For file containing only a single type of lines, a simpler configuration without managers and flows + can be specified. A single recordHandler with key="*" and (optional) a single resultHandler need to be specified. + Each line will be handled by this recordHandler and resultHandler. + + + + + + + + + Pipe for converting TEXT to XML. @@ -13439,7 +14882,7 @@ - Selects an forward, based on XPath evaluation + Selects a forward, based on XPath evaluation @@ -13585,7 +15028,8 @@ - Charset to be used to encode the given input string Default: UTF-8 + Charset to be used to read the input message. + Defaults to the message's known charset or UTF-8 when unknown. @@ -13640,6 +15084,82 @@ + + + + + + + + + Directory in which the transformed file(s) is stored + + + + + Directory to which the inputfile is moved in case an error occurs + + + + + Number of copies held of a file with the same name. Backup files have a dot and a number suffixed to their name. If set to 0, no backups will be kept. Default: 5 + + + + + If set <code>true</code>, the destination file will be deleted if it already exists Default: false + + + + + If set <code>true</code>, the file processed will be deleted after being processed, and not stored Default: false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + If set <code>true</code> the original block is stored under the session key <code>originalBlock</code>. Default: false + + + + + If set to <code>false</code>, the inputstream is not closed after it has been used. Default: true + + + + + Characterset used for reading file or inputstream" Default: UTF-8 + + + + + + + @@ -13667,7 +15187,11 @@ Alternatively: xpath-expression to create stylesheet from - + + + Namespace defintions for xpathExpression. Must be in the form of a comma or space separated list of <code>prefix=namespaceuri</code>-definitions. For some use other cases (NOT xpathExpression), one entry can be without a prefix, that will define the default namespace. + + Only valid for xpathexpression Default: text @@ -13896,12 +15420,12 @@ - JNDI name of datasource to be used, can be configured via jmsRealm, too Default: jdbc.datasource.default + JNDI name of datasource to be used, can be configured via jmsRealm, too Default: <code>jdbc.datasource.default</code> - Named parameters will be auto-detected by default. Every string in the query which equals <code>?{paramname}</code> will be replaced by the value of the corresponding parameter. The parameters don't need to be in the correct order and unused parameters are skipped. + Named parameters will be auto-detected by default. Every string in the query which equals <code><code>?{</code>paramname<code>}</code></code> will be replaced by the value of the corresponding parameter. The parameters don't need to be in the correct order and unused parameters are skipped. @@ -14004,7 +15528,11 @@ Alternatively: xpath-expression to create stylesheet from - + + + Namespace defintions for xpathExpression. Must be in the form of a comma or space separated list of <code>prefix=namespaceuri</code>-definitions. For some use other cases (NOT xpathExpression), one entry can be without a prefix, that will define the default namespace. + + Only valid for xpathexpression Default: text @@ -14096,29 +15624,14 @@ if <code>true</code> the pipe compresses, otherwise it decompress Default: false - - - required if result is a file, the pattern for the result filename. Can be set with variables e.g. {file}.{ext}.zip in this example the {file} and {ext} variables are resolved with sessionKeys with the same name - - flag indicates whether the message is the content or the path to a file with the contents. for multiple files use ';' as delimiter Default: false - - - required if result is a file, the directory in which to store the result file - - - flag indicates whether the result must be written to the message or to a file (filename = message) Default: false - - - - - the pattern for the zipentry name in case a zipfile is read or written + flag indicates whether the result must be written to the message or to a file (filename = message) Default: true when outputDirectory is not set. @@ -14213,11 +15726,42 @@ Format the XML output in easy legible way + + + Enables the ASCII <code>(RS) Record Separator</code> and <code>(US) Unit Separator</code> Control Code field delimiters. + May not be used in combination with attribute <code>fieldSeparator</code>. + See <a href="https://en.wikipedia.org/wiki/C0_and_C1_control_codes#Field_separators">WIKI Control Codes</a>. + + + + + + + + + + + Location of stylesheet to apply to the input message + + + + + Output file format, DataSonnet is semi-capable of converting the converted JSON to a different format. + + + + + + + + + + @@ -14345,47 +15889,11 @@ - - - Should values between ${ and } be resolved. If true, the search order of replacement values is: - system properties (1), pipelinesession variables (2), application properties (3). Default: false - - Name of the file containing the result message. - - - Name of the session key containing the file name of the file containing the result message. - - - - - Returned message. - - - - - If set, every occurrence of this attribute's value is replaced by the value of <code>replaceTo</code>. - - - - - See <code>replaceFrom</code>. - - - - - File name of XSLT stylesheet to apply. - - - - - When set <code>true</code>, parameter replacement matches <code>name-of-parameter</code>, not <code>${name-of-parameter}</code> Default: false - - @@ -14528,6 +16036,11 @@ + + + Location to a <code>jndi.properties</code> file for additional EMS (SSL) properties + + @@ -14575,19 +16088,6 @@ - - - - - - - - - - - - - @@ -14633,7 +16133,7 @@ - forward returned when <code>'true'</code> Default: then + forward returned when <code>true</code> Default: then @@ -14699,7 +16199,7 @@ - Namespace definitions for xpathExpression. Must be in the form of a comma or space separated list of <code>prefix=namespaceuri</code>-definitions Default: j=http://www.w3.org/2013/XSL/json + Namespace definitions for xpathExpression. Must be in the form of a comma or space separated list of <code>prefix=namespaceuri</code> definitions Default: j=http://www.w3.org/2013/XSL/json @@ -14969,10 +16469,13 @@ The scenario sub directory to execute - + the larva log level: one of [debug], [pipeline messages prepared for diff], [pipeline messages], [wrong pipeline messages prepared for diff], [wrong pipeline messages], [step passed/failed], [scenario passed/failed], [scenario failed], [totals], [error] Default: wrong pipeline messages + + + @@ -15102,7 +16605,13 @@ - the folder that serves as the root of this virtual filesystem + Path to the folder that serves as the root of this virtual filesystem. All specifications of folders or files are relative to this root. + When the root is left unspecified, absolute paths to files and folders can be used + + + + + Whether the LocalFileSystem tries to create the root folder if it doesn't exist yet. Default: false @@ -15113,7 +16622,7 @@ - If parameter [action] is set, then the attribute action value will be overridden with the value of the parameter. + If parameter [<code>action</code>] is set, then the attribute action value will be overridden with the value of the parameter. @@ -15121,52 +16630,52 @@ - Filename to operate on. If not set, the parameter filename is used. If that is not set either, the input is used + Filename to operate on. If not set, the parameter <code>filename</code> is used. If that is not set either, the input is used - Destination for move, copy or rename. If not set, the parameter destination is used. If that is not set either, the input is used + Destination for <code>move</code>, <code>copy</code> or <code>rename</code>. If not set, the parameter <code>destination</code> is used. If that is not set either, the input is used - Folder that is scanned for files when action=list. When not set, the root is scanned + Folder that is scanned for files when action=<code>list</code>. When not set, the root is scanned - If set <code>true</code>, the folder to create, write, move or copy the file to is created if it does not exist Default: false + If <code>true</code>: if a non-existing folder is part of the fileName, it will be created. Default: false - If set <code>true</code>, for actions create, write, move, copy or rename, the destination file is overwritten if it already exists Default: false + If set <code>true</code>, for actions <code>create</code>, <code>write</code>, <code>move</code>, <code>copy</code> or <code>rename</code>, the destination file is overwritten if it already exists Default: false - For action=append: If set to a positive number, the file is rotated each day, and this number of files is kept. The inputFolder must point to the directory where the file resides Default: 0 + For action=<code>append</code>: If set to a positive number, the file is rotated each day, and this number of files is kept. The inputFolder must point to the directory where the file resides Default: 0 - For action=append: If set to a positive number, the file is rotated when it has reached the specified size, and the number of files specified in numberOfBackups is kept. Size is specified in plain bytes, suffixes like 'K', 'M' or 'G' are not recognized. The inputFolder must point to the directory where the file resides Default: 0 + For action=<code>append</code>: If set to a positive number, the file is rotated when it has reached the specified size, and the number of files specified in numberOfBackups is kept. Size is specified in plain bytes, suffixes like 'K', 'M' or 'G' are not recognized. The inputFolder must point to the directory where the file resides Default: 0 - For the actions write and append, with rotateSize>0: the number of backup files that is kept. The inputFolder must point to the directory where the file resides Default: 0 + For the actions <code>write</code> and <code>append</code>, with rotateSize>0: the number of backup files that is kept. The inputFolder must point to the directory where the file resides Default: 0 - Filter of files to look for in inputFolder e.g. '*.inp'. Works with actions move, copy, delete and list + Filter of files to look for in inputFolder e.g. '*.inp'. Works with actions <code>move</code>, <code>copy</code>, <code>delete</code> and <code>list</code> - Filter of files to be excluded when looking in inputFolder. Works with actions move, copy, delete and list + Filter of files to be excluded when looking in inputFolder. Works with actions <code>move</code>, <code>copy</code>, <code>delete</code> and <code>list</code> @@ -15176,17 +16685,17 @@ - If set to <code>true</code> then the system specific line separator will be appended to the file after executing the action. Works with actions write and append Default: false + If set to <code>true</code> then the system specific line separator will be appended to the file after executing the action. Works with actions <code>write</code> and <code>append</code> Default: false - Charset to be used for read and write action + Charset to be used for <code>read</code> and <code>write</code> action - If set to true then the folder will be deleted if it is empty after processing the action. Works with actions delete, readDelete and move + If set to true then the folder will be deleted if it is empty after processing the action. Works with actions <code>delete</code>, <code>readDelete</code> and <code>move</code> @@ -15197,6 +16706,14 @@ + + + Filter for action <code>list</code>. Specify <code>FILES_ONLY</code>, <code>FOLDERS_ONLY</code> or <code>FILES_AND_FOLDERS</code>. Default: FILES_ONLY + + + + + @@ -15215,7 +16732,7 @@ - If set {@code true} the pipe will never forward to the {@code ExceptionForward} even if an error occurred during execution. Default: false + If set <code>true</code> the pipe will never forward to the <code>ExceptionForward</code> even if an error occurred during execution. Default: false @@ -15300,49 +16817,44 @@ - - - whether the securerandom algorithm is to be used (slower) Default: true - - - the lowercase characters to use Default: ('a'..'z') + The lowercase characters to use. Default: ('a'..'z') - the uppercase characters to use Default: ('A'..'Z') + The uppercase characters to use. Default: ('A'..'Z') - the numbers to use Default: ('0'..'9') + The numbers to use. Default: ('0'..'9') - the signs to use Default: (;:_%$#@!&gt;&lt;) + The signs to use. Default: (;:_%$#@!&gt;&lt;) - the number of lowercase characters in the generated password Default: 2 + The number of lowercase characters in the generated password. Default: 2 - the number of digits in the generated password Default: 2 + The number of digits in the generated password. Default: 2 - the number of sign characters in the generated password Default: 2 + The number of sign characters in the generated password. Default: 2 - the number of uppercase characters in the generated password Default: 2 + The number of uppercase characters in the generated password. Default: 2 @@ -15395,18 +16907,18 @@ <p> Conversion result files are stored as messages in the session, under keys numbered based - on the value set here. If #isSaveSeparate() is {@code false} then only the main - document is stored in the session, if it is {@code true} then each attachment is stored + on the value set here. If #isSaveSeparate() is <code>false</code> then only the main + document is stored in the session, if it is <code>true</code> then each attachment is stored separately. </p> <p> For example, if a file is converted that has 2 attachments and #setSaveSeparate(boolean) - is set to {@code true} then there will be the following 3 session keys (assuming the default value + is set to <code>true</code> then there will be the following 3 session keys (assuming the default value is unchanged): <ol> - <li>{@code pdfConversionResultFiles1}</li> - <li>{@code pdfConversionResultFiles2}</li> - <li>{@code pdfConversionResultFiles3}</li> + <li><code>pdfConversionResultFiles1</code></li> + <li><code>pdfConversionResultFiles2</code></li> + <li><code>pdfConversionResultFiles3</code></li> </ol> Each session key will contain a FileMessage referencing the contents of that PDF. </p> Default: pdfConversionResultFiles @@ -15498,7 +17010,7 @@ Set to a time <i>in milliseconds</i> to create a value that is different to the previous returned value by a PutSystemDateInSession pipe in - this virtual machine or <code>-1 to disable</code>. The thread will sleep for the specified time before recalculating a new value. Set the + this virtual machine or <code>-1</code> to disable. The thread will sleep for the specified time before recalculating a new value. Set the timezone to a value without Daylight Saving Time (like GMT+1) to prevent this pipe to generate two equal value's when the clock is set back. <b>note:</b> When you're looking for a GUID parameter for your XSLT it might be better to use &lt;param name=&quot;guid&quot; pattern=&quot;{hostname}_{uid}&quot;/&gt;, see Parameter. Default: -1 @@ -15506,7 +17018,7 @@ - If <code>true</code>, the date/time returned will always be 2001-12-17 09:30:47 (for testing purposes only). It is overridden by the value of the pipelinesession key <code>stub4testtool.fixeddate</code> when it exists Default: false + If <code>true</code>, the date/time returned will always be <code>2001-12-17 09:30:47</code> (for testing purposes only). It is overridden by the value of the pipelinesession key <code>stub4testtool.fixeddate</code> when it exists Default: false @@ -15658,7 +17170,7 @@ Sets the string that will replace each of the occurrences of the find-string. Newlines can be represented - * by the #setLineSeparatorSymbol(String). + * by the #setLineSeparatorSymbol(String). @@ -15669,11 +17181,11 @@ Replace all characters that are non-printable according to the XML specification with - the value specified in #setReplaceNonXmlChar(String). + the value specified in #setNonXmlReplacementCharacter(String). <p> - <b>NB:</b> This will only replace or remove characters considered non-printable. This - will not check if a given character is valid in the particular way it is used. Thus it will - not remove or replace, for instance, a single {@code '&'} character. + <b>NB:</b> This will only replace or remove characters considered non-printable. This + will not check if a given character is valid in the particular way it is used. Thus it will + not remove or replace, for instance, a single <code>'&amp;'</code> character. </p> <p> See also: @@ -15684,9 +17196,9 @@ </p> Default: false - + - character that will replace each non valid xml character (empty string is also possible) (use &amp;#x00bf; for inverted question mark) Default: empty string + character that will replace each non-valid xml character (empty string is also possible) (use &amp;#x00bf; for inverted question mark) Default: empty string @@ -15694,6 +17206,11 @@ Whether to allow Unicode supplementary characters (like a smiley) during replaceNonValidXmlCharacters Default: false + + + Should properties (values between <code>${</code> and <code>}</code>) be resolved. Default: false + + @@ -15913,6 +17430,11 @@ If empty then derived from queueName (if $messagingLayer='P2P' then '$applicationFunction' else '$operationName_$operationVersion) + + + Location to a <code>jndi.properties</code> file for additional EMS (SSL) properties + + @@ -16030,7 +17552,7 @@ - Number of bytes (for binary input) or characters (for character input) to skip. An empty byte array or string is returned when skip is larger then the length of the input Default: 0 + Number of bytes (for binary input) or characters (for character input) to skip. An empty byte array or string is returned when skip is larger than the length of the input. Default: 0 @@ -16288,17 +17810,17 @@ - a string to compare the result of the xpathexpression (or the input-message itself) to. if not specified, a non-empty result leads to the 'then'-forward, an empty result to 'else'-forward + a string to compare the result of the xpathExpression (or the input-message itself) to. If not specified, a non-empty result leads to the 'then'-forward, an empty result to 'else'-forward - forward returned when <code>'true'</code> Default: then + forward returned when output is <code>true</code> Default: then - forward returned when 'false' Default: else + forward returned when output is <code>false</code> Default: else @@ -16308,7 +17830,8 @@ - regular expression to be applied to the input-message (ignored if xpathexpression is specified). the input-message matching the given regular expression leads to the 'then'-forward + Regular expression to be applied to the input-message (ignored if <code>xpathExpression</code> is specified). + The input-message <b>fully</b> matching the given regular expression leads to the 'then'-forward @@ -16318,7 +17841,7 @@ - namespace defintions for xpathExpression. Must be in the form of a comma or space separated list of <code>prefix=namespaceuri</code>-definitions. + namespace definitions for xpathExpression. Must be in the form of a comma or space separated list of <code>prefix=namespaceuri</code> definitions. @@ -16413,11 +17936,6 @@ Charset used when reading the contents of the entry (only used if streamingContents=false) Default: utf-8 - - - If set to <code>true</code>, a possible bytes order mark (BOM) at the start of the file is skipped (only used for encoding uft-8) Default: false - - @@ -16479,6 +17997,15 @@ + + + + + + + + + @@ -16515,15 +18042,6 @@ - - - - - - - - - 1. This method first stores all database jobs that can are found in the Quartz Scheduler in a Map. @@ -16562,11 +18080,37 @@ - + - - + + + + + + + + + + + Configuration on which job operates + + + + + Adapter on which job operates + + + + + Receiver on which job operates + + + + + + + @@ -16587,7 +18131,7 @@ CRON expression that determines the frequency of execution. - Can <code>not</code> be used in combination with Interval. + Can <b>not</b> be used in combination with Interval. @@ -16612,6 +18156,11 @@ + + + + + @@ -16657,7 +18206,7 @@ - JNDI name of datasource to be used Default: jdbc.datasource.default + JNDI name of datasource to be used Default: <code>jdbc.datasource.default</code> @@ -16670,37 +18219,6 @@ - - - - - - - - - - - - - - Configuration on which job operates - - - - - Adapter on which job operates - - - - - Receiver on which job operates - - - - - - - @@ -16935,7 +18453,7 @@ - Timeout in ms of obtaining a connection/result. 0 means no timeout Default: 10000 + Timeout in ms of obtaining a connection/result. Default: 10000 @@ -16951,165 +18469,71 @@ - - Password used for authentication to the host - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - If the Configuration should automatically start all Adapters and Jobs. - - - - - Configurations should be wired through Spring, which in turn should call #setBeanName(String). - Once the ConfigurationContext has a name it should not be changed anymore, hence - super.setBeanName(String) only sets the name once. - If not created by Spring, the setIdCalled flag in AbstractRefreshableConfigApplicationContext wont be set, allowing the name to be updated. - - The DisplayName will always be updated, which is purely used for logging purposes. - - - - - - - - - - Renders the contents of the first node (in combination with xslt or xpath). Please note that - if there are child nodes, only the contents are returned, use <code>XML</code> if the xml tags are required - - - - - Renders an xml-nodeset as an xml-string (in combination with xslt or xpath). This will include the xml tags - - - - - Renders the CONTENTS of the first node as a nodeset - that can be used as such when passed as xslt-parameter (only for XSLT 1.0). - Please note that the nodeset may contain multiple nodes, without a common root node. - N.B. The result is the set of children of what you might expect it to be... - - - - - Renders XML as a DOM document; similar to <code>node</code> - with the distinction that there is always a common root node (required for XSLT 2.0) - - - - - Converts the result to a Date, by default using formatString <code>yyyy-MM-dd</code>. - When applied as a JDBC parameter, the method setDate() is used - - - - - Converts the result to a Date, by default using formatString <code>HH:mm:ss</code>. - When applied as a JDBC parameter, the method setTime() is used - - - - - Converts the result to a Date, by default using formatString <code>yyyy-MM-dd HH:mm:ss</code>. - When applied as a JDBC parameter, the method setTimestamp() is used - - - - - Similar to <code>DATETIME</code>, except for the formatString that is <code>yyyy-MM-dd HH:mm:ss.SSS</code> by default - - - - - Converts the result from a XML formatted dateTime to a Date. - When applied as a JDBC parameter, the method setTimestamp() is used - - - - - Converts the result to a Number, using decimalSeparator and groupingSeparator. - When applied as a JDBC parameter, the method setDouble() is used - - - - - Converts the result to an Integer - - - - - Converts the result to a Boolean - - - - - Forces the parameter value to be treated as binary data (e.g. when using a SQL BLOB field). - When applied as a JDBC parameter, the method setBinaryStream() or setBytes() is used - - - - - Forces the parameter value to be treated as character data (e.g. when using a SQL CLOB field). - When applied as a JDBC parameter, the method setCharacterStream() or setString() is used - - - - - Used for StoredProcedure OUT parameters when the database type is a {@code CURSOR} or java.sql.JDBCType#REF_CURSOR. - See also org.frankframework.jdbc.StoredProcedureQuerySender. - <br/> - DEPRECATED: Type LIST can also be used in larva test to Convert a List to an xml-string (&lt;items&gt;&lt;item&gt;...&lt;/item&gt;&lt;item&gt;...&lt;/item&gt;&lt;/items&gt;) - - - - + + Password used for authentication to the host + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + If the Configuration should automatically start all Adapters and Jobs. + + + + + Configurations should be wired through Spring, which in turn should call #setBeanName(String). + Once the ConfigurationContext has a name it should not be changed anymore, hence + super.setBeanName(String) only sets the name once. + If not created by Spring, the setIdCalled flag in AbstractRefreshableConfigApplicationContext wont be set, allowing the name to be updated. + + The DisplayName will always be updated, which is purely used for logging purposes. + + + + + @@ -17117,6 +18541,15 @@ + + + + + + + + + @@ -17131,11 +18564,7 @@ - - - (Only for produces) Attempts to detect the MimeType as well as charset when not known - - + @@ -17144,6 +18573,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -17155,6 +18626,14 @@ + + + + + + + + @@ -17186,7 +18665,7 @@ - Automatically determine the type of the outgoing javax.jms.Message based + Automatically determine the type of the outgoing jakarta.jms.Message based on the value of Message#isBinary(). @@ -17256,6 +18735,15 @@ + + + + + + + + + @@ -17416,6 +18904,13 @@ + + + + + + + @@ -17530,6 +19025,14 @@ + + + + + + + + @@ -17570,9 +19073,17 @@ + + + + + + + + @@ -17719,7 +19230,7 @@ - + @@ -17826,6 +19337,100 @@ + + + + + Renders the contents of the first node (in combination with xslt or xpath). Please note that + if there are child nodes, only the contents are returned, use <code>XML</code> if the xml tags are required + + + + + Renders an xml-nodeset as an xml-string (in combination with xslt or xpath). This will include the xml tags + + + + + Renders the CONTENTS of the first node as a nodeset + that can be used as such when passed as xslt-parameter (only for XSLT 1.0). + Please note that the nodeset may contain multiple nodes, without a common root node. + N.B. The result is the set of children of what you might expect it to be... + + + + + Renders XML as a DOM document; similar to <code>node</code> + with the distinction that there is always a common root node (required for XSLT 2.0) + + + + + Converts the result to a Date, by default using formatString <code>yyyy-MM-dd</code>. + When applied as a JDBC parameter, the method setDate() is used + + + + + Converts the result to a Date, by default using formatString <code>HH:mm:ss</code>. + When applied as a JDBC parameter, the method setTime() is used + + + + + Converts the result to a Date, by default using formatString <code>yyyy-MM-dd HH:mm:ss</code>. + When applied as a JDBC parameter, the method setTimestamp() is used + + + + + Similar to <code>DATETIME</code>, except for the formatString that is <code>yyyy-MM-dd HH:mm:ss.SSS</code> by default + + + + + Converts the result from a XML formatted dateTime to a Date. + When applied as a JDBC parameter, the method setTimestamp() is used + + + + + Converts the result to a Number, using decimalSeparator and groupingSeparator. + When applied as a JDBC parameter, the method setDouble() is used + + + + + Converts the result to an Integer + + + + + Converts the result to a Boolean + + + + + Forces the parameter value to be treated as binary data (e.g. when using a SQL BLOB field). + When applied as a JDBC parameter, the method setBinaryStream() or setBytes() is used + + + + + Forces the parameter value to be treated as character data (e.g. when using a SQL CLOB field). + When applied as a JDBC parameter, the method setCharacterStream() or setString() is used + + + + + Used for StoredProcedure OUT parameters when the database type is a <code>CURSOR</code> or java.sql.JDBCType#REF_CURSOR. + See also org.frankframework.jdbc.StoredProcedureQuerySender. + <br/> + DEPRECATED: Type LIST can also be used in larva test to Convert a List to an xml-string (&lt;items&gt;&lt;item&gt;...&lt;/item&gt;&lt;item&gt;...&lt;/item&gt;&lt;/items&gt;) + + + + @@ -17952,6 +19557,14 @@ + + + + + + + + @@ -17980,6 +19593,20 @@ + + + + + + + + + + + + + + @@ -18101,7 +19728,7 @@ - + @@ -18138,94 +19765,105 @@ - + - Folder that is scanned for files. If not set, the root is scanned + The value of the parameter, or the base for transformation using xpathExpression or stylesheet, or formatting. - + - Folder where files are stored <i>while</i> being processed - - - - - Folder where files are stored <i>after</i> being processed - - - - - Folder where files are stored <i>after</i> being processed, in case the exit-state was not equal to <code>success</code> - - - - - Folder where messages from the error folder can be put on Hold, temporarily - - - - - Folder where a copy of every file that is received is stored - - - - - If set to <code>true</code>, the folders to look for files and to move files to when being processed and after being processed are created if they are specified and do not exist Default: false + Key of a PipelineSession-variable. <br/>If specified, the value of the PipelineSession variable is used as input for + the xpathExpression or stylesheet, instead of the current input message. <br/>If no xpathExpression or stylesheet are + specified, the value itself is returned. <br/>If the value '*' is specified, all existing sessionkeys are added as + parameter of which the name starts with the name of this parameter. <br/>If also the name of the parameter has the + value '*' then all existing sessionkeys are added as parameter (except tsReceived) - + - If set <code>true</code>, the file processed will be deleted after being processed, and not stored Default: false + key of message context variable to use as source, instead of the message found from input message or sessionKey itself - + - Number of copies held of a file with the same name. Backup files have a dot and a number suffixed to their name. If set to 0, no backups will be kept. Default: 0 + Instead of a fixed <code>sessionKey</code> it's also possible to use a XPath expression applied to the input message to extract the name of the session-variable. - + - If set <code>true</code>, the destination file will be deleted if it already exists Default: false + If the result of sessionKey, xpathExpression and/or stylesheet returns null or an empty string, this value is returned - + - If <code>true</code>, the file modification time is used in addition to the filename to determine if a file has been seen before Default: false + Comma separated list of methods (<code>defaultValue</code>, <code>sessionKey</code>, <code>pattern</code>, <code>value</code> or <code>input</code>) to use as default value. Used in the order they appear until a non-null value is found. Default: <code>defaultValue</code> - + - Minimal age of file <i>in milliseconds</i>, to avoid receiving a file while it is still being written Default: 1000 + Value of parameter is determined using substitution and formatting, following MessageFormat syntax with named parameters. The expression can contain references + to <code>session-variables</code> or other <code>parameters</code> using the {name-of-parameter} and is formatted using java.text.MessageFormat. + <br/><b>NB: When referencing other <code>parameters</code> these MUST be defined before the parameter using pattern substitution.</b> + <br/> + <br/> + If for instance <code>fname</code> is a parameter or session-variable that resolves to Eric, then the pattern + 'Hi {fname}, how do you do?' resolves to 'Hi Eric, do you do?'.<br/> + The following predefined reference can be used in the expression too:<ul> + <li>{now}: the current system time</li> + <li>{uid}: an unique identifier, based on the IP address and java.rmi.server.UID</li> + <li>{uuid}: an unique identifier, based on the IP address and java.util.UUID</li> + <li>{hostname}: the name of the machine the application runs on</li> + <li>{username}: username from the credentials found using authAlias, or the username attribute</li> + <li>{password}: password from the credentials found using authAlias, or the password attribute</li> + <li>{fixeddate}: fake date, for testing only</li> + <li>{fixeduid}: fake uid, for testing only</li> + <li>{fixedhostname}: fake hostname, for testing only</li> + </ul> + A guid can be generated using {hostname}_{uid}, see also + <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/rmi/server/uid.html">http://java.sun.com/j2se/1.4.2/docs/api/java/rmi/server/uid.html</a> for more information about (g)uid's or + <a href="http://docs.oracle.com/javase/1.5.0/docs/api/java/util/uuid.html">http://docs.oracle.com/javase/1.5.0/docs/api/java/util/uuid.html</a> for more information about uuid's. + <br/> + When combining a date or time <code>pattern</code> like {now} or {fixeddate} with a DATE, TIME, DATETIME or TIMESTAMP <code>type</code>, the effective value of the attribute + <code>formatString</code> must match the effective value of the formatString in the <code>pattern</code>. - + - Key of Property to use as messageId. If not set, the filename of the file as it was received in the inputFolder is used as the messageId Default: for MailFileSystems: Message-ID + If set <code>true</code> pattern elements that cannot be resolved to a parameter or sessionKey are silently resolved to an empty string - + - If set <code>true</code>, no browsers for process folders are generated Default: false + If set (>=0) and the length of the value of the parameter falls short of this minimum length, the value is padded Default: -1 - + - Filter of files to look for in inputFolder e.g. '*.inp'. + If set (>=0) and the length of the value of the parameter exceeds this maximum length, the length is trimmed to this maximum length Default: -1 - + - Filter of files to be excluded when looking in inputFolder. + If set to <code>true</code>, the value of the parameter will not be shown in the log (replaced by asterisks) Default: <code>false</code> - + - If set, an XML with all message properties is provided under this key + Set the mode of the parameter, which determines if the parameter is an INPUT, OUTPUT, or INOUT. + This parameter only has effect for StoredProcedureQuerySender. + An OUTPUT parameter does not need to have a value specified, but does need to have the type specified. + Parameter values will not be updated, but output values will be put into the result of the + StoredProcedureQuerySender. + <b/> + If not specified, the default is INPUT. + + + - Name of the JMS destination (queue or topic) to use for sending replies. If <code>useReplyTo</code>=<code>true</code>, + Name of the JMS destination (queue or topic) to use for sending replies. If <code>useReplyTo=true</code>, the sender specified reply destination takes precedence over this one. @@ -18262,12 +19900,12 @@ - The JMS javax.jms.Message class for the outgoing message. + The JMS jakarta.jms.Message class for the outgoing message. Currently supported are MessageClass#TEXT for JMS TextMessage, MessageClass#BYTES for JMS BytesMessage, or MessageClass#AUTO for auto-determination based on whether the input Message is binary or character. <p> - Defaults to MessageClass#AUTO, unless the default is overridden in AppConstants with property {@code jms.messageClass.default} + Defaults to MessageClass#AUTO, unless the default is overridden in AppConstants with property <code>jms.messageClass.default</code> </p> @@ -18400,7 +20038,7 @@ - JNDI name of datasource to be used, can be configured via jmsRealm, too Default: jdbc.datasource.default + JNDI name of datasource to be used, can be configured via jmsRealm, too Default: <code>jdbc.datasource.default</code> @@ -18460,7 +20098,7 @@ - Controls wheter the returned package content is db2 format or xml format. + Controls if the returned package content is db2 format or xml format. Possible values: <ul> <li>select:</li> xml content s expected @@ -18495,7 +20133,7 @@ - Named parameters will be auto-detected by default. Every string in the query which equals <code>?{paramname}</code> will be replaced by the value of the corresponding parameter. The parameters don't need to be in the correct order and unused parameters are skipped. + Named parameters will be auto-detected by default. Every string in the query which equals <code><code>?{</code>paramname<code>}</code></code> will be replaced by the value of the corresponding parameter. The parameters don't need to be in the correct order and unused parameters are skipped. @@ -18528,6 +20166,14 @@ If true and scalar=false, multiline indented XML is produced Default: false + + + The type of output. If not set then defaults to old-style XML. If set to XML, new-style XML is used. EXPERIMENTAL: datatypes like numbers are not yet rendered correctly Default: false + + + + + Parameter that is used, if specified and not empty, to determine the destination. Overrides the <code>destination</code> attribute @@ -18540,7 +20186,8 @@ - (Only used when <code>synchronous</code>=<code>true</code> and <code>replyToName</code> is set). Indicates whether the server uses the correlationId from the pipeline, the correlationId from the message or the messageId in the correlationId field of the reply. This requires the sender to have set the correlationId at the time of sending. Default: MESSAGEID + (Only used when <code>synchronous=true</code> and <code>replyToName</code> is set). Indicates whether the server uses the correlationId from the pipeline, + the correlationId from the message or the messageId in the correlationId field of the reply. This requires the sender to have set the correlationId at the time of sending. Default: MESSAGEID @@ -18800,17 +20447,17 @@ - If <code>true</code>, the hostname in the certificate will be checked against the actual hostname of the peer + If <code>true</code>, the hostname in the certificate will be checked against the actual hostname of the peer. Note: This attribute is unsafe and should not be used in a production environment. Default: false - If <code>true</code>, self signed certificates are accepted Default: false + If <code>true</code>, self signed certificates are accepted. Note: This attribute is unsafe and should not be used in a production environment. Default: false - If <code>true</code>, CertificateExpiredExceptions are ignored Default: false + If <code>true</code>, CertificateExpiredExceptions are ignored. Note: This attribute is unsafe and should not be used in a production environment. Default: false @@ -18830,7 +20477,7 @@ - Used when StaleChecking=<code>true</code>. Timeout after which an idle connection will be validated before being used. Default: 5000 ms + Used when <code>staleChecking</code> is <code>true</code>. Timeout after which an idle connection will be validated before being used. Default: 5000 ms @@ -18850,7 +20497,7 @@ - Allows you to choose which CipherSuites are used when connecting to an endpoint. Works in tandem with {@code protocol} as the provided Suite may not be valid for the provided Protocol + Allows you to choose which CipherSuites are used when connecting to an endpoint. Works in tandem with <code>protocol</code> as the provided Suite may not be valid for the provided Protocol See the Java Security Standard Algorithm Names Specification for all available options. Note that these may differ depending on the JRE you're using. @@ -18899,11 +20546,6 @@ Comma separated list of domains to which mails can be send, domains not on the list are filtered out. Empty allows all domains - - - Optional identifier for this storage, to be able to share the physical storage between a number of receivers and pipes. - - Possible values are <code>E</code> (error store), <code>M</code> (message store), <code>L</code> (message log for Pipe) or <code>A</code> (message log for Receiver).<br/> @@ -19089,7 +20731,9 @@ Regular expression to mask strings in the log. For example, the regular expression <code>(?&lt;=&lt;password&gt;).*?(?=&lt;/password&gt;)</code> will replace every character between keys '&lt;password&gt;' and '&lt;/password&gt;'. <b>note:</b> this feature is used at adapter level, - so one pipe affects all pipes in the pipeline (and multiple values in different pipes are merged) + so a <code>hideRegex</code> set on one pipe affects all pipes in the pipeline (and multiple values in different pipes are combined into a single regex). + The regular expressions are matched against part of the log lines. See int) + with <code>mode = 0</code> for how regular expressions are matched and replaced. @@ -19176,6 +20820,11 @@ If set <code>true</code>, the input is assumed to be the name of the file to be validated. Otherwise the input itself is validated Default: false + + + Characterset used for reading file, only used when <code>validateFile</code> is <code>true</code> Default: utf-8 + + If set <code>true</code>, the namespace from schemalocation is added to the schema document as targetnamespace Default: false @@ -19199,7 +20848,7 @@ If set <code>true</code>, send warnings to logging and console about syntax problems in the configured schema('s). - Alternatively, warnings can be switched off using suppression properties XSD_VALIDATION_WARNINGS_SUPPRESS_KEY, XSD_VALIDATION_ERROR_SUPPRESS_KEY and XSD_VALIDATION_FATAL_ERROR_SUPPRESS_KEY Default: true + Alternatively, warnings can be switched off using suppression properties <code>XSD_VALIDATION_WARNINGS_SUPPRESS_KEY</code>, <code>XSD_VALIDATION_ERROR_SUPPRESS_KEY</code> and <code>XSD_VALIDATION_FATAL_ERROR_SUPPRESS_KEY</code> Default: true @@ -19227,11 +20876,6 @@ Session key for retrieving a schema - - - Namespace defintions for xpathExpression. Must be in the form of a comma or space separated list of <code>prefix=namespaceuri</code>-definitions. For some use other cases (NOT xpathExpression), one entry can be without a prefix, that will define the default namespace. - - Key of session variable to store number of items processed, i.e. the position or index in the set of items to be processed. When handling the first item, the value will be 1. @@ -19239,12 +20883,12 @@ - The maximum number of items returned. The (default) value of 0 means unlimited, all available items will be returned. Special forward maxItemsReached can be configured to follow Default: 0 + The maximum number of items returned. The (default) value of 0 means unlimited, all available items will be returned. Special forward <code>maxItemsReached</code> can be configured to follow Default: 0 - Expression evaluated on each result and forwards to [stopConditionMet] forward if configured. + Expression evaluated on each result and forwards to [<code>stopConditionMet</code>] forward if configured. Iteration stops if condition returns anything other than an empty result. To test for the root element to have an attribute 'finished' with the value 'yes', the expression <code>*[@finished='yes']</code> can be used. This can be used if the condition to stop can be derived from the item result. To stop after a maximum number of items has been processed, use <code>maxItems</code>. Previous versions documented that <code>position()=2</code> could be used. This is not working as expected; Use maxItems instead diff --git a/src/main/configurations/Translate/Configuration_PutZgwZaakDocument.xml b/src/main/configurations/Translate/Configuration_PutZgwZaakDocument.xml index 517f0d369..704f56987 100644 --- a/src/main/configurations/Translate/Configuration_PutZgwZaakDocument.xml +++ b/src/main/configurations/Translate/Configuration_PutZgwZaakDocument.xml @@ -33,17 +33,17 @@ - - - + + + - + - + - + - + - - - + + + +