From 9aa75181e23cf088fff18bb37f844938d5e571d8 Mon Sep 17 00:00:00 2001 From: MLenterman Date: Thu, 12 Sep 2024 12:07:44 +0200 Subject: [PATCH] build(dependencies): bump f!f version to 8.3.0-20240910.042339 --- Dockerfile | 2 +- Dockerfile.java8 | 2 +- docker-compose.zaakbrug.dev.yml | 2 +- frank-runner.properties | 2 +- src/main/FrankConfig.xsd | 3522 ++++++++++++++++------- src/main/configurations/FrankConfig.xsd | 3522 ++++++++++++++++------- 6 files changed, 4836 insertions(+), 2216 deletions(-) diff --git a/Dockerfile b/Dockerfile index ac10ca863..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.2.0-20240711.042331 +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 3a7f7f84d..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.2.0-20240711.042331} + 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 745d605b0..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.2.0-20240711.042331 \ 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 8b5f8c138..4418db222 100644 --- a/src/main/FrankConfig.xsd +++ b/src/main/FrankConfig.xsd @@ -1,5 +1,5 @@ - + Container of Adapters that belong together. @@ -96,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> @@ -207,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. @@ -283,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> @@ -317,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 @@ -377,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. @@ -681,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> @@ -708,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>) @@ -771,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. @@ -891,7 +973,9 @@ - Manager for Monitoring. + Manager for Monitoring. + <p> + Configure/start/stop lifecycles are managed by Spring. @@ -905,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> @@ -1094,7 +1173,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. @@ -1228,6 +1307,27 @@ + + 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> + @@ -1250,7 +1350,7 @@ - Microsoft Exchange Implementation of a MailListener. + Microsoft Exchange Implementation of a mail filesystem. @@ -1260,6 +1360,22 @@ + + + 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. + + + + + + + + + @@ -1396,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 @@ -1684,7 +1795,7 @@ - The required contentType on requests, if it doesn't match a <code>415 Unsupported Media Type</code> 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 @@ -1829,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 + + + + + @@ -1840,28 +1959,91 @@ 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 - - - - - - - - - + + + Folder that is scanned for files. If not set, the root is scanned + + + + + 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 + + + + + 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 @@ -2171,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> @@ -2283,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 @@ -2302,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. - - - @@ -2360,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 @@ -2499,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 @@ -2595,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> @@ -3084,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. @@ -3214,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 @@ -3509,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 @@ -3539,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 @@ -3580,7 +3768,7 @@ <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 - FileAttribute.. + <code>FileAttribute.</code>. This prefix will be not be part of the actual metadata property name. </p> <p> @@ -3599,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> @@ -3661,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> @@ -3820,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> + + + + + + + + + @@ -3876,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: @@ -3891,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> @@ -3903,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. @@ -3935,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> @@ -4003,7 +4397,7 @@ 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> @@ -4047,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? @@ -4090,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/> @@ -4140,7 +4525,7 @@ <p> In addition to regular parameters for filesystem senders, it is possible to set custom extended attributes on files by prefixing parameter names with - FileAttribute.. + <code>FileAttribute.</code>. This prefix will be not be part of the actual metadata property name. </p> <p> @@ -4190,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> @@ -4259,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> @@ -4310,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> @@ -4338,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> @@ -4517,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 IParameter 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> @@ -4682,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> @@ -4740,8 +5096,8 @@ QuerySender that transforms the input message to a query. - <br/><code><pre> - select + <br/> + <pre><code>select delete insert update - tableName @@ -4753,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/> @@ -4856,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> @@ -4886,7 +5241,7 @@ - Maximum concurrent connections towards S3 + Maximum concurrent connections towards S3 Default: 50 @@ -4911,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. @@ -4919,17 +5274,17 @@ - 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 @@ -4939,32 +5294,32 @@ - 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> @@ -4974,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> @@ -5068,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 @@ -5179,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 @@ -5393,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 - - - - - + @@ -5505,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 @@ -5588,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> @@ -5700,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 @@ -5769,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. + + + + + + + @@ -5914,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 @@ -5956,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> @@ -5979,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> @@ -6218,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 @@ -6430,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> @@ -6455,7 +6852,7 @@ - + the name of the javascript file containing the functions to run @@ -6556,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 @@ -6807,7 +7204,7 @@ - Whether the LocalFileSystem tries to create the root folder if it doesn't exist yet. + Whether the LocalFileSystem tries to create the root folder if it doesn't exist yet. Default: false @@ -6959,7 +7356,7 @@ by different JdbcTransactionalStorage instances. <br/> This field is optional, unless the attribute #onlyStoreWhenMessageIdUnique is - set to {@code true}. + set to <code>true</code>. @@ -7094,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> @@ -7117,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 @@ -7689,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 @@ -7714,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 @@ -7943,14 +8340,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 - - - - - + @@ -8308,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 @@ -8389,7 +8779,7 @@ <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 - FileAttribute.. + <code>FileAttribute.</code>. This prefix will be not be part of the actual metadata property name. </p> <p> @@ -8408,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> @@ -8470,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> @@ -8629,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> + + + + + + + + + @@ -8685,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: @@ -8700,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> @@ -8712,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. @@ -8744,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> @@ -8812,7 +9408,7 @@ 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> @@ -8856,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? @@ -8899,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/> @@ -8949,7 +9536,7 @@ <p> In addition to regular parameters for filesystem senders, it is possible to set custom extended attributes on files by prefixing parameter names with - FileAttribute.. + <code>FileAttribute.</code>. This prefix will be not be part of the actual metadata property name. </p> <p> @@ -8999,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> @@ -9068,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> @@ -9119,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> @@ -9147,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> @@ -9326,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 IParameter 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> @@ -9491,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> @@ -9549,8 +10107,8 @@ QuerySender that transforms the input message to a query. - <br/><code><pre> - select + <br/> + <pre><code>select delete insert update - tableName @@ -9562,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/> @@ -9980,6 +10537,18 @@ + + + ErrorMessageFormatter for JUICE, introduced with the Y01-project. + + + + + + + + + @@ -10032,6 +10601,11 @@ + + + + + @@ -10298,11 +10872,7 @@ - - - Characterset used for reading file, only used when <code>validateFile</code> is <code>true</code> Default: utf-8 - - + @@ -10368,11 +10938,7 @@ - - - Characterset used for reading file, only used when <code>validateFile</code> is <code>true</code> Default: utf-8 - - + @@ -10435,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; @@ -10524,11 +11090,7 @@ - - - Characterset used for reading file, only used when <code>validateFile</code> is <code>true</code> Default: utf-8 - - + @@ -11265,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> @@ -11793,10 +12355,14 @@ + + + + @@ -11827,57 +12393,673 @@ - - - - - A true multi-threaded Listener-class. - <br/> - - Since version 4.1, Ibis supports distributed transactions using the XA-protocol. This feature is controlled by the - transacted attribute. If this is set to <code>true</code>, received messages are - committed or rolled back, possibly together with other actions, by the receiver or the pipeline. - In case of a failure, all actions within the transaction are rolled back. - - <p><b>Using jmsTransacted and acknowledgement</b><br/> - If jmsTransacted is set <code>true</code>: it should ensure that a message is received and processed on a both or nothing basis. - IBIS will commit the the message, otherwise perform rollback. However using jmsTransacted, IBIS does not bring transactions within - the adapters under transaction control, compromising the idea of atomic transactions. In the roll-back situation messages sent to - other destinations within the Pipeline are NOT rolled back if jmsTransacted is set <code>true</code>! In the failure situation the - message is therefore completely processed, and the roll back does not mean that the processing is rolled back! To obtain the correct - (transactional) behaviour, transacted should be used instead of listener.transacted. -<p> - Setting listener.acknowledgeMode to "auto" means that messages are allways acknowledged (removed from - the queue, regardless of what the status of the Adapter is. "client" means that the message will only be removed from the queue - when the state of the Adapter equals the success state. - The "dups" mode instructs the session to lazily acknowledge the delivery of the messages. This is likely to result in the - delivery of duplicate messages if JMS fails. It should be used by consumers who are tolerant in processing duplicate messages. - In cases where the client is tolerant of duplicate messages, some enhancement in performance can be achieved using this mode, - since a session has lower overhead in trying to prevent duplicate messages. - </p> - <p>The setting for listener.acknowledgeMode will only be processed if - the setting for listener.transacted as well as for - listener.jmsTransacted is false.</p> - - <p>If useReplyTo is set and a replyTo-destination is - specified in the message, the JmsListener sends the result of the processing - in the pipeline to this destination. Otherwise the result is sent using the (optionally) - specified Sender, that in turn sends the message to - whatever it is configured to.</p> - </p> - <p><b>Notice:</b> the JmsListener is ONLY capable of processing - <code>jakarta.jms.TextMessage</code>s <br/><br/> - </p> - - - - - - - - - - + + + + + A true multi-threaded Listener-class. + <br/> + + Since version 4.1, Ibis supports distributed transactions using the XA-protocol. This feature is controlled by the + transacted attribute. If this is set to <code>true</code>, received messages are + committed or rolled back, possibly together with other actions, by the receiver or the pipeline. + In case of a failure, all actions within the transaction are rolled back. + + <p><b>Using jmsTransacted and acknowledgement</b><br/> + If jmsTransacted is set <code>true</code>: it should ensure that a message is received and processed on a both or nothing basis. + IBIS will commit the the message, otherwise perform rollback. However using jmsTransacted, IBIS does not bring transactions within + the adapters under transaction control, compromising the idea of atomic transactions. In the roll-back situation messages sent to + other destinations within the Pipeline are NOT rolled back if jmsTransacted is set <code>true</code>! In the failure situation the + message is therefore completely processed, and the roll back does not mean that the processing is rolled back! To obtain the correct + (transactional) behaviour, transacted should be used instead of listener.transacted. +<p> + Setting listener.acknowledgeMode to "auto" means that messages are allways acknowledged (removed from + the queue, regardless of what the status of the Adapter is. "client" means that the message will only be removed from the queue + when the state of the Adapter equals the success state. + The "dups" mode instructs the session to lazily acknowledge the delivery of the messages. This is likely to result in the + delivery of duplicate messages if JMS fails. It should be used by consumers who are tolerant in processing duplicate messages. + In cases where the client is tolerant of duplicate messages, some enhancement in performance can be achieved using this mode, + since a session has lower overhead in trying to prevent duplicate messages. + </p> + <p>The setting for listener.acknowledgeMode will only be processed if + the setting for listener.transacted as well as for + listener.jmsTransacted is false.</p> + + <p>If useReplyTo is set and a replyTo-destination is + specified in the message, the JmsListener sends the result of the processing + in the pipeline to this destination. Otherwise the result is sent using the (optionally) + specified Sender, that in turn sends the message to + whatever it is configured to.</p> + </p> + <p><b>Notice:</b> the JmsListener is ONLY capable of processing + <code>jakarta.jms.TextMessage</code>s <br/><br/> + </p> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -11887,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. @@ -12007,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. @@ -12198,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> @@ -12251,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. @@ -12569,69 +13801,57 @@ You can use the EchoPipe for a static value. This looked like this before: <pre> - {@code - <pipe name="HelloWorld" className="org.frankframework.pipes.FixedResult" returnString="Hello World"> - <forward name="success" path="EXIT"/> - </pipe> - } + <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 - <pipe name="HelloWorld" className="org.frankframework.pipes.EchoPipe" getInputFromFixedValue="Hello World"> - <forward name="success" path="EXIT"/> - </pipe> - } + <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 - <pipe name="make unique message" className="org.frankframework.pipes.FixedResultPipe" - returnString="&lt;msg mid=&quot;MID&quot; action=&quot;ACTION&quot; /&gt;" replaceFixedParams="true"> - <param name="MID" sessionKey="mid" /> - <param name="ACTION" xpathExpression="request/@action" /> - </pipe> - } + <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 - <pipe name="make unique message" className="org.frankframework.pipes.ReplacerPipe" - getInputFromFixedValue="&lt;msg mid=&quot;?{MID}&quot; action=&quot;?{ACTION}&quot; /&gt;"> - <param name="MID" sessionKey="mid" /> - <param name="ACTION" xpathExpression="request/@action" /> - </pipe> - } + <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 - <FixedResultPipe name="InputValidateError" - filename="ManageFileSystem/xml/ErrorMessage.xml" - replaceFrom="%reasonCode" replaceTo="NOT_WELL_FORMED_XML"> - <forward name="success" path="EXIT" /> - </FixedResultPipe> - } + <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 - <FixedResultPipe name="InputValidateError" - filename="ManageFileSystem/xml/ErrorMessage.xml"> - <forward name="success" path="replaceReasonCode" /> - </FixedResultPipe> - <ReplacerPipe name="replaceReasonCode" - find="%reasonCode" - replace="NOT_WELL_FORMED_XML"> - <forward name="success" path="EXIT" /> - </ReplacerPipe> - } + <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. @@ -12639,61 +13859,57 @@ 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 - <CompareStringPipe name="compareIdAndCid" > - <param name="operand1" sessionKey="id"/> - <param name="operand2" sessionKey="cid"/> - <forward name="equals" path="IdAndCidSame" /> - <forward name="lessthan" path="IdAndCidDifferent" /> - <forward name="greaterthan" path="IdAndCidDifferent" /> - </CompareStringPipe> - <FixedResultPipe name="IdAndCidSame" returnString="true" storeResultInSessionKey="IdAndCidSame"> - <forward name="success" path="displayKeys" /> - </FixedResultPipe> - <FixedResultPipe name="IdAndCidDifferent" returnString="false" storeResultInSessionKey="IdAndCidSame"> - <forward name="success" path="displayKeys" /> - </FixedResultPipe> + <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; - <pipe name="displayKeys" className="org.frankframework.pipes.FixedResultPipe" - returnString="branch [BRANCH] Orignal Id [MID] cid [CID] id=cid [SAME]" replaceFixedParams="true"> - <param name="BRANCH" sessionKey="originalMessage" xpathExpression="*&#47;@branch" /> - <param name="MID" sessionKey="id" /> - <param name="CID" sessionKey="cid" /> - <param name="SAME" sessionKey="IdAndCidSame" /> - <forward name="success" path="EXIT" /> - </pipe> - } + &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 - <CompareStringPipe name="compareIdAndCid" > - <param name="operand1" sessionKey="id"/> - <param name="operand2" sessionKey="cid"/> - <forward name="equals" path="IdAndCidSame" /> - <forward name="lessthan" path="IdAndCidDifferent" /> - <forward name="greaterthan" path="IdAndCidDifferent" /> - </CompareStringPipe> + <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; - <PutInSessionPipe name="IdAndCidSame" value="true" sessionKey="IdAndCidSame"> - <forward name="success" path="putOriginalMessageInSession" /> - </PutInSessionPipe> - <PutInSessionPipe name="IdAndCidDifferent" value="false" sessionKey="IdAndCidSame"> - <forward name="success" path="putOriginalMessageInSession" /> - </PutInSessionPipe> + &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; - <PutInSessionPipe name="putOriginalMessageInSession" sessionKey="incomingMessage"/> + &lt;PutInSessionPipe name=&quot;putOriginalMessageInSession&quot; sessionKey=&quot;incomingMessage&quot;/&gt; - <pipe name="displayKeys" className="org.frankframework.pipes.ReplacerPipe" - getInputFromFixedValue="branch [?{BRANCH}] Original Id [?{MID}] cid [?{CID}] id=cid [?{SAME}]"> - <param name="BRANCH" sessionKey="originalMessage" xpathExpression="*&#47;@branch" /> - <param name="MID" sessionKey="id" /> - <param name="CID" sessionKey="cid" /> - <param name="SAME" sessionKey="IdAndCidSame" /> - <forward name="success" path="EXIT" /> - </pipe> - } + &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> @@ -12972,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> @@ -13090,7 +14304,7 @@ <p> In addition to regular parameters for filesystem senders, it is possible to set custom extended attributes on files by prefixing parameter names with - FileAttribute.. + <code>FileAttribute.</code>. This prefix will be not be part of the actual metadata property name. </p> <p> @@ -13125,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/> @@ -13520,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. @@ -13798,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. @@ -13853,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 + + + + + + + @@ -14113,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. @@ -14419,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. + + + + + + + + + + @@ -14698,6 +16036,11 @@ + + + Location to a <code>jndi.properties</code> file for additional EMS (SSL) properties + + @@ -14856,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 @@ -15268,7 +16611,7 @@ - Whether the LocalFileSystem tries to create the root folder if it doesn't exist yet. + Whether the LocalFileSystem tries to create the root folder if it doesn't exist yet. Default: false @@ -15279,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. @@ -15287,17 +16630,17 @@ - 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 @@ -15307,32 +16650,32 @@ - 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> @@ -15342,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> @@ -15389,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 @@ -15564,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 @@ -15667,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 @@ -15675,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 @@ -15842,7 +17185,7 @@ <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. + not remove or replace, for instance, a single <code>'&amp;'</code> character. </p> <p> See also: @@ -16087,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 + + @@ -16493,7 +17841,7 @@ - namespace definitions 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. @@ -16783,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. @@ -16858,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> @@ -17278,6 +18626,14 @@ + + + + + + + + @@ -17379,6 +18735,15 @@ + + + + + + + + + @@ -17660,6 +19025,14 @@ + + + + + + + + @@ -18050,7 +19423,7 @@ - Used for StoredProcedure OUT parameters when the database type is a {@code CURSOR} or java.sql.JDBCType#REF_CURSOR. + 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;) @@ -18184,6 +19557,14 @@ + + + + + + + + @@ -18480,94 +19861,9 @@ - - - Folder that is scanned for files. If not set, the root is scanned - - - - - 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 - - - - - 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 - - - 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. @@ -18609,7 +19905,7 @@ 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> @@ -18742,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> @@ -18837,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. @@ -18870,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 @@ -18882,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 @@ -19142,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 @@ -19172,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 @@ -19192,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. @@ -19426,9 +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 a {@code hideRegex} set on one pipe affects all pipes in the pipeline (and multiple values in different pipes are combined into a single regex). + 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} for how regular expressions are matched and replaced. + with <code>mode = 0</code> for how regular expressions are matched and replaced. @@ -19515,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 @@ -19538,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 @@ -19573,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 8b5f8c138..4418db222 100644 --- a/src/main/configurations/FrankConfig.xsd +++ b/src/main/configurations/FrankConfig.xsd @@ -1,5 +1,5 @@ - + Container of Adapters that belong together. @@ -96,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> @@ -207,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. @@ -283,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> @@ -317,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 @@ -377,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. @@ -681,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> @@ -708,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>) @@ -771,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. @@ -891,7 +973,9 @@ - Manager for Monitoring. + Manager for Monitoring. + <p> + Configure/start/stop lifecycles are managed by Spring. @@ -905,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> @@ -1094,7 +1173,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. @@ -1228,6 +1307,27 @@ + + 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> + @@ -1250,7 +1350,7 @@ - Microsoft Exchange Implementation of a MailListener. + Microsoft Exchange Implementation of a mail filesystem. @@ -1260,6 +1360,22 @@ + + + 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. + + + + + + + + + @@ -1396,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 @@ -1684,7 +1795,7 @@ - The required contentType on requests, if it doesn't match a <code>415 Unsupported Media Type</code> 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 @@ -1829,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 + + + + + @@ -1840,28 +1959,91 @@ 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 - - - - - - - - - + + + Folder that is scanned for files. If not set, the root is scanned + + + + + 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 + + + + + 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 @@ -2171,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> @@ -2283,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 @@ -2302,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. - - - @@ -2360,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 @@ -2499,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 @@ -2595,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> @@ -3084,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. @@ -3214,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 @@ -3509,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 @@ -3539,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 @@ -3580,7 +3768,7 @@ <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 - FileAttribute.. + <code>FileAttribute.</code>. This prefix will be not be part of the actual metadata property name. </p> <p> @@ -3599,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> @@ -3661,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> @@ -3820,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> + + + + + + + + + @@ -3876,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: @@ -3891,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> @@ -3903,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. @@ -3935,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> @@ -4003,7 +4397,7 @@ 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> @@ -4047,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? @@ -4090,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/> @@ -4140,7 +4525,7 @@ <p> In addition to regular parameters for filesystem senders, it is possible to set custom extended attributes on files by prefixing parameter names with - FileAttribute.. + <code>FileAttribute.</code>. This prefix will be not be part of the actual metadata property name. </p> <p> @@ -4190,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> @@ -4259,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> @@ -4310,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> @@ -4338,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> @@ -4517,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 IParameter 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> @@ -4682,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> @@ -4740,8 +5096,8 @@ QuerySender that transforms the input message to a query. - <br/><code><pre> - select + <br/> + <pre><code>select delete insert update - tableName @@ -4753,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/> @@ -4856,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> @@ -4886,7 +5241,7 @@ - Maximum concurrent connections towards S3 + Maximum concurrent connections towards S3 Default: 50 @@ -4911,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. @@ -4919,17 +5274,17 @@ - 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 @@ -4939,32 +5294,32 @@ - 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> @@ -4974,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> @@ -5068,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 @@ -5179,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 @@ -5393,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 - - - - - + @@ -5505,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 @@ -5588,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> @@ -5700,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 @@ -5769,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. + + + + + + + @@ -5914,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 @@ -5956,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> @@ -5979,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> @@ -6218,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 @@ -6430,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> @@ -6455,7 +6852,7 @@ - + the name of the javascript file containing the functions to run @@ -6556,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 @@ -6807,7 +7204,7 @@ - Whether the LocalFileSystem tries to create the root folder if it doesn't exist yet. + Whether the LocalFileSystem tries to create the root folder if it doesn't exist yet. Default: false @@ -6959,7 +7356,7 @@ by different JdbcTransactionalStorage instances. <br/> This field is optional, unless the attribute #onlyStoreWhenMessageIdUnique is - set to {@code true}. + set to <code>true</code>. @@ -7094,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> @@ -7117,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 @@ -7689,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 @@ -7714,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 @@ -7943,14 +8340,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 - - - - - + @@ -8308,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 @@ -8389,7 +8779,7 @@ <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 - FileAttribute.. + <code>FileAttribute.</code>. This prefix will be not be part of the actual metadata property name. </p> <p> @@ -8408,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> @@ -8470,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> @@ -8629,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> + + + + + + + + + @@ -8685,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: @@ -8700,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> @@ -8712,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. @@ -8744,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> @@ -8812,7 +9408,7 @@ 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> @@ -8856,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? @@ -8899,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/> @@ -8949,7 +9536,7 @@ <p> In addition to regular parameters for filesystem senders, it is possible to set custom extended attributes on files by prefixing parameter names with - FileAttribute.. + <code>FileAttribute.</code>. This prefix will be not be part of the actual metadata property name. </p> <p> @@ -8999,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> @@ -9068,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> @@ -9119,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> @@ -9147,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> @@ -9326,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 IParameter 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> @@ -9491,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> @@ -9549,8 +10107,8 @@ QuerySender that transforms the input message to a query. - <br/><code><pre> - select + <br/> + <pre><code>select delete insert update - tableName @@ -9562,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/> @@ -9980,6 +10537,18 @@ + + + ErrorMessageFormatter for JUICE, introduced with the Y01-project. + + + + + + + + + @@ -10032,6 +10601,11 @@ + + + + + @@ -10298,11 +10872,7 @@ - - - Characterset used for reading file, only used when <code>validateFile</code> is <code>true</code> Default: utf-8 - - + @@ -10368,11 +10938,7 @@ - - - Characterset used for reading file, only used when <code>validateFile</code> is <code>true</code> Default: utf-8 - - + @@ -10435,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; @@ -10524,11 +11090,7 @@ - - - Characterset used for reading file, only used when <code>validateFile</code> is <code>true</code> Default: utf-8 - - + @@ -11265,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> @@ -11793,10 +12355,14 @@ + + + + @@ -11827,57 +12393,673 @@ - - - - - A true multi-threaded Listener-class. - <br/> - - Since version 4.1, Ibis supports distributed transactions using the XA-protocol. This feature is controlled by the - transacted attribute. If this is set to <code>true</code>, received messages are - committed or rolled back, possibly together with other actions, by the receiver or the pipeline. - In case of a failure, all actions within the transaction are rolled back. - - <p><b>Using jmsTransacted and acknowledgement</b><br/> - If jmsTransacted is set <code>true</code>: it should ensure that a message is received and processed on a both or nothing basis. - IBIS will commit the the message, otherwise perform rollback. However using jmsTransacted, IBIS does not bring transactions within - the adapters under transaction control, compromising the idea of atomic transactions. In the roll-back situation messages sent to - other destinations within the Pipeline are NOT rolled back if jmsTransacted is set <code>true</code>! In the failure situation the - message is therefore completely processed, and the roll back does not mean that the processing is rolled back! To obtain the correct - (transactional) behaviour, transacted should be used instead of listener.transacted. -<p> - Setting listener.acknowledgeMode to "auto" means that messages are allways acknowledged (removed from - the queue, regardless of what the status of the Adapter is. "client" means that the message will only be removed from the queue - when the state of the Adapter equals the success state. - The "dups" mode instructs the session to lazily acknowledge the delivery of the messages. This is likely to result in the - delivery of duplicate messages if JMS fails. It should be used by consumers who are tolerant in processing duplicate messages. - In cases where the client is tolerant of duplicate messages, some enhancement in performance can be achieved using this mode, - since a session has lower overhead in trying to prevent duplicate messages. - </p> - <p>The setting for listener.acknowledgeMode will only be processed if - the setting for listener.transacted as well as for - listener.jmsTransacted is false.</p> - - <p>If useReplyTo is set and a replyTo-destination is - specified in the message, the JmsListener sends the result of the processing - in the pipeline to this destination. Otherwise the result is sent using the (optionally) - specified Sender, that in turn sends the message to - whatever it is configured to.</p> - </p> - <p><b>Notice:</b> the JmsListener is ONLY capable of processing - <code>jakarta.jms.TextMessage</code>s <br/><br/> - </p> - - - - - - - - - - + + + + + A true multi-threaded Listener-class. + <br/> + + Since version 4.1, Ibis supports distributed transactions using the XA-protocol. This feature is controlled by the + transacted attribute. If this is set to <code>true</code>, received messages are + committed or rolled back, possibly together with other actions, by the receiver or the pipeline. + In case of a failure, all actions within the transaction are rolled back. + + <p><b>Using jmsTransacted and acknowledgement</b><br/> + If jmsTransacted is set <code>true</code>: it should ensure that a message is received and processed on a both or nothing basis. + IBIS will commit the the message, otherwise perform rollback. However using jmsTransacted, IBIS does not bring transactions within + the adapters under transaction control, compromising the idea of atomic transactions. In the roll-back situation messages sent to + other destinations within the Pipeline are NOT rolled back if jmsTransacted is set <code>true</code>! In the failure situation the + message is therefore completely processed, and the roll back does not mean that the processing is rolled back! To obtain the correct + (transactional) behaviour, transacted should be used instead of listener.transacted. +<p> + Setting listener.acknowledgeMode to "auto" means that messages are allways acknowledged (removed from + the queue, regardless of what the status of the Adapter is. "client" means that the message will only be removed from the queue + when the state of the Adapter equals the success state. + The "dups" mode instructs the session to lazily acknowledge the delivery of the messages. This is likely to result in the + delivery of duplicate messages if JMS fails. It should be used by consumers who are tolerant in processing duplicate messages. + In cases where the client is tolerant of duplicate messages, some enhancement in performance can be achieved using this mode, + since a session has lower overhead in trying to prevent duplicate messages. + </p> + <p>The setting for listener.acknowledgeMode will only be processed if + the setting for listener.transacted as well as for + listener.jmsTransacted is false.</p> + + <p>If useReplyTo is set and a replyTo-destination is + specified in the message, the JmsListener sends the result of the processing + in the pipeline to this destination. Otherwise the result is sent using the (optionally) + specified Sender, that in turn sends the message to + whatever it is configured to.</p> + </p> + <p><b>Notice:</b> the JmsListener is ONLY capable of processing + <code>jakarta.jms.TextMessage</code>s <br/><br/> + </p> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -11887,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. @@ -12007,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. @@ -12198,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> @@ -12251,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. @@ -12569,69 +13801,57 @@ You can use the EchoPipe for a static value. This looked like this before: <pre> - {@code - <pipe name="HelloWorld" className="org.frankframework.pipes.FixedResult" returnString="Hello World"> - <forward name="success" path="EXIT"/> - </pipe> - } + <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 - <pipe name="HelloWorld" className="org.frankframework.pipes.EchoPipe" getInputFromFixedValue="Hello World"> - <forward name="success" path="EXIT"/> - </pipe> - } + <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 - <pipe name="make unique message" className="org.frankframework.pipes.FixedResultPipe" - returnString="&lt;msg mid=&quot;MID&quot; action=&quot;ACTION&quot; /&gt;" replaceFixedParams="true"> - <param name="MID" sessionKey="mid" /> - <param name="ACTION" xpathExpression="request/@action" /> - </pipe> - } + <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 - <pipe name="make unique message" className="org.frankframework.pipes.ReplacerPipe" - getInputFromFixedValue="&lt;msg mid=&quot;?{MID}&quot; action=&quot;?{ACTION}&quot; /&gt;"> - <param name="MID" sessionKey="mid" /> - <param name="ACTION" xpathExpression="request/@action" /> - </pipe> - } + <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 - <FixedResultPipe name="InputValidateError" - filename="ManageFileSystem/xml/ErrorMessage.xml" - replaceFrom="%reasonCode" replaceTo="NOT_WELL_FORMED_XML"> - <forward name="success" path="EXIT" /> - </FixedResultPipe> - } + <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 - <FixedResultPipe name="InputValidateError" - filename="ManageFileSystem/xml/ErrorMessage.xml"> - <forward name="success" path="replaceReasonCode" /> - </FixedResultPipe> - <ReplacerPipe name="replaceReasonCode" - find="%reasonCode" - replace="NOT_WELL_FORMED_XML"> - <forward name="success" path="EXIT" /> - </ReplacerPipe> - } + <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. @@ -12639,61 +13859,57 @@ 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 - <CompareStringPipe name="compareIdAndCid" > - <param name="operand1" sessionKey="id"/> - <param name="operand2" sessionKey="cid"/> - <forward name="equals" path="IdAndCidSame" /> - <forward name="lessthan" path="IdAndCidDifferent" /> - <forward name="greaterthan" path="IdAndCidDifferent" /> - </CompareStringPipe> - <FixedResultPipe name="IdAndCidSame" returnString="true" storeResultInSessionKey="IdAndCidSame"> - <forward name="success" path="displayKeys" /> - </FixedResultPipe> - <FixedResultPipe name="IdAndCidDifferent" returnString="false" storeResultInSessionKey="IdAndCidSame"> - <forward name="success" path="displayKeys" /> - </FixedResultPipe> + <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; - <pipe name="displayKeys" className="org.frankframework.pipes.FixedResultPipe" - returnString="branch [BRANCH] Orignal Id [MID] cid [CID] id=cid [SAME]" replaceFixedParams="true"> - <param name="BRANCH" sessionKey="originalMessage" xpathExpression="*&#47;@branch" /> - <param name="MID" sessionKey="id" /> - <param name="CID" sessionKey="cid" /> - <param name="SAME" sessionKey="IdAndCidSame" /> - <forward name="success" path="EXIT" /> - </pipe> - } + &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 - <CompareStringPipe name="compareIdAndCid" > - <param name="operand1" sessionKey="id"/> - <param name="operand2" sessionKey="cid"/> - <forward name="equals" path="IdAndCidSame" /> - <forward name="lessthan" path="IdAndCidDifferent" /> - <forward name="greaterthan" path="IdAndCidDifferent" /> - </CompareStringPipe> + <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; - <PutInSessionPipe name="IdAndCidSame" value="true" sessionKey="IdAndCidSame"> - <forward name="success" path="putOriginalMessageInSession" /> - </PutInSessionPipe> - <PutInSessionPipe name="IdAndCidDifferent" value="false" sessionKey="IdAndCidSame"> - <forward name="success" path="putOriginalMessageInSession" /> - </PutInSessionPipe> + &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; - <PutInSessionPipe name="putOriginalMessageInSession" sessionKey="incomingMessage"/> + &lt;PutInSessionPipe name=&quot;putOriginalMessageInSession&quot; sessionKey=&quot;incomingMessage&quot;/&gt; - <pipe name="displayKeys" className="org.frankframework.pipes.ReplacerPipe" - getInputFromFixedValue="branch [?{BRANCH}] Original Id [?{MID}] cid [?{CID}] id=cid [?{SAME}]"> - <param name="BRANCH" sessionKey="originalMessage" xpathExpression="*&#47;@branch" /> - <param name="MID" sessionKey="id" /> - <param name="CID" sessionKey="cid" /> - <param name="SAME" sessionKey="IdAndCidSame" /> - <forward name="success" path="EXIT" /> - </pipe> - } + &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> @@ -12972,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> @@ -13090,7 +14304,7 @@ <p> In addition to regular parameters for filesystem senders, it is possible to set custom extended attributes on files by prefixing parameter names with - FileAttribute.. + <code>FileAttribute.</code>. This prefix will be not be part of the actual metadata property name. </p> <p> @@ -13125,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/> @@ -13520,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. @@ -13798,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. @@ -13853,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 + + + + + + + @@ -14113,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. @@ -14419,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. + + + + + + + + + + @@ -14698,6 +16036,11 @@ + + + Location to a <code>jndi.properties</code> file for additional EMS (SSL) properties + + @@ -14856,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 @@ -15268,7 +16611,7 @@ - Whether the LocalFileSystem tries to create the root folder if it doesn't exist yet. + Whether the LocalFileSystem tries to create the root folder if it doesn't exist yet. Default: false @@ -15279,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. @@ -15287,17 +16630,17 @@ - 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 @@ -15307,32 +16650,32 @@ - 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> @@ -15342,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> @@ -15389,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 @@ -15564,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 @@ -15667,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 @@ -15675,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 @@ -15842,7 +17185,7 @@ <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. + not remove or replace, for instance, a single <code>'&amp;'</code> character. </p> <p> See also: @@ -16087,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 + + @@ -16493,7 +17841,7 @@ - namespace definitions 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. @@ -16783,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. @@ -16858,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> @@ -17278,6 +18626,14 @@ + + + + + + + + @@ -17379,6 +18735,15 @@ + + + + + + + + + @@ -17660,6 +19025,14 @@ + + + + + + + + @@ -18050,7 +19423,7 @@ - Used for StoredProcedure OUT parameters when the database type is a {@code CURSOR} or java.sql.JDBCType#REF_CURSOR. + 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;) @@ -18184,6 +19557,14 @@ + + + + + + + + @@ -18480,94 +19861,9 @@ - - - Folder that is scanned for files. If not set, the root is scanned - - - - - 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 - - - - - 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 - - - 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. @@ -18609,7 +19905,7 @@ 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> @@ -18742,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> @@ -18837,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. @@ -18870,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 @@ -18882,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 @@ -19142,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 @@ -19172,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 @@ -19192,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. @@ -19426,9 +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 a {@code hideRegex} set on one pipe affects all pipes in the pipeline (and multiple values in different pipes are combined into a single regex). + 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} for how regular expressions are matched and replaced. + with <code>mode = 0</code> for how regular expressions are matched and replaced. @@ -19515,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 @@ -19538,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 @@ -19573,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