diff --git a/Dockerfile b/Dockerfile index ca97d93..a2608d1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -ARG FF_VERSION=9.1.0-20250328.042332 +ARG FF_VERSION=9.3.0-20251004.042332 FROM frankframework/frankframework:${FF_VERSION} AS ff-base diff --git a/frank-runner.properties b/frank-runner.properties index 4dfe934..be3e86d 100644 --- a/frank-runner.properties +++ b/frank-runner.properties @@ -1 +1 @@ -ff.version=9.1.0-20250328.042332 \ No newline at end of file +ff.version=9.3.0-20251004.042332 \ No newline at end of file diff --git a/src/main/FrankConfig.xsd b/src/main/FrankConfig.xsd index 9705025..a96a4fd 100644 --- a/src/main/FrankConfig.xsd +++ b/src/main/FrankConfig.xsd @@ -1,6 +1,6 @@ - + Container of Adapters that belong together. @@ -42,14 +42,15 @@ - The Adapter is the central manager in the framework. It has knowledge of both + The Adapter is the central manager in the framework. It has knowledge both of the Receivers as well as the PipeLine and statistics. The Adapter is the class that is responsible for configuring, initializing and accessing/activating Receivers, Pipelines, statistics etc. - <br/> + <p> An Adapter receives a specific type of messages and processes them. It has Receivers that receive the messages and a PipeLine that transforms the incoming messages. Each adapter is part of a Configuration. - <br/> + </p> + <p> If an adapter can receive its messages through multiple channels (e.g. RESTful HTTP requests, incoming files, etc), each channel appears as a separate Receiver nested in the adapter. Each Receiver is also responsible for dealing with @@ -59,10 +60,159 @@ and that are not processed by the PipeLine. If the exit state is ERROR, the result message may not be usable by the calling system. This can be fixed by adding an errorMessageFormatter that formats the result message if the state is ERROR. - <br/><br/> + </p> + <p> Adapters gather statistics about the messages they process. - <br/> - Adapters can process messages in parallel. They are thread-safe. + </p> + <p> + Adapters can process messages in parallel. They are thread-safe. + </p> + <h2>Error Handling in Adapters</h2> + <p> + When an exception occurs in the execution of the Adapter pipeline, you can configure the listener to return + a formatter error message using an ErrorMessageFormatter or to throw an exception (see org.frankframework.receivers.JavaListener#setOnException(RequestReplyListener.ExceptionHandlingMethod), + org.frankframework.receivers.FrankListener#setOnException(RequestReplyListener.ExceptionHandlingMethod), org.frankframework.http.PushingListenerAdapter#setOnException(RequestReplyListener.ExceptionHandlingMethod)). + + </p> + <p> + Listeners that do not return a reply will roll back the transaction (if any) and after a maximum number of + retries, move the message to an error storage. + </p> + <p> + When one adapter calls another adapter using a org.frankframework.senders.FrankSender or + org.frankframework.senders.IbisLocalSender, and the adapter returns a formatted error message, + the SenderPipe can either use the <code>exception</code> forward or pick a forward based on the pipeline <code>exitCode</code>. + The default <code>exitCode</code> in case of an error is <pre>500</pre>, but you can set a different <code>exitCode</code> + in the <pre>PipeLineSession</pre>, for instance by passing it as a org.frankframework.parameters.NumberParameter to an + org.frankframework.pipes.ExceptionPipe. The <code>exitCode</code> has to be a numerical value. + </p> + + <h3>Error Handling Example 1 - Call Sub-Adapter Direct</h3> + + This example uses a org.frankframework.senders.FrankSender to call another adapter without the overhead of + a listener. The callee sets an <code>exitCode</code> on error, so the caller can choose a different path. + + <h4>Calling Adapter:</h4> + <p> + <pre> <code>&lt;Adapter name=&quot;ErrorHandling-Example-1&quot;&gt; + &lt;Receiver&gt; + &lt;!-- Listener omitted, not relevant for the example --&gt; + &lt;/Receiver&gt; + &lt;Pipeline&gt; + &lt;Exits&gt; + &lt;Exit name=&quot;done&quot; state=&quot;SUCCESS&quot;/&gt; + &lt;Exit name=&quot;error&quot; state=&quot;ERROR&quot;/&gt; + &lt;/Exits&gt; + &lt;SenderPipe name=&quot;Call Subadapter To Test&quot;&gt; + &lt;FrankSender scope=&quot;ADAPTER&quot; target=&quot;Validate-Message&quot;/&gt; + &lt;Forward name=&quot;42&quot; path=&quot;error&quot;/&gt; + &lt;/SenderPipe&gt; + &lt;DataSonnetPipe name=&quot;Extract Name&quot; styleSheetName=&quot;stylesheets/buildResponse.jsonnet&quot;/&gt; + &lt;/Pipeline&gt; + &lt;/Adapter&gt;</code></pre> + </p> + + <h4>Sub Adapter:</h4> + <p> + <pre> <code>&lt;Adapter name=&quot;Validate-Message&quot;&gt; + &lt;DataSonnetErrorMessageFormatter styleSheetName=&quot;stylesheets/BuildErrorMessage.jsonnet&quot;/&gt; + &lt;Pipeline&gt; + &lt;Exits&gt; + &lt;Exit name=&quot;done&quot; state=&quot;SUCCESS&quot;/&gt; + &lt;Exit name=&quot;error&quot; state=&quot;ERROR&quot;/&gt; + &lt;/Exits&gt; + &lt;!-- For simplicity of the example we assume the input message is valid if it contains a single item in an array 'results' --&gt; + &lt;SwitchPipe name=&quot;Check Success&quot; jsonPathExpression='concat(&quot;result-count=&quot;, $.results.length())' notFoundForwardName=&quot;result-count-too-many&quot;/&gt; + + &lt;!-- For simplicity we return the input unmodified in case of success. A realistic adapter might fetch a message remotely and return that after validations --&gt; + &lt;EchoPipe name=&quot;result-count=1&quot; getInputFromSessionKey=&quot;originalMessage&quot;&gt; + &lt;Forward name=&quot;success&quot; path=&quot;done&quot;/&gt; + &lt;/EchoPipe&gt; + + &lt;!-- No results: use this ExceptionPipe to pass parameters to the error message formatter and set an exitCode --&gt; + &lt;ExceptionPipe name=&quot;result-count=0&quot;&gt; + &lt;!-- When we do not set exitCode it will default to 500 when an adapter ends with an exception --&gt; + &lt;NumberParam name=&quot;exitCode&quot; value=&quot;42&quot;/&gt; + &lt;NumberParam name=&quot;errorCode&quot; value=&quot;-1&quot;/&gt; + &lt;Param name=&quot;errorMessage&quot; value=&quot;No results found&quot;/&gt; + &lt;/ExceptionPipe&gt; + + &lt;!-- Too many results: use this ExceptionPipe to pass different parameters to the error message formatter and set an exitCode --&gt; + &lt;ExceptionPipe name=&quot;result-count-too-many&quot;&gt; + &lt;NumberParam name=&quot;exitCode&quot; value=&quot;42&quot;/&gt; + &lt;NumberParam name=&quot;errorCode&quot; value=&quot;2&quot;/&gt; + &lt;Param name=&quot;errorMessage&quot; value=&quot;Too many results found, expected only single result&quot;/&gt; + &lt;/ExceptionPipe&gt; + &lt;/Pipeline&gt; + &lt;/Adapter&gt;</code></pre> + </p> + + <h3>Error Handling Example 2 - Call Sub-Adapter via a Listener</h3> + + This example uses a org.frankframework.senders.FrankSender to call another adapter via a org.frankframework.receivers.FrankListener. + Instead of a FrankSender / FrankListener, an org.frankframework.senders.IbisLocalSender / org.frankframework.receivers.JavaListener + pair can also be used to the same effect. + In this example we use the <code>exception</code> forward on the org.frankframework.pipes.SenderPipe to take the error-path after + an error result, but we could also use the <code>exitCode</code> instead as in the previous example. When + a sub-adapter ends with a state <code>ERROR</code>, and the calling org.frankframework.pipes.SenderPipe does not have a forward + for the <code>exitCode</code> returned from the sub-adapter, but does have an <code>exception</code> forward, then + the <code>exception</code> forward is chosen. + + <h4>Calling Adapter:</h4> + <p> + <pre> <code>&lt;Adapter name=&quot;ErrorHandling-Example-2&quot;&gt; + &lt;Receiver&gt; + &lt;!-- Listener omitted, not relevant for the example --&gt; + &lt;/Receiver&gt; + &lt;Pipeline&gt; + &lt;Exits&gt; + &lt;Exit name=&quot;done&quot; state=&quot;SUCCESS&quot;/&gt; + &lt;Exit name=&quot;error&quot; state=&quot;ERROR&quot;/&gt; + &lt;/Exits&gt; + &lt;SenderPipe name=&quot;Call Subadapter To Test&quot;&gt; + &lt;FrankSender scope=&quot;LISTENER&quot; target=&quot;Validate-Message&quot;/&gt; + &lt;Forward name=&quot;exception&quot; path=&quot;error&quot;/&gt; + &lt;/SenderPipe&gt; + &lt;DataSonnetPipe name=&quot;Extract Name&quot; styleSheetName=&quot;stylesheets/buildResponse.jsonnet&quot;/&gt; + &lt;/Pipeline&gt; + &lt;/Adapter&gt;</code></pre> + </p> + + <h4>Sub Adapter:</h4> + <p> + <pre> <code>&lt;Adapter name=&quot;Validate-Message&quot;&gt; + &lt;Receiver&gt; + &lt;!-- We need to set onException=&quot;format_and_return&quot; to make sure error message is returned instead of an exception thrown --&gt; + &lt;FrankListener name=&quot;Validate-Message&quot; onException=&quot;format_and_return&quot;/&gt; + &lt;/Receiver&gt; + &lt;DataSonnetErrorMessageFormatter styleSheetName=&quot;stylesheets/BuildErrorMessage.jsonnet&quot;/&gt; + &lt;Pipeline&gt; + &lt;Exits&gt; + &lt;Exit name=&quot;done&quot; state=&quot;SUCCESS&quot;/&gt; + &lt;Exit name=&quot;error&quot; state=&quot;ERROR&quot;/&gt; + &lt;/Exits&gt; + &lt;!-- For simplicity of the example we assume the input message is valid if it contains a single item in an array 'results' --&gt; + &lt;SwitchPipe name=&quot;Check Success&quot; jsonPathExpression='concat(&quot;result-count=&quot;, $.results.length())' notFoundForwardName=&quot;result-count-too-many&quot;/&gt; + + &lt;!-- For simplicity we return the input unmodified in case of success. A realistic adapter might fetch a message remotely and return that after validations --&gt; + &lt;EchoPipe name=&quot;result-count=1&quot; getInputFromSessionKey=&quot;originalMessage&quot;&gt; + &lt;Forward name=&quot;success&quot; path=&quot;done&quot;/&gt; + &lt;/EchoPipe&gt; + + &lt;!-- No results: use this ExceptionPipe to pass parameters to the error message formatter --&gt; + &lt;ExceptionPipe name=&quot;result-count=0&quot;&gt; + &lt;NumberParam name=&quot;errorCode&quot; value=&quot;-1&quot;/&gt; + &lt;Param name=&quot;errorMessage&quot; value=&quot;No results found&quot;/&gt; + &lt;/ExceptionPipe&gt; + + &lt;!-- Too many results: use this ExceptionPipe to pass different parameters to the error message formatter --&gt; + &lt;ExceptionPipe name=&quot;result-count-too-many&quot;&gt; + &lt;NumberParam name=&quot;errorCode&quot; value=&quot;2&quot;/&gt; + &lt;Param name=&quot;errorMessage&quot; value=&quot;Too many results found, expected only single result&quot;/&gt; + &lt;/ExceptionPipe&gt; + &lt;/Pipeline&gt; + &lt;/Adapter&gt;</code></pre> + </p> @@ -108,7 +258,14 @@ If set to <code>true</code>, the length of the message is shown in the msg log instead of the content of the message Default: <code>false</code> - + + + An optional field for documentation-purposes where you can add a reference to the design-document + used for the design of this adapter. + <br/> + Setting this field has no impact on the behaviour of the Adapter. + + @@ -339,7 +496,7 @@ If set to 0, then there is no delay after messages that had an error. </p> <p> - If this is not set on the receiver, then a default is taken from the configuration property `${receiver.defaultMaxBackoffDelay}` which + If this is not set on the receiver, then a default is taken from the configuration property <pre>${receiver.defaultMaxBackoffDelay}</pre> which defaults to 60 seconds. </p> @@ -401,7 +558,7 @@ - Name of the first pipe to execute when a message is to be processed Default: first pipe of the pipeline + Name of the first pipe to execute when a message is to be processed. Default: first pipe of the pipeline @@ -550,21 +707,21 @@ The <code>transactionAttribute</code> declares transactional behavior of execution. It applies both to database transactions and XA transactions. The pipeline uses this to start a new transaction or suspend the current one when required. - For developers: it is equal to <a href=\"https://docs.oracle.com/javaee/7/tutorial/transactions003.htm\">EJB transaction attribute</a>. + For developers: it is equal to <a href="https://docs.oracle.com/javaee/7/tutorial/transactions003.htm">EJB transaction attribute</a>. Possible values for transactionAttribute: - <table border=\"1\"> + <table border="1"> <tr><th>transactionAttribute</th><th>callers Transaction</th><th>Pipeline excecuted in Transaction</th></tr> - <tr><td colspan=\"1\" rowspan=\"2\">Required</td> <td>none</td><td>T2</td></tr> + <tr><td colspan="1" rowspan="2">Required</td> <td>none</td><td>T2</td></tr> <tr><td>T1</td> <td>T1</td></tr> - <tr><td colspan=\"1\" rowspan=\"2\">RequiresNew</td> <td>none</td><td>T2</td></tr> + <tr><td colspan="1" rowspan="2">RequiresNew</td> <td>none</td><td>T2</td></tr> <tr><td>T1</td> <td>T2</td></tr> - <tr><td colspan=\"1\" rowspan=\"2\">Mandatory</td> <td>none</td><td>error</td></tr> + <tr><td colspan="1" rowspan="2">Mandatory</td> <td>none</td><td>error</td></tr> <tr><td>T1</td> <td>T1</td></tr> - <tr><td colspan=\"1\" rowspan=\"2\">NotSupported</td><td>none</td><td>none</td></tr> + <tr><td colspan="1" rowspan="2">NotSupported</td><td>none</td><td>none</td></tr> <tr><td>T1</td> <td>none</td></tr> - <tr><td colspan=\"1\" rowspan=\"2\">Supports</td> <td>none</td><td>none</td></tr> + <tr><td colspan="1" rowspan="2">Supports</td> <td>none</td><td>none</td></tr> <tr><td>T1</td> <td>T1</td></tr> - <tr><td colspan=\"1\" rowspan=\"2\">Never</td> <td>none</td><td>none</td></tr> + <tr><td colspan="1" rowspan="2">Never</td> <td>none</td><td>none</td></tr> <tr><td>T1</td> <td>error</td></tr> </table> Default: Supports @@ -577,6 +734,11 @@ Timeout (in seconds) of transaction started to process a message. Default: <code>0</code> (use system default) + + + Name of the sender or the listener + + @@ -599,21 +761,6 @@ - - - - - - - - - - - - - Name of the sender or the listener - - @@ -805,7 +952,7 @@ - + @@ -871,7 +1018,7 @@ A JmsRealm is a definition of a JMS provider, and is kind of a utility - class to prevent the tedeous work of repeatedly defining all parameters + class to prevent the tedious work of repeatedly defining all parameters to connect to a queue or topic. <br/> This class is not an extension of JNDIBase, which would be logical, because @@ -1011,6 +1158,7 @@ + @@ -1039,6 +1187,41 @@ + + Parameter that resolves it's value to either <code>true</code> or <code>false</code>. + <p/> + Generic parameter definition. + + <p> + A parameter resembles an attribute. However, while attributes get their value at configuration-time, + parameters get their value at the time of processing the message. Value can be retrieved from the message itself, + a fixed value, or from the pipelineSession. If this does not result in a value (or if neither of these is specified), a default value + can be specified. If an XPathExpression, XSLT stylesheet or JSONPathExpression is specified, it will be applied to the message, the value retrieved + from the pipelineSession or the fixed value specified. If the transformation produces no output, the default value + of the parameter is taken if provided. + </p> + Examples: + <pre><code> + stored under SessionKey 'TransportInfo': + &lt;transportinfo&gt; + &lt;to&gt;***@zonnet.nl&lt;/to&gt; + &lt;to&gt;***@zonnet.nl&lt;/to&gt; + &lt;cc&gt;***@zonnet.nl&lt;/cc&gt; + &lt;/transportinfo&gt; + + to obtain all 'to' addressees as a parameter: + sessionKey="TransportInfo" + xpathExpression="transportinfo/to" + type="xml" + + Result: + &lt;to&gt;***@zonnet.nl&lt;/to&gt; + &lt;to&gt;***@zonnet.nl&lt;/to&gt; + </code></pre> + + N.B. to obtain a fixed value: a non-existing 'dummy' <code>sessionKey</code> in combination with the fixed value in <code>defaultValue</code> is used traditionally. + The current version of parameter supports the <code>value</code> attribute, that is sufficient to set a fixed value.<br><br><b>TIP</b><p><code>!false</code> also resolves to <code>true</code>, and <code>!true</code> is seen as <code>false</code>.</p> + @@ -1056,6 +1239,22 @@ + + + A parameter which represents its value as a Message with mimetype <pre>application/json</pre>. If the + derived value was of type <pre>application/xml</pre> then it will be converted into JSON using the same rules as the + org.frankframework.pipes.JsonPipe. + If the derived value of the parameter was neither XML nor JSON format then a JSON will be constructed that looks like + <code>{&quot;paramName&quot;:value}</code>. (The value will be quoted if it was not a number or boolean value). + + + + + + + + + @@ -1110,13 +1309,13 @@ - The value of the parameter, or the base for transformation using xpathExpression or stylesheet, or formatting. + The value of the parameter, or the base for transformation using xpathExpression, jpathExpression or stylesheet, or formatting. Key of a PipelineSession-variable. <br/>If specified, the value of the PipelineSession variable is used as input for - the xpathExpression or stylesheet, instead of the current input message. <br/>If no xpathExpression or stylesheet are + the xpathExpression, jpathExpression or stylesheet, instead of the current input message. <br/>If no xpathExpression, jpathExpression or stylesheet are specified, the value itself is returned. <br/>If the value '*' is specified, all existing sessionkeys are added as parameter of which the name starts with the name of this parameter. <br/>If also the name of the parameter has the value '*' then all existing sessionkeys are added as parameter (except tsReceived) @@ -1132,6 +1331,11 @@ Instead of a fixed <code>sessionKey</code> it's also possible to use a XPath expression applied to the input message to extract the name of the session-variable. + + + Instead of a fixed <code>sessionKey</code> it's also possible to use a JPath expression applied to the input message to extract the name of the session-variable. + + URL to a stylesheet that wil be applied to the contents of the message or the value of the session-variable. @@ -1142,6 +1346,14 @@ the XPath expression to extract the parameter value from the (xml formatted) input or session-variable. + + + The JPath expression to extract the parameter value from the input or session-variable. + The input should be JSON or XML formatted, if it is XML formatter a simple XML-to-JSON conversion is done. + When <code>jsonPathExpression</code> is set, then the value of the parameter will be derived using the same order + of precedence as with <code>xpathExpression</code>. + + If set to <code>2</code> or <code>3</code> a Saxon (net.sf.saxon) xslt processor 2.0 or 3.0 respectively will be used, otherwise xslt processor 1.0 (org.apache.xalan). <code>0</code> will auto-detect Default: 0 @@ -1269,6 +1481,11 @@ + + + + + @@ -1337,6 +1554,18 @@ + + + Listener for AMQP 1.0 end-points. + + + + + + + + + Listener that allows a Receiver to receive messages as a REST webservice. @@ -1348,7 +1577,7 @@ The generated OpenAPI specifications have <code>servers</code> and <code>paths</code> objects and therefore they document the full URLs of the provided services. <p> - It is possible to automatically generate eTags over the listener result. This can be controlled by globally + It is possible to automatically generate eTags over the listener result. This can be controlled by globally setting the property <code>api.etag.enabled</code> or by setting the attribute <code>updateEtag="true"</code>. When enabled the listener will respond to the <code>If-Match</code>, <code>If-None-Match</code> headers and may return status code 304. <p> @@ -1363,7 +1592,14 @@ <li><code>etag.cache.username</code></li> <li><code>etag.cache.password</code></li> <li><code>etag.cache.authalias</code></li> - </ul><br><br><b>TIP</b><p>The OPTIONS verb will automatically be handled by the framework.</p> + </ul> + + Custom pages can be added to the console (using a comma separated list, no spaces) with the following property + <code>customViews.names=MyApplication</code>. + + Specify details for each view, the url is either a relative path from the web-content folder or an external url, eq. <code>http://google.com/</code>. + <code>customViews.MyApplication.name=Custom View</code> + <code>customViews.MyApplication.url=myWebapp</code><br><br><b>TIP</b><p>The OPTIONS verb will automatically be handled by the framework.</p><br><b>TIP</b><p>Its possible to change the URL mapping from /api to /rest (or use both) for easy transitions from the RestListener.</p> @@ -1385,7 +1621,7 @@ 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> @@ -1407,7 +1643,7 @@ listener that looks in a FileSystem for files. When a file is found, it is moved to an in-process folder, so that it isn't found more than once. <br/> - The information specified by #setMessageType(IMessageType) is then passed to the pipeline.<br><br><b>INFO</b><p>To avoid problems with duplicate filenames in folders like the <code>errorFolder</code> or <code>processedFolder</code>, + The information specified by <code>messageType</code> is then passed to the pipeline.<br><br><b>INFO</b><p>To avoid problems with duplicate filenames in folders like the <code>errorFolder</code> or <code>processedFolder</code>, you should configure either <code>overwrite=&quot;true&quot;</code>, configure <code>numberOfBackups</code> to a value larger than 0, or configure an <code>inProcessFolder</code> and <code>fileTimeSensitive=&quot;true&quot;</code>. These options can be used together as well.</p><br><b>WARNING</b><p>In addition to the above, prior to release 9.0 it was not sufficient to configure <code>inProcessFolder</code> and <code>fileTimeSensitive</code> @@ -1423,7 +1659,72 @@ - ESB (Enterprise Service Bus) extension of JmsListener. + ESB (Enterprise Service Bus) extension of JmsListener. + + 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><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 for committing. + 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.</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, that in turn sends the message to + whatever it is configured to.</p> + + <p>You can add parameters to the JmsListener, the values will be added as Headers to the JMS response message.</p> + + <p><b>Notice:</b> the JmsListener is ONLY capable of processing + jakarta.jms.TextMessages and jakarta.jms.BytesMessage<br/><br/> + </p> + + JMSListener re-implemented as a pushing listener rather than a pulling listener. + The JMS messages have to come in from an external source: an MDB or a Spring + message container. + + This version of the <code>JmsListener</code> supports distributed transactions using the XA-protocol. + No special action is required to have the listener join the transaction. + </p><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.</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><b>Notice:</b> the JmsListener is ONLY capable of processing + jakarta.jms.TextMessages and jakarta.jms.BytesMessage<br/><br/> + </p> + + Provides functions for jms connections, queues and topics and acts as a facade + to hide for clients whether a <code>Queue</code> or <code>Topic</code> is used. + <br/> + The <code>destinationType</code> field specifies which type should be used.<br/> + This class sends messages with JMS. @@ -1468,7 +1769,7 @@ listener that looks in a FileSystem for files. When a file is found, it is moved to an in-process folder, so that it isn't found more than once. <br/> - The information specified by #setMessageType(IMessageType) is then passed to the pipeline.<br><br><b>INFO</b><p>To avoid problems with duplicate filenames in folders like the <code>errorFolder</code> or <code>processedFolder</code>, + The information specified by <code>messageType</code> is then passed to the pipeline.<br><br><b>INFO</b><p>To avoid problems with duplicate filenames in folders like the <code>errorFolder</code> or <code>processedFolder</code>, you should configure either <code>overwrite=&quot;true&quot;</code>, configure <code>numberOfBackups</code> to a value larger than 0, or configure an <code>inProcessFolder</code> and <code>fileTimeSensitive=&quot;true&quot;</code>. These options can be used together as well.</p><br><b>WARNING</b><p>In addition to the above, prior to release 9.0 it was not sufficient to configure <code>inProcessFolder</code> and <code>fileTimeSensitive</code> @@ -1493,10 +1794,77 @@ <tr><td>jmsRealm</td><td>&nbsp;</td><td>"qcf_tibco_p2p_ff"</td></tr> <tr><td>messageProtocol</td><td>protocol of ESB service to be called. Possible values <ul> - <li>"FF": Fire & Forget protocol</li> + <li>"FF": Fire &amp; Forget protocol</li> <li>"RR": Request-Reply protocol</li> </ul></td><td>"FF"</td></tr> - </table></p> + </table></p> + + ESB (Enterprise Service Bus) extension of JmsListener. + + 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><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 for committing. + 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.</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, that in turn sends the message to + whatever it is configured to.</p> + + <p>You can add parameters to the JmsListener, the values will be added as Headers to the JMS response message.</p> + + <p><b>Notice:</b> the JmsListener is ONLY capable of processing + jakarta.jms.TextMessages and jakarta.jms.BytesMessage<br/><br/> + </p> + + JMSListener re-implemented as a pushing listener rather than a pulling listener. + The JMS messages have to come in from an external source: an MDB or a Spring + message container. + + This version of the <code>JmsListener</code> supports distributed transactions using the XA-protocol. + No special action is required to have the listener join the transaction. + </p><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.</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><b>Notice:</b> the JmsListener is ONLY capable of processing + jakarta.jms.TextMessages and jakarta.jms.BytesMessage<br/><br/> + </p> + + Provides functions for jms connections, queues and topics and acts as a facade + to hide for clients whether a <code>Queue</code> or <code>Topic</code> is used. + <br/> + The <code>destinationType</code> field specifies which type should be used.<br/> + This class sends messages with JMS. @@ -1519,11 +1887,20 @@ Use this listener to receive messages from other adapters or a scheduler within the same Frank-application or from other components residing in the same JVM. JavaListeners can receive calls made via de ibis-servicedispatcher, which should be located on the JVM classpath to receive calls from other components in the JVM. If you want to call an adapter in the same Frank-application, consider using the IbisLocalSender. - <br/> + <p> To understand what this listener does exactly, please remember that the Frank!Framework is a Java application. The JavaListener listens to Java method calls. You can issue Java method calls using a IbisJavaSender (external call) or IbisLocalSender (internal call). - For more information see the ibis-servicedispatcher project. + </p> + <p> + Calling the JavaListener via the IbisJavaSender forces all request messages to be passed as strings without + metadata. + </p> + <p> + When calling the JavaListener via the IbisLocalSender all messages are passed in their native format, + retaining all their metadata. + </p> + <p> @@ -1588,7 +1965,41 @@ <p><b>Notice:</b> the JmsListener is ONLY capable of processing jakarta.jms.TextMessages and jakarta.jms.BytesMessage<br/><br/> - </p> + </p> + + JMSListener re-implemented as a pushing listener rather than a pulling listener. + The JMS messages have to come in from an external source: an MDB or a Spring + message container. + + This version of the <code>JmsListener</code> supports distributed transactions using the XA-protocol. + No special action is required to have the listener join the transaction. + </p><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.</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><b>Notice:</b> the JmsListener is ONLY capable of processing + jakarta.jms.TextMessages and jakarta.jms.BytesMessage<br/><br/> + </p> + + Provides functions for jms connections, queues and topics and acts as a facade + to hide for clients whether a <code>Queue</code> or <code>Topic</code> is used. + <br/> + The <code>destinationType</code> field specifies which type should be used.<br/> + This class sends messages with JMS. @@ -1598,6 +2009,21 @@ + + + Experimental IListener for listening to a topic in + a Kafka instance. + The Kafka integration is still under development so do not + currently use unless you wish to participate in this development. + + + + + + + + + Read messages from the IBISSTORE database table previously stored by a MessageStoreSender. @@ -1642,11 +2068,13 @@ Links to <a href="https://www.eclipse.org/paho/files/javadoc" target="_blank">https://www.eclipse.org/paho/files/javadoc</a> are opened in a new window/tab because the response from eclipse.org contains header X-Frame-Options:SAMEORIGIN which will make the browser refuse to open the link inside this frame. - Requires a resource to be configured. Example `resources.yml`: + Requires a resource to be configured. Example <pre>resources.yml</pre>: <pre><code>mqtt: - name: &quot;my-connection&quot; - type: &quot;org.frankframework.jdbc.datasource.MqttClientSettings&quot; url: &quot;tcp://host:port&quot; + username: &quot;&quot; + password: &quot;&quot; + authalias: &quot;${property.name.here}&quot; properties: automaticReconnect: &quot;true&quot; cleanSession: &quot;false&quot;</code></pre> @@ -1654,7 +2082,7 @@ The clientId is automatically determined from <code>transactionmanager.uid</code>, but can optionally be overwritten. Be aware that the clientId must be unique for each instance of the framework. <br><br> - Inbound and outbound messages are persisted while they are in flight to prevent data loss. The default is an in memory store, but the `persistenceDirectory` + Inbound and outbound messages are persisted while they are in flight to prevent data loss. The default is an in memory store, but the <pre>persistenceDirectory</pre> flag can be used to set the disk storage location. @@ -1694,7 +2122,13 @@ </p> <p><b>Notice:</b> the JmsListener is ONLY capable of processing <code>jakarta.jms.TextMessage</code>s <br/><br/> - </p> + </p> + + Provides functions for jms connections, queues and topics and acts as a facade + to hide for clients whether a <code>Queue</code> or <code>Topic</code> is used. + <br/> + The <code>destinationType</code> field specifies which type should be used.<br/> + This class sends messages with JMS. @@ -1732,7 +2166,13 @@ <p><b>Notice:</b> the JmsListener is ONLY capable of processing jakarta.jms.TextMessages and jakarta.jms.BytesMessage<br/><br/> - </p> + </p> + + Provides functions for jms connections, queues and topics and acts as a facade + to hide for clients whether a <code>Queue</code> or <code>Topic</code> is used. + <br/> + The <code>destinationType</code> field specifies which type should be used.<br/> + This class sends messages with JMS. @@ -1755,27 +2195,6 @@ - - - Listener that allows a Receiver to receive messages as a REST webservice. - Prepends the configured URI pattern with <code>rest/</code>. When you are writing a new Frank config, you are recommended - to use an ApiListener instead. You can find all serviced URI patterns - in the Frank!Console: main menu item Webservice, heading Available REST Services. - - <p> - Note: - Servlets' multipart configuration expects a Content-Type of <code>multipart/form-data</code> (see http://docs.oracle.com/javaee/6/api/javax/servlet/annotation/MultipartConfig.html). - So do not use other multipart content types like <code>multipart/related</code> - </p> - - - - - - - - - File listener for an SMB2 or SMB3 share. @@ -1783,7 +2202,7 @@ listener that looks in a FileSystem for files. When a file is found, it is moved to an in-process folder, so that it isn't found more than once. <br/> - The information specified by #setMessageType(IMessageType) is then passed to the pipeline.<br><br><b>INFO</b><p>To avoid problems with duplicate filenames in folders like the <code>errorFolder</code> or <code>processedFolder</code>, + The information specified by <code>messageType</code> is then passed to the pipeline.<br><br><b>INFO</b><p>To avoid problems with duplicate filenames in folders like the <code>errorFolder</code> or <code>processedFolder</code>, you should configure either <code>overwrite=&quot;true&quot;</code>, configure <code>numberOfBackups</code> to a value larger than 0, or configure an <code>inProcessFolder</code> and <code>fileTimeSensitive=&quot;true&quot;</code>. These options can be used together as well.</p><br><b>WARNING</b><p>In addition to the above, prior to release 9.0 it was not sufficient to configure <code>inProcessFolder</code> and <code>fileTimeSensitive</code> @@ -1823,7 +2242,7 @@ listener that looks in a FileSystem for files. When a file is found, it is moved to an in-process folder, so that it isn't found more than once. <br/> - The information specified by #setMessageType(IMessageType) is then passed to the pipeline.<br><br><b>INFO</b><p>To avoid problems with duplicate filenames in folders like the <code>errorFolder</code> or <code>processedFolder</code>, + The information specified by <code>messageType</code> is then passed to the pipeline.<br><br><b>INFO</b><p>To avoid problems with duplicate filenames in folders like the <code>errorFolder</code> or <code>processedFolder</code>, you should configure either <code>overwrite=&quot;true&quot;</code>, configure <code>numberOfBackups</code> to a value larger than 0, or configure an <code>inProcessFolder</code> and <code>fileTimeSensitive=&quot;true&quot;</code>. These options can be used together as well.</p><br><b>WARNING</b><p>In addition to the above, prior to release 9.0 it was not sufficient to configure <code>inProcessFolder</code> and <code>fileTimeSensitive</code> @@ -1851,6 +2270,72 @@ + + 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><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 for committing. + 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.</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, that in turn sends the message to + whatever it is configured to.</p> + + <p>You can add parameters to the JmsListener, the values will be added as Headers to the JMS response message.</p> + + <p><b>Notice:</b> the JmsListener is ONLY capable of processing + jakarta.jms.TextMessages and jakarta.jms.BytesMessage<br/><br/> + </p> + + JMSListener re-implemented as a pushing listener rather than a pulling listener. + The JMS messages have to come in from an external source: an MDB or a Spring + message container. + + This version of the <code>JmsListener</code> supports distributed transactions using the XA-protocol. + No special action is required to have the listener join the transaction. + </p><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.</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><b>Notice:</b> the JmsListener is ONLY capable of processing + jakarta.jms.TextMessages and jakarta.jms.BytesMessage<br/><br/> + </p> + + Provides functions for jms connections, queues and topics and acts as a facade + to hide for clients whether a <code>Queue</code> or <code>Topic</code> is used. + <br/> + The <code>destinationType</code> field specifies which type should be used.<br/> + This class sends messages with JMS. + @@ -1875,7 +2360,7 @@ <li>SOAP protocol is stored under a session key 'soapProtocol'</li> <li>SOAP action is stored under a session key 'SOAPAction'</li> </ul> - and for each response a multipart message is constructed if a 'multipart'-XML is provided in sessionKey specified by multipartXmlSessionKey. + and for each response a multipart message is constructed if a 'multipart'-XML is provided in sessionKey specified by <code>multipartXmlSessionKey</code>. @@ -1887,6 +2372,91 @@ + + + + + + + + Name of the AMQP connection in the <pre>amqp</pre> section of the <code>resources.yaml</code> file. + + + + + Timeout in seconds for sending messages and receiving replies. Default: <code>30</code> + + + + + Set the type of address to which messages are being sent, TOPIC or QUEUE. + For <pre>MessageProtocol#RR</pre> the type will always be QUEUE. Default: <pre>QUEUE</pre> + + + + + + + + Set the address (name of the queue or topic) on which to send messages + + + + + If the adapter needs to send a reply message, and the address of the reply-queue is not + dynamically set on the message, then a <code>replyAddressName</code> can be configured for the + queue on which to send the reply message. If a <code>replyAddressName</code> is configured but + the message does have a dynamic reply-queue, then the dynamic reply-queue is used and the + <code>replyAddressName</code> is ignored. + + + + + If <pre>true</pre>, then listen for durable messages on a topic + + + + + Set the message time-to-live, in milliseconds, for any reply messages sent by this listener. Default: <pre>-1</pre>ms, meaning no expiry. + + + + + Receive message as Fire-and-Forget, or as Request-Reply Default: <pre>FF</pre> + + + + + + + + When the listener is durable, then a subscriptionName should be set so the message broker + can keep track of which subscribers have already received each message. + + + + + + When an exception happens in the execution of the pipeline, with <code>RETHROW</code> the + exception is thrown to the caller. With <code>FORMAT_AND_RETURN</code> the exception is processed + by the Adapter#setErrorMessageFormatter(IErrorMessageFormatter) and returned as result-message + of the Adapter. + + <br/> + The default is currently <code>RETHROW</code> for backwards compatibility but will become <code>FORMAT_AND_RETURN</code> in a future version. Default: RETHROW + + + + + + + + The functional name of the object. + + + + + @@ -2105,7 +2675,20 @@ Name of the listener as known to the adapter - + + + When an exception happens in the execution of the pipeline, with <code>RETHROW</code> the + exception is thrown to the caller. With <code>FORMAT_AND_RETURN</code> the exception is processed + by the Adapter#setErrorMessageFormatter(IErrorMessageFormatter) and returned as result-message + of the Adapter. + + <br/> + The default is currently <code>RETHROW</code> for backwards compatibility but will become <code>FORMAT_AND_RETURN</code> in a future version. Default: RETHROW + + + + + @@ -2305,6 +2888,7 @@ + @@ -2327,6 +2911,11 @@ + + + The name of this FrankElement + + @@ -2376,6 +2965,7 @@ + Name of the JMS destination (queue or topic) to use @@ -2403,6 +2993,11 @@ + + + The name of this FrankElement + + @@ -2416,7 +3011,11 @@ - + + + Sets the value of providerURL + + @@ -2426,13 +3025,7 @@ - - - - Name of the sender or the listener - - @@ -2454,8 +3047,8 @@ - Interval <i>in milliseconds</i> for the poll guard to check whether a successful poll was done by the receive - (https://docs.oracle.com/javaee/7/api/javax/jms/messageconsumer.html#receive-long-) since last check. If polling has stopped this will be logged + Interval <i>in milliseconds</i> for the poll guard to check whether a successful poll was done by the + (<a href="https://docs.oracle.com/javaee/7/api/javax/jms/messageconsumer.html#receive-long-">JMS Receive call</a>) since last check. If polling has stopped this will be logged and the listener will be stopped and started in an attempt to workaround problems with polling. Polling might stop due to bugs in the JMS driver/implementation which should be fixed by the supplier. As the poll time includes reading and processing of the message no successful poll might be registered since the last check when message processing takes a long time, hence @@ -2467,6 +3060,7 @@ + @@ -2489,6 +3083,11 @@ + + + The name of this FrankElement + + @@ -2666,6 +3265,20 @@ The name of the <code>FrankListener</code> must be unique across the configuration. + + + When an exception happens in the execution of the pipeline, with <code>RETHROW</code> the + exception is thrown to the caller. With <code>FORMAT_AND_RETURN</code> the exception is processed + by the Adapter#setErrorMessageFormatter(IErrorMessageFormatter) and returned as result-message + of the Adapter. + + <br/> + The default is currently <code>RETHROW</code> for backwards compatibility but will become <code>FORMAT_AND_RETURN</code> in a future version. Default: RETHROW + + + + + @@ -2967,15 +3580,24 @@ If not set (not even to an empty value), all session keys can be returned. Default: all session keys can be returned - + - Should the JavaListener throw a ListenerException when it occurs or return an error message Default: true + If <code>true</code>, the WSDL of the service provided by this listener will available for download Default: false - + - If <code>true</code>, the WSDL of the service provided by this listener will available for download Default: false + When an exception happens in the execution of the pipeline, with <code>RETHROW</code> the + exception is thrown to the caller. With <code>FORMAT_AND_RETURN</code> the exception is processed + by the Adapter#setErrorMessageFormatter(IErrorMessageFormatter) and returned as result-message + of the Adapter. + + <br/> + The default is currently <code>RETHROW</code> for backwards compatibility but will become <code>FORMAT_AND_RETURN</code> in a future version. Default: RETHROW + + + @@ -3038,13 +3660,18 @@ - + - + + + + Name of the sender or the listener + + @@ -3054,37 +3681,19 @@ User name for authentication when connecting to database, when none found from <code>authAlias</code> - - - - - Password for authentication when connecting to database, when none found from <code>authAlias</code> - - - - - controls the use of transactions - - - - - - - - - - - - - - - - - + + + - Name of the sender or the listener + Password for authentication when connecting to database, when none found from <code>authAlias</code> + + + + + controls the use of transactions + @@ -3101,7 +3710,7 @@ - Field containing the status of the message. + Field containing the status of the message. <b>NB: For optimal performance, an index should exist that starts with this field, followed by all fields that are used with a fixed value in the select condition, and end with the <code>orderField</code>. @@ -3153,6 +3762,55 @@ + + + + + + + + The group id of the consumer + + + + + How often to check for new topics when using Patterns. (in MS) + + + + + The topics to listen to as comma-separated list. Regular expressions are supported, + for instance: <code>example.*</code>. + + + + + The functional name of the object. + + + + + + + + + The client id to use when connecting to the Kafka cluster. + + + + + + + + + + + The client id to use when connecting to the Kafka cluster. + + + + + @@ -3203,7 +3861,7 @@ - Field containing the status of the message. + Field containing the status of the message. <b>NB: For optimal performance, an index should exist that starts with this field, followed by all fields that are used with a fixed value in the select condition, and end with the <code>orderField</code>. Default: TYPE @@ -3268,7 +3926,7 @@ - + @@ -3291,7 +3949,7 @@ character encoding of received messages Default: UTF-8 - + @@ -3300,85 +3958,6 @@ - - - - - - - - Uri pattern to match, the {uri} part in https://mydomain.com/ibis4something/rest/{uri}, where mydomain.com and ibis4something refer to 'your ibis'. - - - - - Method (e.g. GET or POST) to match - - - - - Key of session variable to store etag - - - - - Key of Session variable that determines requested content type, overrides produces - - - - - Can be either <code>/rest</code> or <code>/rest-public</code> and must correspond with the available RestListenerServlet path(s). - - - - - Comma separated list of authorization roles which are granted for this rest service Default: IbisWebService,IbisObserver,IbisDataAdmin,IbisAdmin,IbisTester - - - - - - - Indicates whether the parts of a multipart entity should be retrieved and put in session keys. This can only be done once! Default: true - - - - - Mediatype (e.g. XML, JSON, TEXT) the RestServiceDispatcher receives as input Default: XML - - - - - - - - Mediatype (e.g. XML, JSON, TEXT) the RestServiceDispatcher sends as output, if set to json the ibis will automatically try to convert the xml message Default: XML - - - - - - - - If set to true the ibis will automatically validate and process etags Default: false - - - - - If set to true the ibis will automatically create an etag Default: false - - - - - Uses an JsonPipe to convert the json-input to xml, and xml-output to json. - Use with caution, a properly configured Input/Output-wrapper can do much more and is more robust! Default: true - - - - - - - @@ -3643,7 +4222,7 @@ - + @@ -3674,6 +4253,12 @@ where mydomain.com and ibis4something refer to 'your ibis'. + + + SOAP Action to listen to. Requests sent to `/servlet/rpcrouter` which matches the soapAction will be processed by this listener. + This is slightly different from the namespaceURI which routes messages based on the first element's namespace. + + If set, MTOM is enabled on the SOAP binding @@ -3716,7 +4301,13 @@ - ESB (Enterprise Service Bus) extension of JmsSender. + ESB (Enterprise Service Bus) extension of <code>JmsSender</code>. + + Provides functions for jms connections, queues and topics and acts as a facade + to hide for clients whether a <code>Queue</code> or <code>Topic</code> is used. + <br/> + The <code>destinationType</code> field specifies which type should be used.<br/> + This class sends messages with JMS. @@ -3730,7 +4321,16 @@ JMS sender which will add an IMS header to the message and call the MQ specific logic. - <p>See JmsSender for configuration</p> + <p>See JmsSender for configuration</p> + + JMS sender which will call IBM WebSphere MQ specific <code>setTargetClient(JMSC.MQJMS_CLIENT_NONJMS_MQ)</code> on the destination prior to sending a message. + This is needed when the MQ destination is not a JMS receiver otherwise format errors occur (e.g. dots are added after every character in the message). + + Provides functions for jms connections, queues and topics and acts as a facade + to hide for clients whether a <code>Queue</code> or <code>Topic</code> is used. + <br/> + The <code>destinationType</code> field specifies which type should be used.<br/> + This class sends messages with JMS. @@ -3742,7 +4342,11 @@ - This class sends messages with JMS. + Provides functions for jms connections, queues and topics and acts as a facade + to hide for clients whether a <code>Queue</code> or <code>Topic</code> is used. + <br/> + The <code>destinationType</code> field specifies which type should be used.<br/> + This class sends messages with JMS. @@ -3754,13 +4358,14 @@ - JMS sender which will call IBM WebSphere MQ specific - setTargetClient(JMSC.MQJMS_CLIENT_NONJMS_MQ) on the destination prior to - sending a message. This is needed when the MQ destination is not a JMS - receiver otherwise format errors occur (e.g. dots are added after every - character in the message). + JMS sender which will call IBM WebSphere MQ specific <code>setTargetClient(JMSC.MQJMS_CLIENT_NONJMS_MQ)</code> on the destination prior to sending a message. + This is needed when the MQ destination is not a JMS receiver otherwise format errors occur (e.g. dots are added after every character in the message). - <p>See JmsSender for configuration</p> + Provides functions for jms connections, queues and topics and acts as a facade + to hide for clients whether a <code>Queue</code> or <code>Topic</code> is used. + <br/> + The <code>destinationType</code> field specifies which type should be used.<br/> + This class sends messages with JMS. @@ -3926,7 +4531,7 @@ - ESB (Enterprise Service Bus) extension of JmsTransactionalStorage. + ESB (Enterprise Service Bus) extension of <code>JmsTransactionalStorage</code>. <p> Depending on the <code>type</code> of the <code>TransactionalStorage</code> @@ -3938,17 +4543,31 @@ ESB.Infrastructure.US.Log.BusinessLog.2.AuditLog.1.Action</li> </ul> </p> - <p> - <b>Configuration </b><i>(where deviating from - JmsTransactionalStorage)</i><b>:</b> - <table border="1"> - <tr> - <th>attributes</th> - <th>description</th> - <th>default</th> - </tr> - </table> - </p> + + Implements a message log (<code>JmsMessageLog</code>) or error store (<code>JmsErrorStorage</code>) that uses JMS technology. + <br/><br/> + <b>Message log:</b> A message log writes messages in persistent storage for logging purposes. + When a message log appears in a receiver, it also ensures that the same message is only processed + once, even if a related pushing listener receives the same message multiple times. + <br/><br/> + <b>Error store:</b> Appears in a receiver or sender pipe to store messages that could not be processed. + Storing a message in the error store is the last resort of the Frank!Framework. Many types of listeners and senders + offer a retry mechanism. Only if several tries have failed, then an optional transaction is not rolled + back and the message is stored in the error store. Users can retry messages in an error store using the Frank!Console. When + this is done, the message is processed in the same way as messages received from the original source. + <br/><br/> + How does a message log or error store see duplicate messages? The message log or error store + always appears in combination with a sender or listener. This sender or listener determines + a key based on the sent or received message. Messages with the same key are considered to + be the same. + + Basic browser of JMS Messages. + + Provides functions for jms connections, queues and topics and acts as a facade + to hide for clients whether a <code>Queue</code> or <code>Topic</code> is used. + <br/> + The <code>destinationType</code> field specifies which type should be used.<br/> + This class sends messages with JMS. @@ -3985,13 +4604,16 @@ Storage structure is defined in /IAF_util/IAF_DatabaseChangelog.xml. If these database objects do not exist, the Frank!Framework will try to create them. <br/><br/> - N.B. Note on using XA transactions: + {@ff.warning When using an XA transaction manager like Narayana, make sure to configure an XA-capable datasource + for the JdbcErrorStorage or JdbcMessageLog. Otherwise messages may get lost.} + {@ff.info N.B. Note on using XA transactions: If transactions are used on Oracle, make sure that the database user can access the table SYS.DBA_PENDING_TRANSACTIONS. If not, transactions present when the server goes down cannot be properly recovered, resulting in exceptions like: <pre> The error code was XAER_RMERR. The exception stack trace follows: javax.transaction.xa.XAException at oracle.jdbc.xa.OracleXAResource.recover(OracleXAResource.java:508) - </pre> + </pre> + } @@ -4018,7 +4640,15 @@ How does a message log or error store see duplicate messages? The message log or error store always appears in combination with a sender or listener. This sender or listener determines a key based on the sent or received message. Messages with the same key are considered to - be the same. + be the same. + + Basic browser of JMS Messages. + + Provides functions for jms connections, queues and topics and acts as a facade + to hide for clients whether a <code>Queue</code> or <code>Topic</code> is used. + <br/> + The <code>destinationType</code> field specifies which type should be used.<br/> + This class sends messages with JMS. @@ -4223,7 +4853,7 @@ - + @@ -4242,7 +4872,7 @@ - ESB (Enterprise Service Bus) extension of JmsTransactionalStorage. + ESB (Enterprise Service Bus) extension of <code>JmsTransactionalStorage</code>. <p> Depending on the <code>type</code> of the <code>TransactionalStorage</code> @@ -4254,17 +4884,31 @@ ESB.Infrastructure.US.Log.BusinessLog.2.AuditLog.1.Action</li> </ul> </p> - <p> - <b>Configuration </b><i>(where deviating from - JmsTransactionalStorage)</i><b>:</b> - <table border="1"> - <tr> - <th>attributes</th> - <th>description</th> - <th>default</th> - </tr> - </table> - </p> + + Implements a message log (<code>JmsMessageLog</code>) or error store (<code>JmsErrorStorage</code>) that uses JMS technology. + <br/><br/> + <b>Message log:</b> A message log writes messages in persistent storage for logging purposes. + When a message log appears in a receiver, it also ensures that the same message is only processed + once, even if a related pushing listener receives the same message multiple times. + <br/><br/> + <b>Error store:</b> Appears in a receiver or sender pipe to store messages that could not be processed. + Storing a message in the error store is the last resort of the Frank!Framework. Many types of listeners and senders + offer a retry mechanism. Only if several tries have failed, then an optional transaction is not rolled + back and the message is stored in the error store. Users can retry messages in an error store using the Frank!Console. When + this is done, the message is processed in the same way as messages received from the original source. + <br/><br/> + How does a message log or error store see duplicate messages? The message log or error store + always appears in combination with a sender or listener. This sender or listener determines + a key based on the sent or received message. Messages with the same key are considered to + be the same. + + Basic browser of JMS Messages. + + Provides functions for jms connections, queues and topics and acts as a facade + to hide for clients whether a <code>Queue</code> or <code>Topic</code> is used. + <br/> + The <code>destinationType</code> field specifies which type should be used.<br/> + This class sends messages with JMS. @@ -4301,13 +4945,16 @@ Storage structure is defined in /IAF_util/IAF_DatabaseChangelog.xml. If these database objects do not exist, the Frank!Framework will try to create them. <br/><br/> - N.B. Note on using XA transactions: + {@ff.warning When using an XA transaction manager like Narayana, make sure to configure an XA-capable datasource + for the JdbcErrorStorage or JdbcMessageLog. Otherwise messages may get lost.} + {@ff.info N.B. Note on using XA transactions: If transactions are used on Oracle, make sure that the database user can access the table SYS.DBA_PENDING_TRANSACTIONS. If not, transactions present when the server goes down cannot be properly recovered, resulting in exceptions like: <pre> The error code was XAER_RMERR. The exception stack trace follows: javax.transaction.xa.XAException at oracle.jdbc.xa.OracleXAResource.recover(OracleXAResource.java:508) - </pre> + </pre> + } @@ -4334,7 +4981,15 @@ How does a message log or error store see duplicate messages? The message log or error store always appears in combination with a sender or listener. This sender or listener determines a key based on the sent or received message. Messages with the same key are considered to - be the same. + be the same. + + Basic browser of JMS Messages. + + Provides functions for jms connections, queues and topics and acts as a facade + to hide for clients whether a <code>Queue</code> or <code>Topic</code> is used. + <br/> + The <code>destinationType</code> field specifies which type should be used.<br/> + This class sends messages with JMS. @@ -4353,21 +5008,82 @@ + + + Applies a DataSonnet <code>.jsonnet</code> JSON transformation file to the standard JSON error message generated by the ErrorMessageFormatter. + + <p> + If the transformation does not succeed, this 'standard' error message is returned in JSON format and an exception is logged. + </p> + + + + + + + + + - This class wraps an error in an XML string. + This is the default IErrorMessageFormatter implementation that is used when no specific <code>ErrorMessageFormatter</code> has + been configured. It wraps an error in an XML or JSON string. XML is the default. + + <p> + {@inheritClassDoc } + </p> + <p> + If the exception is a PipeRunException that has parameters set on it, then these parameters + are added to a <code>params</code> element in the error message. These parameters can be set from an + org.frankframework.pipes.ExceptionPipe. + </p> + <p> + If you need more control over the layout of the error message, then configure your org.frankframework.core.Adapter or + org.frankframework.configuration.Configuration with an <code>ErrorMessageFormatter</code> implementation + that can reformat the error message to the desired layout: the XslErrorMessageFormatter for XML error formats or the + DataSonnetErrorMessageFormatter for JSON error messages. + </p> <p> Sample xml: <pre><code>&lt;errorMessage&gt; &lt;message timestamp=&quot;Mon Oct 13 12:01:57 CEST 2003&quot; originator=&quot;NN IOS AdapterFramework(set from 'application.name' and 'application.version')&quot; message=&quot;message describing the error that occurred&quot;&gt; - &lt;location class=&quot;org.frankframework.pipes.XmlSwitch&quot; name=&quot;ServiceSwitch&quot;/&gt; - &lt;details&gt;detailed information of the error&lt;/details&gt; + &lt;location class=&quot;org.frankframework.pipes.SwitchPipe&quot; name=&quot;ServiceSwitch&quot;/&gt; + &lt;details&gt;Exception and stacktrace&lt;/details&gt; + &lt;params&gt; + &lt;param name=&quot;sampleParam&gt;paramValue&lt;/param&gt; + &lt;param name=&quot;errorCode&gt;535&lt;/param&gt; + &lt;/params&gt; &lt;originalMessage messageId=&quot;...&quot; receivedTime=&quot;Mon Oct 27 12:10:18 CET 2003&quot; &gt; &lt;![CDATA[contents of message for which the error occurred]]&gt; &lt;/originalMessage&gt; - &lt;/errorMessage&gt;</code></pre> + &lt;/errorMessage&gt;</code></pre> + </p> + <p> + Sample JSON: + <pre><code>{ + &quot;errorMessage&quot;: { + &quot;timestamp&quot;: &quot;Mon Oct 13 12:01:57 CEST 2003&quot;, + &quot;originator&quot;: &quot;IAF 9.2&quot;, + &quot;message&quot;: &quot;Message describing error and location&quot;, + &quot;location&quot;: { + &quot;class&quot;: &quot;org.frankframework.pipes.SwitchPipe&quot;, + &quot;name&quot;: &quot;ServiceSwitch&quot; + }, + &quot;details&quot;: &quot;Exception and stacktrace&quot;, + &quot;params&quot;: { + &quot;sampleParam&quot;: &quot;paramValue&quot;, + &quot;errorCode&quot;: 535 + }, + &quot;originalMessage&quot;: { + &quot;messageId&quot;: &quot;...&quot;, + &quot;receivedTime&quot;: &quot;Mon Oct 27 12:10:18 CET 2003&quot;, + &quot;message&quot;: &quot;contents of message for which the error occurred&quot; + } + } + }</code></pre> + </p> @@ -4380,7 +5096,16 @@ - ErrorMessageFormatter that returns a fixed message with replacements. + ErrorMessageFormatter that returns a fixed message with replacements. + + <p> + The fixed message is loaded from a file or a string configured on the formatter. If neither + is set, then the default ErrorMessageFormatter is used to create the error message. + </p> + <p> + Fixed strings in the generated error message can be replaced using <code>replaceFrom</code> / <code>replaceTo</code>. As + last step, an optional XSLT stylesheet transformation is applied. + </p> @@ -4392,7 +5117,7 @@ - ErrorMessageFormatter that returns a soap fault message. + ErrorMessageFormatter that returns a standard SOAP fault message. @@ -4404,11 +5129,11 @@ - Applies a XSLT-stylesheet to the standard error generated by an ErrorMessageFormatter. + Applies an XSLT stylesheet to the standard error message generated by the ErrorMessageFormatter. + <p> If the transformation does not succeed, this 'standard' error message is returned and an exception is logged. - - Hint: use <code>xpathExression="/errorMessage/@message"</code> for a single compact string as errormessage. + </p><br><br><b>TIP</b><p>use <code>xpathExpression="/errorMessage/@message"</code> for a single compact string as errormessage.</p> @@ -4420,13 +5145,60 @@ + + + + + + + + + + + + + + Set a DataSonnet stylesheet to transform the default JSON error message to a custom format. + + + + + Computes the mimetype when it is unknown. It requires more computation but improves + mapping results. Default: true + + + + + Output file format. DataSonnet is semi-capable of converting the converted JSON to a different format. Default: JSON + + + + + + + + + + + + + + + + + Format the error message as XML or as JSON. Default: XML + + + + + - + - + @@ -4440,20 +5212,34 @@ name of the file containing the result message - - + + + The string to replace + + + + + What to replace the <code>replaceFrom</code> with. + + - - + + + + + + + + - + - + @@ -4462,7 +5248,7 @@ - + URL to the stylesheet used to transform the output of the standard ErrorMessageFormatter @@ -4472,6 +5258,9 @@ xPathExpression to use for transformation + + + @@ -4627,7 +5416,7 @@ - + @@ -5158,19 +5947,20 @@ - + The JSON Schema to validate to - Prefix to element name to find subschema in schema Default: /definitions/ + The subSchemaPrefix is an optional attribute used when referencing a subschema located in a nested structure, such as $defs or definitions. + Adding only the subSchema attribute is not enough if your schema organizes definitions in nested objects. Add root attribute to complete the process. Default: /definitions/ - If set: key of session variable to store reasons of mis-validation in Default: failureReason + If set: creates a sessionKey to store any errors when validating the json output Default: failureReason @@ -5178,12 +5968,12 @@ - + - - + + - + name of the root element @@ -5195,8 +5985,8 @@ - - + + @@ -5370,7 +6160,7 @@ - + @@ -6304,7 +7094,7 @@ - If <code>true</code>, the cache is stored on disk and survives configuration reloads & JVM restarts. Default: false + If <code>true</code>, the cache is stored on disk and survives configuration reloads and JVM restarts. Default: false @@ -6470,7 +7260,13 @@ </p> <p><b>Notice:</b> the JmsListener is ONLY capable of processing <code>jakarta.jms.TextMessage</code>s <br/><br/> - </p> + </p> + + Provides functions for jms connections, queues and topics and acts as a facade + to hide for clients whether a <code>Queue</code> or <code>Topic</code> is used. + <br/> + The <code>destinationType</code> field specifies which type should be used.<br/> + This class sends messages with JMS. @@ -6591,7 +7387,12 @@ - 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 + If endPosition &gt;= 0 then this field contains the endPosition (Java style, i.e the position of the next character) 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 + + + + + If <code>false</code>, no newlines are expected, all records of the size specified in the flows are read from a single 'line'. Default: true @@ -6703,7 +7504,19 @@ - + + + + + + + + + Sender to send to AMQP 1.0 end-points. + + + + @@ -6791,6 +7604,7 @@ &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;property name=&quot;DocumentDetail&quot; isNull=&quot;true&quot; /&gt; &lt;/properties&gt; &lt;/cmis&gt;</code></pre> </p> @@ -6839,7 +7653,7 @@ QuerySender that interprets the input message as a query, possibly with attributes. - Messages are expected to contain sql-text.<br><br><b>INFO</b><p>Please note that the default value of <code>trimSpaces</code> is `true`</p> + Messages are expected to contain sql-text.<br><br><b>INFO</b><p>Please note that the default value of <code>trimSpaces</code> is <pre>true</pre></p> @@ -6863,7 +7677,13 @@ - ESB (Enterprise Service Bus) extension of JmsSender. + ESB (Enterprise Service Bus) extension of <code>JmsSender</code>. + + Provides functions for jms connections, queues and topics and acts as a facade + to hide for clients whether a <code>Queue</code> or <code>Topic</code> is used. + <br/> + The <code>destinationType</code> field specifies which type should be used.<br/> + This class sends messages with JMS. @@ -6887,7 +7707,32 @@ - QuerySender that assumes a fixed query, possibly with attributes.<br><br><b>INFO</b><p>See DB2XMLWriter for ResultSet!</p><br><b>INFO</b><p>Please note that the default value of <code>trimSpaces</code> is `true`</p> + QuerySender that assumes a fixed query, possibly with attributes. + + Example of a <code>XML</code> result: + <pre><code>&lt;result&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;1&quot;&gt; + &lt;field name=&quot;FIELDNAME&quot;&gt;value&lt;/field&gt; + &lt;field name=&quot;FIELDNAME&quot; null=&quot;true&quot;&gt;&lt;/field&gt; + &lt;field name=&quot;FIELDNAME&quot;&gt;value&lt;/field&gt; + &lt;field name=&quot;FIELDNAME&quot;&gt;value&lt;/field&gt; + &lt;/row&gt; + &lt;/rowset&gt; + &lt;/result&gt;</code></pre> + + See DB2XMLWriter for more information about the ResultSet!<br><br><b>INFO</b><p>The result <code>fieldname</code> and <code>columntype</code> are always capital case.</p><br><b>TIP</b><p>The default value of <code>trimSpaces</code> is <pre>true</pre>.</p><br><b>TIP</b><p>The default value of <code>useNamedParams</code> is determined by the presence of <code>?&#123;...&#125;</code> in the query.</p> @@ -6977,7 +7822,7 @@ 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: @@ -7136,14 +7981,10 @@ <p><b>Expected message format:</b></p> <p>GET methods expect a message looking like this: - <pre> - param_name=param_value&another_param_name=another_param_value - </pre> + <pre><code>param_name=param_value&amp;another_param_name=another_param_value</code></pre> <p>POST AND PUT methods expect a message similar as GET, or looking like this: - <pre> - param_name=param_value - another_param_name=another_param_value - </pre><br><br><b>INFO</b><p>When used as MTOM sender and MTOM receiver doesn't support Content-Transfer-Encoding "base64", messages without line feeds will give an error. + <pre><code>param_name=param_value + another_param_name=another_param_value</code></pre><br><br><b>INFO</b><p>When used as MTOM sender and MTOM receiver doesn't support Content-Transfer-Encoding "base64", messages without line feeds will give an error. This can be fixed by setting the Content-Transfer-Encoding in the MTOM sender.</p><br><b>INFO</b><p>The use of `multi-value` parameters can be achieved by adding multiple parameters with the same name.</p> @@ -7158,7 +7999,16 @@ JMS sender which will add an IMS header to the message and call the MQ specific logic. - <p>See JmsSender for configuration</p> + <p>See JmsSender for configuration</p> + + JMS sender which will call IBM WebSphere MQ specific <code>setTargetClient(JMSC.MQJMS_CLIENT_NONJMS_MQ)</code> on the destination prior to sending a message. + This is needed when the MQ destination is not a JMS receiver otherwise format errors occur (e.g. dots are added after every character in the message). + + Provides functions for jms connections, queues and topics and acts as a facade + to hide for clients whether a <code>Queue</code> or <code>Topic</code> is used. + <br/> + The <code>destinationType</code> field specifies which type should be used.<br/> + This class sends messages with JMS. @@ -7310,7 +8160,7 @@ </p> <p> Failure to ensure the output is a string may mean the result will look like <code>[Object object]</code>. - </p> + </p><br><br><b>INFO</b><p>J2V8 is not compatible with ARM based environments.</p><br><b>WARNING</b><p>The default Javascript runtime has been changed from J2V8 to GraalJS.</p> @@ -7322,7 +8172,11 @@ - This class sends messages with JMS. + Provides functions for jms connections, queues and topics and acts as a facade + to hide for clients whether a <code>Queue</code> or <code>Topic</code> is used. + <br/> + The <code>destinationType</code> field specifies which type should be used.<br/> + This class sends messages with JMS. @@ -7346,6 +8200,20 @@ + + + Experimental ISender for sending messages to a Kafka instance. + The Kafka integration is still under development so do not + currently use unless you wish to participate in this development. + + + + + + + + + Sender to obtain information from and write to an LDAP Directory. @@ -7466,13 +8334,14 @@ - JMS sender which will call IBM WebSphere MQ specific - setTargetClient(JMSC.MQJMS_CLIENT_NONJMS_MQ) on the destination prior to - sending a message. This is needed when the MQ destination is not a JMS - receiver otherwise format errors occur (e.g. dots are added after every - character in the message). + JMS sender which will call IBM WebSphere MQ specific <code>setTargetClient(JMSC.MQJMS_CLIENT_NONJMS_MQ)</code> on the destination prior to sending a message. + This is needed when the MQ destination is not a JMS receiver otherwise format errors occur (e.g. dots are added after every character in the message). - <p>See JmsSender for configuration</p> + Provides functions for jms connections, queues and topics and acts as a facade + to hide for clients whether a <code>Queue</code> or <code>Topic</code> is used. + <br/> + The <code>destinationType</code> field specifies which type should be used.<br/> + This class sends messages with JMS. @@ -7584,11 +8453,13 @@ Links to <a href="https://www.eclipse.org/paho/files/javadoc" target="_blank">https://www.eclipse.org/paho/files/javadoc</a> are opened in a new window/tab because the response from eclipse.org contains header X-Frame-Options:SAMEORIGIN which will make the browser refuse to open the link inside this frame. - Requires a resource to be configured. Example `resources.yml`: + Requires a resource to be configured. Example <pre>resources.yml</pre>: <pre><code>mqtt: - name: &quot;my-connection&quot; - type: &quot;org.frankframework.jdbc.datasource.MqttClientSettings&quot; url: &quot;tcp://host:port&quot; + username: &quot;&quot; + password: &quot;&quot; + authalias: &quot;${property.name.here}&quot; properties: automaticReconnect: &quot;true&quot; cleanSession: &quot;false&quot;</code></pre> @@ -7596,7 +8467,7 @@ The clientId is automatically determined from <code>transactionmanager.uid</code>, but can optionally be overwritten. Be aware that the clientId must be unique for each instance of the framework. <br><br> - Inbound and outbound messages are persisted while they are in flight to prevent data loss. The default is an in memory store, but the `persistenceDirectory` + Inbound and outbound messages are persisted while they are in flight to prevent data loss. The default is an in memory store, but the <pre>persistenceDirectory</pre> flag can be used to set the disk storage location. @@ -7676,7 +8547,7 @@ - QuerySender that writes each row in a ResultSet to a file.<br><br><b>INFO</b><p>Please note that the default value of <code>trimSpaces</code> is `true`</p> + QuerySender that writes each row in a ResultSet to a file.<br><br><b>INFO</b><p>Please note that the default value of <code>trimSpaces</code> is <pre>true</pre></p> @@ -7881,7 +8752,7 @@ &lt;/rowset&gt; &lt;/result&gt; &lt;/resultset&gt;</code></pre> - </p><br><br><b>INFO</b><p>Support for stored procedures is currently experimental and changes in the currently produced output-format are expected.</p><br><b>INFO</b><p>Please note that the default value of <code>trimSpaces</code> is `true`</p> + </p><br><br><b>INFO</b><p>Please note that the default value of <code>trimSpaces</code> is <pre>true</pre></p> @@ -8033,7 +8904,7 @@ sql - type [0..1] one of {select;ddl;other}, other by default - query</code></pre> - <br/><br><br><b>INFO</b><p>Please note that the default value of <code>trimSpaces</code> is `true`</p> + <br/><br><br><b>INFO</b><p>Please note that the default value of <code>trimSpaces</code> is <pre>true</pre></p> @@ -8157,6 +9028,15 @@ The S3 service endpoint, either with or without the protocol. (e.g. https://sns.us-west-1.amazonaws.com or sns.us-west-1.amazonaws.com) + + + Set the desired storage class for the S3 object when action is move,copy or write. + More info on storage classes can be found on the <a href="https://aws.amazon.com/s3/storage-classes/">AWS S3 docs</a>. Default: <pre>STANDARD</pre> + + + + + Maximum concurrent connections towards S3 Default: 50 @@ -8282,6 +9162,77 @@ + + + + + + + + + Name of the AMQP connection in the <pre>amqp</pre> section of the <code>resources.yaml</code> file. + + + + + Timeout in seconds for sending messages and receiving replies. Default: <code>30</code> + + + + + Set the type of address to which messages are being sent, TOPIC or QUEUE. + For <pre>MessageProtocol#RR</pre> the type will always be QUEUE. Default: <pre>QUEUE</pre> + + + + + + + + Set the address (name of the queue or topic) on which to send messages. + + + + + Set the message type: MessageType#TEXT to character data to be sent as <code>AmqpValue</code> section, + MessageType#BINARY for binary data to be sent as AMQP <code>Data</code> section, or MessageType#AUTO to + decide automatically based on the wether the input Message is binary or not. + <p> + When a message is to be received as a streaming message by the recipient, it has to be sent as a MessageType#BINARY + message. + <br/> + When #setStreamingMessages(boolean) is configured <pre>true</pre>, the <code>messageType</code> is ignored. + </p> Default: <pre>AUTO</pre> + + + + + + + + Set if messages should be created as streaming messages. Streaming messages are + always sent as binary messages, with an AMQP <code>Body</code> section. + + + + + + Set the message time-to-live, in milliseconds. Default: <pre>-1</pre>ms, meaning no expiry. + + + + + Send message as Fire-and-Forget, or as Request-Reply Default: <pre>FF</pre> + + + + + + + + + + @@ -8556,7 +9507,7 @@ - + @@ -8637,12 +9588,6 @@ - - - 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 - - Controls automatically whether blobdata is stored compressed and/or serialized in the database Default: false @@ -9221,7 +10166,11 @@ - + + + Client_id used in authentication to <code>tokenEndpoint</code> + + @@ -9290,7 +10239,11 @@ - + + + Client_id used in authentication to <code>tokenEndpoint</code> + + @@ -9883,6 +10836,33 @@ + + + + + + + + The topic to send messages to. Only one topic per sender. Wildcards are not supported. + + + + + The functional name of the object. + + + + + + + + + The client id to use when connecting to the Kafka cluster. + + + + + @@ -9950,10 +10930,24 @@ (Only used when <code>operation=search/deepsearch</code>) when <code>true</code> the xml '&lt;ldapresult&gt;object not found&lt;/ldapresult&gt;' is returned instead of the PartialResultException 'unprocessed continuation reference(s)' Default: false + + + name of the sender + + - + + + + + + + + + + @@ -10126,7 +11120,7 @@ Collection to act upon. Can be overridden by parameter <code>collection</code> - + Action @@ -10199,7 +11193,7 @@ character encoding of received messages Default: UTF-8 - + @@ -10307,7 +11301,11 @@ - + + + Client_id used in authentication to <code>tokenEndpoint</code> + + @@ -11078,7 +12076,11 @@ - + + + Client_id used in authentication to <code>tokenEndpoint</code> + + @@ -11323,7 +12325,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 <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 + Alternatively, warnings can be switched off using suppression properties SuppressKeys#XSD_VALIDATION_WARNINGS_SUPPRESS_KEY, SuppressKeys#XSD_VALIDATION_ERROR_SUPPRESS_KEY and SuppressKeys#XSD_VALIDATION_FATAL_ERROR_SUPPRESS_KEY Default: true @@ -11704,11 +12706,6 @@ 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 - - @@ -12209,7 +13206,7 @@ &quot;userId&quot; : &quot;123&quot;, &quot;name&quot; : &quot;DataSonnet&quot; }</code></pre> - + Jsonnet stylesheet: <pre><code>{ &quot;uid&quot;: payload.userId, @@ -12232,7 +13229,7 @@ - Pipe that sleeps for a specified time, which defaults to 5000 msecs. + Pipe that sleeps for a specified time, which defaults to 5000 msecs. It is useful for testing purposes. @@ -12526,7 +13523,12 @@ Pipe that throws an exception based on the input message. <br/> - The `success` forward is only used when the (deprecated) attribute `throwException` has been set to `false`. Otherwise, the (default) `exception` forward will be used.<br><br><b>WARNING</b><p>The attribute `throwException` has been deprecated and thus the `success` forward will be removed along with the `throwException` attribute.</p> + Parameters that are set on the ExceptionPipe will be added to the error message that is produced by + the org.frankframework.errormessageformatters.ErrorMessageFormatter that has been configured on + the org.frankframework.core.Adapter and will also be copied into the PipeLineSession, so + that they can be passed back to a calling adapter as <code>returnedSessionKey</code>. + <br/> + The <pre>success</pre> forward is only used when the (deprecated) attribute <pre>throwException</pre> has been set to <pre>false</pre>. Otherwise, the (default) <pre>exception</pre> forward will be used.<br><br><b>WARNING</b><p>The attribute <pre>throwException</pre> has been deprecated and thus the <pre>success</pre> forward will be removed along with the <pre>throwException</pre> attribute.</p> @@ -12772,7 +13774,7 @@ - + @@ -12810,11 +13812,32 @@ - This pipe can be used to generate a hash for the given message using an algorithm. With this, you can prove the integrity of the message. - If you use one of the Mac-based algorithms (starting with 'Hmac'), you need a secret as well. A Mac algorithm uses a secret, combined with the algorithm - to create a 'hash' of a message. Only sources that have this secret are able to generate the same hash for the given message. - With this, you can prove the integrity and authenticity of a message. - <p> + This pipe can be used to generate a hash for the given message using an algorithm. With this, you can prove the integrity of the message. + If you need to prove the authenticity of the message as well, use one of the Mac-based algorithms (starting with 'Hmac'). These algorithms + require a secret to prove both integrity and authenticity. The HMac combined with the algorithm is used + to create a 'hash' of a message. Only sources that have this secret are able to generate the same hash for the given message. + <p> + The hash is generated based on the bytes of the given input message. + <p> + The supported integrity algorithms are: + <ul> + <li>MD5</li> + <li>SHA</li> + <li>SHA256</li> + <li>SHA384</li> + <li>SHA512</li> + <li>CRC32</li> + <li>Adler32</li> + </ul> + <p> + The supported integrity <i>and</i> authenticity algorithms are: + <ul> + <li>HmacMD5</li> + <li>HmacSHA1</li> + <li>HmacSHA256</li> + <li>HmacSHA384</li> + <li>HmacSHA512</li> + </ul> @@ -12826,15 +13849,16 @@ - Selects a forward based on an expression. The expression type is coupled to the mediaType: + <p>Selects a forward based on an expression. The expression type is coupled to the mediaType:</p> <ul> <li>XML (application/xml) uses Xpath.</li> <li>JSON (application/json) uses jsonPath.</li> </ul> - The XML mediaType is the default type. If you want to use JSON, you need to set this using 'mimeType' in the Message. + + <p>The XML mediaType is the default type. If you want to use JSON, you need to set this using 'mimeType' in the Message.</p> <h4>Expressions</h4> - Expressions are used to select nodes in the given input document. Imagine a collection of books: + <p>Expressions are used to select nodes in the given input document. Imagine a collection of books:</p> <pre><code>{ &quot;store&quot;: { &quot;book&quot;: [ @@ -12867,48 +13891,37 @@ ] } }</code></pre> - <p> - With both expression languages, you'll be able to select one or multiple nodes from this collection. - <br/> - Using this pipe, there are two options. Use it only with an <code>expression</code> or combine it with an <code>expressionValue</code>. When using the expression, - the pipe evaluates to <code>thenForwardName</code> when <em>there is a match</em>, even if it is empty. In the given example, this might be one of: + + <p>With both expression languages, you'll be able to select one or multiple nodes from this collection.</p> + + <p>Using this pipe, there are two options. Use it only with an <code>expression</code> or combine it with an <code>expressionValue</code>. When using the expression, + the pipe evaluates to <code>thenForwardName</code> when <em>there is a match</em>, even if it is empty. In the given example, this might be one of:</p> <pre><code>$.store $.store.book[1] $.store.book[?(@.price == 22.99)].author $.store.book[?(@.category == 'fiction')]</code></pre> <h4>expressionValue</h4> - When using expression combined with expressionValue, the pipe evaluates to <code>thenForwardName</code> when <em>the matched value is equal to - expressionValue</em>. This needs to be an exact match. - <br/> + <p>When using expression combined with expressionValue, the pipe evaluates to <code>thenForwardName</code> when <em>the matched value is equal to + expressionValue</em>. This needs to be an exact match.</p> <h4>XML/XPATH</h4> - Xpath has been around a long time. Information about the syntax can be found everywhere on the internet. + <p>Xpath has been around a long time. Information about the syntax can be found everywhere on the internet. The XML implementation wraps the Xpath expression in an XSL. This enables us to use complex expressions which evaluate to true or false instead of being used only as a selector of nodes in the input XML. This is available to be backwards compatible with the XmlIf pipe. - For instance, take the following example input: + For instance, take the following example input:</p> <pre><code>&lt;results&gt; &lt;result name=&quot;test&quot;&gt;&lt;/result&gt; &lt;result name=&quot;test&quot;&gt;&lt;/result&gt; &lt;/results&gt;</code></pre> - Examples with complex expressions might be something like: <code>number(count(/results/result[contains(@name , 'test')])) &gt; 1</code>, to test if there's more + + <p>Examples with complex expressions might be something like: <code>number(count(/results/result[contains(@name , 'test')])) &gt; 1</code>, to test if there's more than one node found containing the string 'test'. Please check if a simpler, less error-prone expression like - <code>/results/result[contains(@name, 'test')]</code> can suffice. - <p></p> + <code>/results/result[contains(@name, 'test')]</code> can suffice.</p> <h4>Without expression</h4> - Without an expression, the default behaviour is to assume the input is a string. The code will try to match the string to an optional regular expression - or tries to match the string value to the optional expressionValue. - <p></p> - - <h4>Resources</h4> - <ul> - <li><a href="https://github.com/json-path/JsonPath">JsonPath / Jayway implementation including examples</a></li> - <li><a href="https://jsonpath.fly.dev/">JsonPath online evaluator</a></li> - <li><a href="https://www.w3schools.com/xml/xpath_syntax.asp">Xpath syntax</a></li> - <li><a href="https://www.freeformatter.com/xpath-tester.html">Xpath online evaluator</a></li> - <li><a href="https://en.wikipedia.org/wiki/XPath">Xpath information and history</a></li> - </ul> + <p>Without an expression, the default behaviour is to assume the input is a string. The code will try to match the string to an optional regular expression + or tries to match the string value to the optional expressionValue.</p> @@ -12975,6 +13988,65 @@ + + + Apply a one-liner JSON path expression to the input to extract a value from input data. + If the input is in XML format, it will be converted to JSON using the same method as the org.frankframework.align.Xml2Json pipe. + Depending on the result of the expression, this pipe can return a string value or JSON value. + + <h3>Examples</h3> + <p> + <table> + <tr> + <th>JSON Path Expression</th> + <th>Input Message</th> + <th>Output</th> + </tr> + <tr> + <td><code>$.a</code></td> + <td> + <pre><code>{ + &quot;a&quot;: &quot;Hello World&quot; + }</code></pre> + </td> + <td>String with value <code>Hello World</code></td> + </tr> + <tr> + <td><code>$.*.a</code></td> + <td> + <pre><code>{ + &quot;k1&quot;: {&quot;a&quot;: 1}, + &quot;k2&quot;: {&quot;a&quot;: 2} + }</code></pre> + </td> + <td>JSON Array with value <pre><code>[1, 2]</code></pre></td> + </tr> + <tr> + <td><code>$.a</code></td> + <td> + <pre><code>{ + &quot;a&quot;: { + &quot;Hello&quot;: &quot;World&quot; + } + }</code></pre> + </td> + <td>JSON Object with value + <pre><code>{ + &quot;Hello&quot;: &quot;World&quot; + }</code></pre> + </tr> + </table> + If the input message does not have a match with the expression, then the Exception Forward path will be taken. + </p> + + + + + + + + + JSON is not aware of the element order. This pipe performs a <strong>best effort</strong> JSON to XML transformation. @@ -13006,7 +14078,7 @@ - + @@ -13110,27 +14182,24 @@ - Pipe that returns the memberships of a userDN. - The input is a fullDn, of a user or a group. - <br/> - Sample result:<br/><code><pre> - &lt;ldap&gt; - &lt;entry name="CN=xxyyzz,OU=Users,DC=domain,DC=ext"&gt; - &lt;attributes&gt; - &lt;attribute&gt; - &lt;attribute name="memberOf" value="Extern"/&gt; - &lt;attribute name="departmentCode" value="358000"/&gt; - &lt;attribute name="organizationalHierarchy"&gt; - &lt;item value="ou=zzyyxx"/&gt; - &lt;item value="ou=OPS&amp;IT,ou=Group,ou=domain,o=ext"/&gt; - &lt;/attribute> - &lt;attribute name="givenName" value="Gerrit"/> - &lt;/attributes&gt; - &lt;/entry&gt; - &lt;entry&gt; .... &lt;/entry&gt; - ..... - &lt;/ldap&gt; - </pre></code> <br/> + <p>Pipe that returns the memberships of a userDN. The input is a fullDn, of a user or a group.</p> + <p>Sample result:</p> + + <pre><code>&lt;ldap&gt; + &lt;entry name=&quot;CN=xxyyzz,OU=Users,DC=domain,DC=ext&quot;&gt; + &lt;attributes&gt; + &lt;attribute&gt; + &lt;attribute name=&quot;memberOf&quot; value=&quot;Extern&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=zzyyxx&quot;/&gt; + &lt;item value=&quot;ou=OPS&amp;IT,ou=Group,ou=domain,o=ext&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;/ldap&gt;</code></pre> @@ -13303,7 +14372,7 @@ - + @@ -13368,7 +14437,7 @@ - + @@ -13393,7 +14462,7 @@ - + @@ -13405,7 +14474,7 @@ <ol> <li>If the attribute <code>find</code> is provided, the pipe will attempt to replace the provided value with the content of the attribute <code>replace</code>.</li> <li>The resulting string is substituted based on the parameters of this pipe. It will replace values in the input enclosed - with <code>?{...}</code>, for instance text like: <code>?{parameterOne}</code> in combination with a parameter <code>parameterOne</code> will use the value of this Parameter. + with <code>?{...}</code>, for instance text like: <code>?{parameterOne}</code> in combination with a parameter <code>parameterOne</code> will use the value of this Parameter. If a parameter for the given value is not found, it will not be replaced and the <code>?{parameterOne}</code> value will remain in the output.</li> <p> <p> @@ -13435,20 +14504,6 @@ - - - Uses the (old) SMB 1 protocol. - <br/> - Only supports NTLM authentication. - - - - - - - - - @@ -13458,15 +14513,6 @@ - - - - - - - - - Manager for SAP Logical Units of Work (LUWs). @@ -13481,7 +14527,7 @@ - + @@ -13616,9 +14662,9 @@ - Pipe for transforming a stream with records. Records in the stream must be separated with new line characters. + Pipe for transforming a stream with records. Records in the stream must be separated with new line characters, or be of fixed length. - For file containing only a single type of lines, a simpler configuration without managers and flows + 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. @@ -13630,6 +14676,19 @@ + + + Selects an exitState, based on either the content of the input message, by means + of an XSLT-stylesheet, the content of a session variable, a JSON Path expression, or, by default, by returning the name of the root-element. + + + + + + + + + Pipe for converting TEXT to XML. @@ -13763,7 +14822,8 @@ Selects an exitState, based on either the content of the input message, by means - of a XSLT-stylesheet, the content of a session variable or, by default, by returning the name of the root-element. + of an XSLT-stylesheet, the content of a session variable or, by default, by returning the name of the root-element. + <br/> @@ -13792,7 +14852,7 @@ - + @@ -13893,16 +14953,8 @@ - - - - Charset to be used to read the input message. - Defaults to the message's known charset or UTF-8 when unknown. - - - + - @@ -14147,11 +15199,6 @@ - - - Character encoding to be used when reading input from strings for direction = encode or writing data for direction = decode. - - (Only used when direction=encode) Defines the separator between lines. Special values: <code>auto</code>: platform default, <code>dos</code>: crlf, <code>unix</code>: lf. Default: auto @@ -14270,7 +15317,11 @@ Alternatively: xpath-expression to create stylesheet from - + + + Namespace defintions for xpathExpression. Must be in the form of a comma or space separated list of <code>prefix=namespaceuri</code>-definitions. For some use other cases (NOT xpathExpression), one entry can be without a prefix, that will define the default namespace. + + Only valid for xpathexpression Default: text @@ -14420,7 +15471,11 @@ Alternatively: xpath-expression to create stylesheet from - + + + Namespace defintions for xpathExpression. Must be in the form of a comma or space separated list of <code>prefix=namespaceuri</code>-definitions. For some use other cases (NOT xpathExpression), one entry can be without a prefix, that will define the default namespace. + + Only valid for xpathexpression Default: text @@ -14597,6 +15652,11 @@ See <a href="https://en.wikipedia.org/wiki/C0_and_C1_control_codes#Field_separators">WIKI Control Codes</a>. + + + When set to true, whitespace is trimmed from the beginning and end of each header and field value. Default: false + + @@ -14608,14 +15668,14 @@ - + Location of the stylesheet to apply to the input message. - Output file format. DataSonnet is semi-capable of converting the converted JSON to a different format. + Output file format. DataSonnet is semi-capable of converting the converted JSON to a different format. Default: JSON @@ -14635,39 +15695,23 @@ - - - - - The time <i>in milliseconds</i> that the thread will be put to sleep. Default: 5000 - - - - - - - - - - - - - - - - If <code>true</code>, a piperunexception is thrown. otherwise the output is only logged as an error (and returned in a xml string with 'error' tags) Default: true - - - + + + - timeout in seconds of obtaining a result Default: 30 + The time <i>in milliseconds</i> that the thread will be put to sleep. Default: 5000 - - + + + + + + + @@ -14842,12 +15886,12 @@ - + - - + + - + Key of the session variable to retrieve the output message from. When left unspecified, the input message is used as the key of the session variable. @@ -14862,8 +15906,8 @@ - - + + @@ -14929,6 +15973,22 @@ + + + + If <code>true</code>, a piperunexception is thrown. otherwise the output is only logged as an error (and returned in a xml string with 'error' tags) Default: true + + + + + timeout in seconds of obtaining a result Default: 30 + + + + + + + @@ -15083,6 +16143,18 @@ + + + + + + + + + + + + @@ -15105,7 +16177,7 @@ - When direction is JSON2XML, specifies the name of the root element when `addXmlRootElement` is <code>true</code>. + When direction is JSON2XML, specifies the name of the root element when <pre>addXmlRootElement</pre> is <code>true</code>. When direction is XML2JSON, can not be used. Default: root @@ -15119,10 +16191,10 @@ - + - + @@ -15355,9 +16427,9 @@ - Set to <code>true</code> when the pipeline is triggered by a user (e.g. using an http based listener - that will add a securityHandler session key) and you don't want the listener to check whether the user - is autorised and/or you want the enforce the roles as configured for the Ladybug Default: false + Set this to <code>true</code> if you wish to enforce the + user roles (e.g. when using an HTTP based listener). + When set to false the Ladybug is run anonymously. Default: false @@ -15864,11 +16936,6 @@ - - - charset to be used to decode the given input message in case the input is not binary but character stream Default: UTF-8 - - aspose license location including the file name. It can also be used without license but there some restrictions on usage. If license is in resource, license attribute can be license file name. If the license is in somewhere in filesystem then it should be full path to file including filename and starting with file://// prefix. classloader.allowed.protocols property should contain 'file' protocol @@ -15894,12 +16961,12 @@ - + - - + + - + Key of the session variable to store the input in @@ -15911,8 +16978,8 @@ - - + + @@ -15984,12 +17051,12 @@ - + - - + + - + Fixed name of the rekenbox (or wrapper) to be called. If empty, the name is determined from the request @@ -16044,8 +17111,8 @@ - - + + @@ -16092,20 +17159,20 @@ - + - - + + - + name of the key of the entry in the <code>pipelinesession</code> to remove. If this key is empty the input message is interpretted as key. for multiple keys use ',' as delimiter - - + + @@ -16174,52 +17241,6 @@ - - - - - - - - - The destination, aka smb://xxx/yyy share - - - - - The SMB share username - - - - - The SMB share password - - - - - Alias used to obtain credentials for the SMB share - - - - - logon/authentication domain, in case the user account is bound to a domain such as Active Directory. - - - - - when <code>true</code>, intermediate directories are created also Default: false - - - - - controls whether hidden files are seen or not Default: false - - - - - - - @@ -16290,17 +17311,12 @@ - - - - - - + - - + + - + Name of the SapSystem used by this object @@ -16317,8 +17333,8 @@ - - + + @@ -16594,6 +17610,47 @@ + + + + + + + + + stylesheet may return a string representing the forward to look up Default: <i>a stylesheet that returns the name of the root-element</i> + + + + + xpath-expression that returns a string representing the forward to look up. It's possible to refer to a parameter (which e.g. contains a value from a sessionkey) by using the parameter name prefixed with $ + + + + + jsonPath expression to be applied to the input-message. if not set, no transformation is done when the input message is mediatype JSON + + + + + Namespace defintions for xpathExpression. Must be in the form of a comma or space separated list of <code>prefix=namespaceuri</code>-definitions. For some use other cases (NOT xpathExpression), one entry can be without a prefix, that will define the default namespace. + + + + + + + If set to <code>2</code> or <code>3</code> a Saxon (net.sf.saxon) xslt processor 2.0 or 3.0 respectively will be used, otherwise xslt processor 1.0 (org.apache.xalan). <code>0</code> will auto-detect Default: 0 + + + + + + + + + + @@ -16759,7 +17816,8 @@ - + + stylesheet may return a string representing the forward to look up Default: <i>a stylesheet that returns the name of the root-element</i> @@ -16775,39 +17833,16 @@ Namespace defintions for xpathExpression. Must be in the form of a comma or space separated list of <code>prefix=namespaceuri</code>-definitions. For some use other cases (NOT xpathExpression), one entry can be without a prefix, that will define the default namespace. - - - Forward returned when the pipename derived from the stylesheet could not be found. - - - - - Forward returned when the content, on which the switch is performed, is empty. if <code>emptyforwardname</code> is not specified, <code>notfoundforwardname</code> is used. - - + + If set to <code>2</code> or <code>3</code> a Saxon (net.sf.saxon) xslt processor 2.0 or 3.0 respectively will be used, otherwise xslt processor 1.0 (org.apache.xalan). <code>0</code> will auto-detect Default: 0 - - - Selected forward name will be stored in the specified session key. - - - - - Session key that will be used to get the forward name from. - - - - - controls namespace-awareness of XSLT transformation Default: true - - - - - + + + @@ -16828,7 +17863,8 @@ - If set to <code>false</code>, the inputstream is not closed after it has been used Default: true + If set to <code>false</code>, the inputstream is not closed after it has been used. + Use with caution, they may create memory leaks. Default: true @@ -16886,7 +17922,7 @@ Job which can stop/start adapters and receivers. - + <h3>Possible cron expressions:</h3> <p> A "Cron-Expression" is a string comprised of 6 or 7 fields separated by @@ -17102,7 +18138,7 @@ day-of-month fields!</p><br><br><b>INFO</b><p>Support for specifying both a day-of-week and a day-of-month value is not complete (you'll need to use the '?' character in on of these fields).</p><br><b>INFO</b><p>Be careful when setting fire times between mid-night and 1:00 AM - "daylight savings" can cause a skip or a repeat depending on whether - the time moves back or jumps forward.</p><br><b>INFO</b><p>Specified in the Configuration.xml inside a <code>&lt;scheduler&gt;</code> element. + the time moves back or jumps forward.</p><br><b>INFO</b><p>Specified in the Configuration.xml inside a <code>&lt;scheduler&gt;</code> element. The scheduler element must be a direct child of configuration, not of adapter.</p><br><b>TIP</b><p>All registered jobs are displayed in the Frank!Console under 'Scheduler'.</p><br><b>WARNING</b><p>Support for the features described for the 'C' character is not complete.</p> @@ -17115,7 +18151,7 @@ - Frank!Framework job which periodically looks in the <code>IBISCONFIG</code> table to see if a new Configuration should be loaded.<br><br><b>INFO</b><p>This is a default job that can be controlled with the property `checkReload.active` and `checkReload.interval`.</p> + Frank!Framework job which periodically looks in the <code>IBISCONFIG</code> table to see if a new Configuration should be loaded.<br><br><b>INFO</b><p>This is a default job that can be controlled with the property <pre>checkReload.active</pre> and <pre>checkReload.interval</pre>.</p> @@ -17129,8 +18165,8 @@ Frank!Framework job to cleanup the <code>IBISSTORE</code> and <code>IBISLOCK</code> tables. Find all MessageLogs and Lockers in the current configuration and removes database - entries which have surpassed their corresponding ExpiryDateField. - + entries which have surpassed their corresponding ExpiryDateField. + <h3>Possible cron expressions:</h3> <p> A "Cron-Expression" is a string comprised of 6 or 7 fields separated by @@ -17343,10 +18379,10 @@ </p> <p>Pay attention to the effects of '?' and '*' in the day-of-week and - day-of-month fields!</p><br><br><b>INFO</b><p>This is a default job that can be controlled with the property `cleanup.database.active` and `cleanup.database.cron`.</p><br><b>INFO</b><p>Support for specifying both a day-of-week and a day-of-month + day-of-month fields!</p><br><br><b>INFO</b><p>This is a default job that can be controlled with the property <pre>cleanup.database.active</pre> and <pre>cleanup.database.cron</pre>.</p><br><b>INFO</b><p>Support for specifying both a day-of-week and a day-of-month value is not complete (you'll need to use the '?' character in on of these fields).</p><br><b>INFO</b><p>Be careful when setting fire times between mid-night and 1:00 AM - "daylight savings" can cause a skip or a repeat depending on whether - the time moves back or jumps forward.</p><br><b>INFO</b><p>Specified in the Configuration.xml inside a <code>&lt;scheduler&gt;</code> element. + the time moves back or jumps forward.</p><br><b>INFO</b><p>Specified in the Configuration.xml inside a <code>&lt;scheduler&gt;</code> element. The scheduler element must be a direct child of configuration, not of adapter.</p><br><b>TIP</b><p>All registered jobs are displayed in the Frank!Console under 'Scheduler'.</p><br><b>WARNING</b><p>Support for the features described for the 'C' character is not complete.</p> @@ -17362,7 +18398,7 @@ Frank!Framework job to empty files in a given directory that have been stale (untouched) for the given <code>retention</code> duration. See DirectoryCleaner for more info. - + <h3>Possible cron expressions:</h3> <p> A "Cron-Expression" is a string comprised of 6 or 7 fields separated by @@ -17578,7 +18614,7 @@ day-of-month fields!</p><br><br><b>INFO</b><p>Support for specifying both a day-of-week and a day-of-month value is not complete (you'll need to use the '?' character in on of these fields).</p><br><b>INFO</b><p>Be careful when setting fire times between mid-night and 1:00 AM - "daylight savings" can cause a skip or a repeat depending on whether - the time moves back or jumps forward.</p><br><b>INFO</b><p>Specified in the Configuration.xml inside a <code>&lt;scheduler&gt;</code> element. + the time moves back or jumps forward.</p><br><b>INFO</b><p>Specified in the Configuration.xml inside a <code>&lt;scheduler&gt;</code> element. The scheduler element must be a direct child of configuration, not of adapter.</p><br><b>TIP</b><p>All registered jobs are displayed in the Frank!Console under 'Scheduler'.</p><br><b>WARNING</b><p>Support for the features described for the 'C' character is not complete.</p> @@ -17592,7 +18628,7 @@ Scheduled job to execute JDBC Queries using a FixedQuerySender. - + <h3>Possible cron expressions:</h3> <p> A "Cron-Expression" is a string comprised of 6 or 7 fields separated by @@ -17808,7 +18844,7 @@ day-of-month fields!</p><br><br><b>INFO</b><p>Support for specifying both a day-of-week and a day-of-month value is not complete (you'll need to use the '?' character in on of these fields).</p><br><b>INFO</b><p>Be careful when setting fire times between mid-night and 1:00 AM - "daylight savings" can cause a skip or a repeat depending on whether - the time moves back or jumps forward.</p><br><b>INFO</b><p>Specified in the Configuration.xml inside a <code>&lt;scheduler&gt;</code> element. + the time moves back or jumps forward.</p><br><b>INFO</b><p>Specified in the Configuration.xml inside a <code>&lt;scheduler&gt;</code> element. The scheduler element must be a direct child of configuration, not of adapter.</p><br><b>TIP</b><p>All registered jobs are displayed in the Frank!Console under 'Scheduler'.</p><br><b>WARNING</b><p>Support for the features described for the 'C' character is not complete.</p> @@ -17828,9 +18864,9 @@ If it is not present it add the job to the scheduler. 4. Once it's looped through all the database jobs, loop through the remaining jobs in the Map. Since they have been removed from the database, remove them from the Quartz Scheduler - - - Frank!Framework job which periodically looks in the `IBISSCHEDULES` table to see if a new DatabaseJob should be loaded.<br><br><b>INFO</b><p>This is a default job that can be controlled with the property `loadDatabaseSchedules.active` and `loadDatabaseSchedules.interval`.</p> + + + Frank!Framework job which periodically looks in the <pre>IBISSCHEDULES</pre> table to see if a new DatabaseJob should be loaded.<br><br><b>INFO</b><p>This is a default job that can be controlled with the property <pre>loadDatabaseSchedules.active</pre> and <pre>loadDatabaseSchedules.interval</pre>.</p> @@ -17843,7 +18879,7 @@ Frank!Framework Adapter recovery-job, which monitors all adapter states, attempts to recover them if required, - and logs this information to the <code>HEARTBEAT</code> log appender.<br><br><b>INFO</b><p>This is a default job that can be controlled with the property `recover.adapters.interval`.</p> + and logs this information to the <code>HEARTBEAT</code> log appender.<br><br><b>INFO</b><p>This is a default job that can be controlled with the property <pre>recover.adapters.interval</pre>.</p> @@ -17856,8 +18892,8 @@ Scheduled job to send messages to a FrankListener. - Message may be `null` (or empty). - + Message may be <pre>null</pre> (or empty). + <h3>Possible cron expressions:</h3> <p> A "Cron-Expression" is a string comprised of 6 or 7 fields separated by @@ -18073,7 +19109,7 @@ day-of-month fields!</p><br><br><b>INFO</b><p>Support for specifying both a day-of-week and a day-of-month value is not complete (you'll need to use the '?' character in on of these fields).</p><br><b>INFO</b><p>Be careful when setting fire times between mid-night and 1:00 AM - "daylight savings" can cause a skip or a repeat depending on whether - the time moves back or jumps forward.</p><br><b>INFO</b><p>Specified in the Configuration.xml inside a <code>&lt;scheduler&gt;</code> element. + the time moves back or jumps forward.</p><br><b>INFO</b><p>Specified in the Configuration.xml inside a <code>&lt;scheduler&gt;</code> element. The scheduler element must be a direct child of configuration, not of adapter.</p><br><b>TIP</b><p>All registered jobs are displayed in the Frank!Console under 'Scheduler'.</p><br><b>WARNING</b><p>Support for the features described for the 'C' character is not complete.</p> @@ -18629,6 +19665,7 @@ + @@ -18674,6 +19711,11 @@ Similar to <code>DATETIME</code>, except for the formatString that is <code>yyyy-MM-dd HH:mm:ss.SSS</code> by default + + + Converts the result to a Date, formatted as a unix timestamp in ms since Jan 01 1970. (UTC). + + Converts the result from a XML formatted dateTime to a Date. @@ -18716,6 +19758,15 @@ 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;) + + + A parameter which represents its value as a Message with mimetype <pre>application/json</pre>. If the + derived value was of type <pre>application/xml</pre> then it will be converted into JSON using the same rules as the + org.frankframework.pipes.JsonPipe. + If the derived value of the parameter was neither XML nor JSON format then a JSON will be constructed that looks like + <code>{&quot;paramName&quot;:value}</code>. (The value will be quoted if it was not a number or boolean value). + + @@ -18724,6 +19775,32 @@ + + + + + + + + + + + Fire &amp; Forget protocol + + + + + Request-Reply protocol + + + + + + + + + + @@ -18849,7 +19926,7 @@ - Fire & Forget protocol + Fire &amp; Forget protocol @@ -18886,7 +19963,7 @@ - + @@ -19005,13 +20082,6 @@ - - - - - - - @@ -19026,20 +20096,6 @@ - - - - - Fire & Forget protocol - - - - - Request-Reply protocol - - - - @@ -19140,6 +20196,14 @@ + + + + + + + + @@ -19220,6 +20284,23 @@ + + + + + + + + + + + + + + + + + @@ -19308,6 +20389,27 @@ + + + + + Automatically determine the type of the outgoing org.apache.qpid.protonj2.client.Message based + on the value of Message#isBinary(). + + + + + Create the outgoing message with an <code>AmqpValue</code> section containing character data. + + + + + Create the outgoing message with an AMQP <code>Body</code> section containing the message as binary data. + Only binary messages can be read or created in a streaming manner when messages are large. + + + + @@ -19412,38 +20514,38 @@ - Requires `tokenEndpoint`, `clientId` and `clientSecret` to be set. - Implements <a href="https://datatracker.ietf.org/doc/html/rfc6749#section-4.4">rfc6749</a>. The `clientId` and `clientSecret` are sent as basic authorization - to the authorization server. The `accessToken` is then used in the Authorization header to authenticate against the resource server. + Requires <pre>tokenEndpoint</pre>, <pre>clientId</pre> and <pre>clientSecret</pre> to be set. + Implements <a href="https://datatracker.ietf.org/doc/html/rfc6749#section-4.4">rfc6749</a>. The <pre>clientId</pre> and <pre>clientSecret</pre> are sent as basic authorization + to the authorization server. The <pre>accessToken</pre> is then used in the Authorization header to authenticate against the resource server. - Requires `tokenEndpoint`, `clientId` and `clientSecret` to be set. - Implements <a href="https://datatracker.ietf.org/doc/html/rfc6749#section-4.4">rfc6749</a>. The `clientId` and `clientSecret` are sent in the form body - to the authorization server. The `accessToken` is then used in the Authorization header to authenticate against the resource server. + Requires <pre>tokenEndpoint</pre>, <pre>clientId</pre> and <pre>clientSecret</pre> to be set. + Implements <a href="https://datatracker.ietf.org/doc/html/rfc6749#section-4.4">rfc6749</a>. The <pre>clientId</pre> and <pre>clientSecret</pre> are sent in the form body + to the authorization server. The <pre>accessToken</pre> is then used in the Authorization header to authenticate against the resource server. - Requires `tokenEndpoint`, `clientId`, `clientSecret`, `username` and `password` to be set. - Implements <a href="https://datatracker.ietf.org/doc/html/rfc6749#section-4.3">rfc6749</a>. The `clientId` and `clientSecret` are sent as basic authorization - to the authorization server. The `username` and `password` are sent in the form body to the authorization server. - The `accessToken` is then used in the Authorization header to authenticate against the resource server. + Requires <pre>tokenEndpoint</pre>, <pre>clientId</pre>, <pre>clientSecret</pre>, <pre>username</pre> and <pre>password</pre> to be set. + Implements <a href="https://datatracker.ietf.org/doc/html/rfc6749#section-4.3">rfc6749</a>. The <pre>clientId</pre> and <pre>clientSecret</pre> are sent as basic authorization + to the authorization server. The <pre>username</pre> and <pre>password</pre> are sent in the form body to the authorization server. + The <pre>accessToken</pre> is then used in the Authorization header to authenticate against the resource server. - Requires `tokenEndpoint`, `clientId`, `clientSecret`, `username` and `password` to be set. - Implements <a href="https://datatracker.ietf.org/doc/html/rfc6749#section-4.3">rfc6749</a>. The `clientId`, `clientSecret`, `username` - and `password` are sent in the form body to the authorization server. - The `accessToken` is then used in the Authorization header to authenticate against the resource server. + Requires <pre>tokenEndpoint</pre>, <pre>clientId</pre>, <pre>clientSecret</pre>, <pre>username</pre> and <pre>password</pre> to be set. + Implements <a href="https://datatracker.ietf.org/doc/html/rfc6749#section-4.3">rfc6749</a>. The <pre>clientId</pre>, <pre>clientSecret</pre>, <pre>username</pre> + and <pre>password</pre> are sent in the form body to the authorization server. + The <pre>accessToken</pre> is then used in the Authorization header to authenticate against the resource server. - Requires `samlNameId`, `samlIssuer`, `samlAudience`, `samlAssertionExpiry`, and a certificate and private key. - Generates a new SAML assertion, which will be exchanged for a token by the authorization server. The `accessToken` is then used + Requires <pre>samlNameId</pre>, <pre>samlIssuer</pre>, <pre>samlAudience</pre>, <pre>samlAssertionExpiry</pre>, and a certificate and private key. + Generates a new SAML assertion, which will be exchanged for a token by the authorization server. The <pre>accessToken</pre> is then used in the Authorization header to authenticate against the resource server. @@ -19674,14 +20776,6 @@ - - - - - - - - @@ -19728,12 +20822,14 @@ + + @@ -19752,7 +20848,7 @@ - Encrypts and then signs the given input. On top of the requirements for Encrypt action, signing requires senders to bet set for user's email; and secretKey & secretPassword to be set to private key's path and it's password (password is optional, if private key does not have protection). + Encrypts and then signs the given input. On top of the requirements for the <code>Encrypt</code> action, signing requires senders to be set for user's email; and secretKey <pre>&amp;</pre> secretPassword to be set to private key's path and it's password (password is optional, if private key does not have protection). @@ -19762,7 +20858,7 @@ - Decrypts and verifies the given input. On top of the requirements for Decrypt action, verification expects list of senders' email's and corresponding public keys. However, sender emails does not have to be set, and in that case, this pipe will only validate that someone signed the input. + Decrypts and verifies the given input. On top of the requirements for the <code>Decrypt</code> action, verification expects list of senders' email's and corresponding public keys. However, sender emails does not have to be set, and in that case, this pipe will only validate that someone signed the input. @@ -19795,7 +20891,7 @@ - Fire & Forget + Fire &amp; Forget @@ -19959,14 +21055,15 @@ + - Type of the messageing destination. + Type of the messaging destination. This function also sets the <code>useTopicFunctions</code> field, that controls whether Topic functions are used or Queue functions. Default: QUEUE - + @@ -20045,11 +21142,6 @@ class to use as initial context factory - - - Sets the value of providerURL - - maps to the field context.security_protocol @@ -20070,7 +21162,6 @@ authentication alias, may be used to override principal and credential-settings - @@ -20119,12 +21210,21 @@ Additional condition for a row to belong to this TableListener. Impacts all process states + + + The bootstrap servers to connect to, as a comma separated list. + + see <a href="https://www.eclipse.org/paho/files/javadoc/org/eclipse/paho/client/mqttv3/MqttClient.html#MqttClient-java.lang.String-java.lang.String-org.eclipse.paho.client.mqttv3.MqttClientPersistence-" target="_blank">MqttClient(java.lang.String serverURI, java.lang.String clientId, MqttClientPersistence persistence)</a> Default: 2 - + + + Name of the MqttClientSettings configuration in the `resources.yml`. + + Index of the field in the ImportParameterList of the RFC function that contains the correlationId Default: 0 @@ -20285,21 +21385,21 @@ The <code>transactionAttribute</code> declares transactional behavior of execution. It applies both to database transactions and XA transactions. The pipeline uses this to start a new transaction or suspend the current one when required. - For developers: it is equal to <a href=\"https://docs.oracle.com/javaee/7/tutorial/transactions003.htm\">EJB transaction attribute</a>. + For developers: it is equal to <a href="https://docs.oracle.com/javaee/7/tutorial/transactions003.htm">EJB transaction attribute</a>. Possible values for transactionAttribute: - <table border=\"1\"> + <table border="1"> <tr><th>transactionAttribute</th><th>callers Transaction</th><th>Pipeline excecuted in Transaction</th></tr> - <tr><td colspan=\"1\" rowspan=\"2\">Required</td> <td>none</td><td>T2</td></tr> + <tr><td colspan="1" rowspan="2">Required</td> <td>none</td><td>T2</td></tr> <tr><td>T1</td> <td>T1</td></tr> - <tr><td colspan=\"1\" rowspan=\"2\">RequiresNew</td> <td>none</td><td>T2</td></tr> + <tr><td colspan="1" rowspan="2">RequiresNew</td> <td>none</td><td>T2</td></tr> <tr><td>T1</td> <td>T2</td></tr> - <tr><td colspan=\"1\" rowspan=\"2\">Mandatory</td> <td>none</td><td>error</td></tr> + <tr><td colspan="1" rowspan="2">Mandatory</td> <td>none</td><td>error</td></tr> <tr><td>T1</td> <td>T1</td></tr> - <tr><td colspan=\"1\" rowspan=\"2\">NotSupported</td><td>none</td><td>none</td></tr> + <tr><td colspan="1" rowspan="2">NotSupported</td><td>none</td><td>none</td></tr> <tr><td>T1</td> <td>none</td></tr> - <tr><td colspan=\"1\" rowspan=\"2\">Supports</td> <td>none</td><td>none</td></tr> + <tr><td colspan="1" rowspan="2">Supports</td> <td>none</td><td>none</td></tr> <tr><td>T1</td> <td>T1</td></tr> - <tr><td colspan=\"1\" rowspan=\"2\">Never</td> <td>none</td><td>none</td></tr> + <tr><td colspan="1" rowspan="2">Never</td> <td>none</td><td>none</td></tr> <tr><td>T1</td> <td>error</td></tr> </table> Default: Supports @@ -20329,7 +21429,7 @@ - If set, the pipe result is copied to a session key that has the name defined by this attribute. + If set, the pipe result is copied to a session key that has the name defined by this attribute. The pipe result is still written as the output message as usual. @@ -20361,7 +21461,7 @@ - If durationThreshold >=0 and the duration of the message processing exceeded the value specified (in milliseconds) the message is logged informatory to be analyzed Default: -1 + If durationThreshold >=0 and the duration of the message processing exceeded the value specified (in milliseconds) the message will be logged and a monitor event will be fired. Default: -1 @@ -20402,7 +21502,7 @@ - Identical to the <code>soapBody</code> attribute except that it's used for the output message instead of the input message. For more information see <a href=\"#note1\">note 1</a> + Identical to the <code>soapBody</code> attribute except that it's used for the output message instead of the input message. @@ -20502,7 +21602,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 <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 + Alternatively, warnings can be switched off using suppression properties SuppressKeys#XSD_VALIDATION_WARNINGS_SUPPRESS_KEY, SuppressKeys#XSD_VALIDATION_ERROR_SUPPRESS_KEY and SuppressKeys#XSD_VALIDATION_FATAL_ERROR_SUPPRESS_KEY Default: true @@ -20659,8 +21759,8 @@ If set, the status code of the HTTP response is put in the specified sessionKey and the (error or okay) response message is returned. - Setting this property has a side effect. If a 4xx or 5xx result code is returned and if the configuration does not implement - the specific forward for the returned HTTP result code, then the success forward is followed instead of the exception forward. + Setting this property has a side effect. If a 4xx or 5xx result code is returned and if the pipeline does not implement + the specific forward, pipeline-global forward or pipeline-exit for the returned HTTP result code, then the success forward is followed instead of the exception forward. @@ -20694,11 +21794,6 @@ Alias used to obtain client_id and client_secret for authentication to <code>tokenEndpoint</code> - - - Client_id used in authentication to <code>tokenEndpoint</code> - - Client_secret used in authentication to <code>tokenEndpoint</code> @@ -20711,7 +21806,7 @@ - Only used when `tokenEndpoint` has been configured. Sets the OAuth authentication method and controls which authentication flow should be used. + Only used when <pre>tokenEndpoint</pre> has been configured. Sets the OAuth authentication method and controls which authentication flow should be used. @@ -20949,11 +22044,6 @@ Comma separated list of domains to which mails can be send, domains not on the list are filtered out. Empty allows all domains - - - Namespace defintions for xpathExpression. Must be in the form of a comma or space separated list of <code>prefix=namespaceuri</code>-definitions. For some use other cases (NOT xpathExpression), one entry can be without a prefix, that will define the default namespace. - - Key of session variable to store number of items processed, i.e. the position or index in the set of items to be processed. When handling the first item, the value will be 1. @@ -21008,6 +22098,31 @@ Maximum number of child threads that may run in parallel simultaneously (combined total of all threads calling this pipe). Use <code>0</code> for unlimited threads Default: 0 + + + Forward returned when the pipename derived from the stylesheet could not be found. + + + + + Forward returned when the content, on which the switch is performed, is empty. if <code>emptyforwardname</code> is not specified, <code>notfoundforwardname</code> is used. + + + + + Selected forward name will be stored in the specified session key. + + + + + Session key that will be used to get the forward name from. + + + + + controls namespace-awareness of XSLT transformation Default: true + + diff --git a/src/main/configurations/FrankConfig.xsd b/src/main/configurations/FrankConfig.xsd index 9705025..a96a4fd 100644 --- a/src/main/configurations/FrankConfig.xsd +++ b/src/main/configurations/FrankConfig.xsd @@ -1,6 +1,6 @@ - + Container of Adapters that belong together. @@ -42,14 +42,15 @@ - The Adapter is the central manager in the framework. It has knowledge of both + The Adapter is the central manager in the framework. It has knowledge both of the Receivers as well as the PipeLine and statistics. The Adapter is the class that is responsible for configuring, initializing and accessing/activating Receivers, Pipelines, statistics etc. - <br/> + <p> An Adapter receives a specific type of messages and processes them. It has Receivers that receive the messages and a PipeLine that transforms the incoming messages. Each adapter is part of a Configuration. - <br/> + </p> + <p> If an adapter can receive its messages through multiple channels (e.g. RESTful HTTP requests, incoming files, etc), each channel appears as a separate Receiver nested in the adapter. Each Receiver is also responsible for dealing with @@ -59,10 +60,159 @@ and that are not processed by the PipeLine. If the exit state is ERROR, the result message may not be usable by the calling system. This can be fixed by adding an errorMessageFormatter that formats the result message if the state is ERROR. - <br/><br/> + </p> + <p> Adapters gather statistics about the messages they process. - <br/> - Adapters can process messages in parallel. They are thread-safe. + </p> + <p> + Adapters can process messages in parallel. They are thread-safe. + </p> + <h2>Error Handling in Adapters</h2> + <p> + When an exception occurs in the execution of the Adapter pipeline, you can configure the listener to return + a formatter error message using an ErrorMessageFormatter or to throw an exception (see org.frankframework.receivers.JavaListener#setOnException(RequestReplyListener.ExceptionHandlingMethod), + org.frankframework.receivers.FrankListener#setOnException(RequestReplyListener.ExceptionHandlingMethod), org.frankframework.http.PushingListenerAdapter#setOnException(RequestReplyListener.ExceptionHandlingMethod)). + + </p> + <p> + Listeners that do not return a reply will roll back the transaction (if any) and after a maximum number of + retries, move the message to an error storage. + </p> + <p> + When one adapter calls another adapter using a org.frankframework.senders.FrankSender or + org.frankframework.senders.IbisLocalSender, and the adapter returns a formatted error message, + the SenderPipe can either use the <code>exception</code> forward or pick a forward based on the pipeline <code>exitCode</code>. + The default <code>exitCode</code> in case of an error is <pre>500</pre>, but you can set a different <code>exitCode</code> + in the <pre>PipeLineSession</pre>, for instance by passing it as a org.frankframework.parameters.NumberParameter to an + org.frankframework.pipes.ExceptionPipe. The <code>exitCode</code> has to be a numerical value. + </p> + + <h3>Error Handling Example 1 - Call Sub-Adapter Direct</h3> + + This example uses a org.frankframework.senders.FrankSender to call another adapter without the overhead of + a listener. The callee sets an <code>exitCode</code> on error, so the caller can choose a different path. + + <h4>Calling Adapter:</h4> + <p> + <pre> <code>&lt;Adapter name=&quot;ErrorHandling-Example-1&quot;&gt; + &lt;Receiver&gt; + &lt;!-- Listener omitted, not relevant for the example --&gt; + &lt;/Receiver&gt; + &lt;Pipeline&gt; + &lt;Exits&gt; + &lt;Exit name=&quot;done&quot; state=&quot;SUCCESS&quot;/&gt; + &lt;Exit name=&quot;error&quot; state=&quot;ERROR&quot;/&gt; + &lt;/Exits&gt; + &lt;SenderPipe name=&quot;Call Subadapter To Test&quot;&gt; + &lt;FrankSender scope=&quot;ADAPTER&quot; target=&quot;Validate-Message&quot;/&gt; + &lt;Forward name=&quot;42&quot; path=&quot;error&quot;/&gt; + &lt;/SenderPipe&gt; + &lt;DataSonnetPipe name=&quot;Extract Name&quot; styleSheetName=&quot;stylesheets/buildResponse.jsonnet&quot;/&gt; + &lt;/Pipeline&gt; + &lt;/Adapter&gt;</code></pre> + </p> + + <h4>Sub Adapter:</h4> + <p> + <pre> <code>&lt;Adapter name=&quot;Validate-Message&quot;&gt; + &lt;DataSonnetErrorMessageFormatter styleSheetName=&quot;stylesheets/BuildErrorMessage.jsonnet&quot;/&gt; + &lt;Pipeline&gt; + &lt;Exits&gt; + &lt;Exit name=&quot;done&quot; state=&quot;SUCCESS&quot;/&gt; + &lt;Exit name=&quot;error&quot; state=&quot;ERROR&quot;/&gt; + &lt;/Exits&gt; + &lt;!-- For simplicity of the example we assume the input message is valid if it contains a single item in an array 'results' --&gt; + &lt;SwitchPipe name=&quot;Check Success&quot; jsonPathExpression='concat(&quot;result-count=&quot;, $.results.length())' notFoundForwardName=&quot;result-count-too-many&quot;/&gt; + + &lt;!-- For simplicity we return the input unmodified in case of success. A realistic adapter might fetch a message remotely and return that after validations --&gt; + &lt;EchoPipe name=&quot;result-count=1&quot; getInputFromSessionKey=&quot;originalMessage&quot;&gt; + &lt;Forward name=&quot;success&quot; path=&quot;done&quot;/&gt; + &lt;/EchoPipe&gt; + + &lt;!-- No results: use this ExceptionPipe to pass parameters to the error message formatter and set an exitCode --&gt; + &lt;ExceptionPipe name=&quot;result-count=0&quot;&gt; + &lt;!-- When we do not set exitCode it will default to 500 when an adapter ends with an exception --&gt; + &lt;NumberParam name=&quot;exitCode&quot; value=&quot;42&quot;/&gt; + &lt;NumberParam name=&quot;errorCode&quot; value=&quot;-1&quot;/&gt; + &lt;Param name=&quot;errorMessage&quot; value=&quot;No results found&quot;/&gt; + &lt;/ExceptionPipe&gt; + + &lt;!-- Too many results: use this ExceptionPipe to pass different parameters to the error message formatter and set an exitCode --&gt; + &lt;ExceptionPipe name=&quot;result-count-too-many&quot;&gt; + &lt;NumberParam name=&quot;exitCode&quot; value=&quot;42&quot;/&gt; + &lt;NumberParam name=&quot;errorCode&quot; value=&quot;2&quot;/&gt; + &lt;Param name=&quot;errorMessage&quot; value=&quot;Too many results found, expected only single result&quot;/&gt; + &lt;/ExceptionPipe&gt; + &lt;/Pipeline&gt; + &lt;/Adapter&gt;</code></pre> + </p> + + <h3>Error Handling Example 2 - Call Sub-Adapter via a Listener</h3> + + This example uses a org.frankframework.senders.FrankSender to call another adapter via a org.frankframework.receivers.FrankListener. + Instead of a FrankSender / FrankListener, an org.frankframework.senders.IbisLocalSender / org.frankframework.receivers.JavaListener + pair can also be used to the same effect. + In this example we use the <code>exception</code> forward on the org.frankframework.pipes.SenderPipe to take the error-path after + an error result, but we could also use the <code>exitCode</code> instead as in the previous example. When + a sub-adapter ends with a state <code>ERROR</code>, and the calling org.frankframework.pipes.SenderPipe does not have a forward + for the <code>exitCode</code> returned from the sub-adapter, but does have an <code>exception</code> forward, then + the <code>exception</code> forward is chosen. + + <h4>Calling Adapter:</h4> + <p> + <pre> <code>&lt;Adapter name=&quot;ErrorHandling-Example-2&quot;&gt; + &lt;Receiver&gt; + &lt;!-- Listener omitted, not relevant for the example --&gt; + &lt;/Receiver&gt; + &lt;Pipeline&gt; + &lt;Exits&gt; + &lt;Exit name=&quot;done&quot; state=&quot;SUCCESS&quot;/&gt; + &lt;Exit name=&quot;error&quot; state=&quot;ERROR&quot;/&gt; + &lt;/Exits&gt; + &lt;SenderPipe name=&quot;Call Subadapter To Test&quot;&gt; + &lt;FrankSender scope=&quot;LISTENER&quot; target=&quot;Validate-Message&quot;/&gt; + &lt;Forward name=&quot;exception&quot; path=&quot;error&quot;/&gt; + &lt;/SenderPipe&gt; + &lt;DataSonnetPipe name=&quot;Extract Name&quot; styleSheetName=&quot;stylesheets/buildResponse.jsonnet&quot;/&gt; + &lt;/Pipeline&gt; + &lt;/Adapter&gt;</code></pre> + </p> + + <h4>Sub Adapter:</h4> + <p> + <pre> <code>&lt;Adapter name=&quot;Validate-Message&quot;&gt; + &lt;Receiver&gt; + &lt;!-- We need to set onException=&quot;format_and_return&quot; to make sure error message is returned instead of an exception thrown --&gt; + &lt;FrankListener name=&quot;Validate-Message&quot; onException=&quot;format_and_return&quot;/&gt; + &lt;/Receiver&gt; + &lt;DataSonnetErrorMessageFormatter styleSheetName=&quot;stylesheets/BuildErrorMessage.jsonnet&quot;/&gt; + &lt;Pipeline&gt; + &lt;Exits&gt; + &lt;Exit name=&quot;done&quot; state=&quot;SUCCESS&quot;/&gt; + &lt;Exit name=&quot;error&quot; state=&quot;ERROR&quot;/&gt; + &lt;/Exits&gt; + &lt;!-- For simplicity of the example we assume the input message is valid if it contains a single item in an array 'results' --&gt; + &lt;SwitchPipe name=&quot;Check Success&quot; jsonPathExpression='concat(&quot;result-count=&quot;, $.results.length())' notFoundForwardName=&quot;result-count-too-many&quot;/&gt; + + &lt;!-- For simplicity we return the input unmodified in case of success. A realistic adapter might fetch a message remotely and return that after validations --&gt; + &lt;EchoPipe name=&quot;result-count=1&quot; getInputFromSessionKey=&quot;originalMessage&quot;&gt; + &lt;Forward name=&quot;success&quot; path=&quot;done&quot;/&gt; + &lt;/EchoPipe&gt; + + &lt;!-- No results: use this ExceptionPipe to pass parameters to the error message formatter --&gt; + &lt;ExceptionPipe name=&quot;result-count=0&quot;&gt; + &lt;NumberParam name=&quot;errorCode&quot; value=&quot;-1&quot;/&gt; + &lt;Param name=&quot;errorMessage&quot; value=&quot;No results found&quot;/&gt; + &lt;/ExceptionPipe&gt; + + &lt;!-- Too many results: use this ExceptionPipe to pass different parameters to the error message formatter --&gt; + &lt;ExceptionPipe name=&quot;result-count-too-many&quot;&gt; + &lt;NumberParam name=&quot;errorCode&quot; value=&quot;2&quot;/&gt; + &lt;Param name=&quot;errorMessage&quot; value=&quot;Too many results found, expected only single result&quot;/&gt; + &lt;/ExceptionPipe&gt; + &lt;/Pipeline&gt; + &lt;/Adapter&gt;</code></pre> + </p> @@ -108,7 +258,14 @@ If set to <code>true</code>, the length of the message is shown in the msg log instead of the content of the message Default: <code>false</code> - + + + An optional field for documentation-purposes where you can add a reference to the design-document + used for the design of this adapter. + <br/> + Setting this field has no impact on the behaviour of the Adapter. + + @@ -339,7 +496,7 @@ If set to 0, then there is no delay after messages that had an error. </p> <p> - If this is not set on the receiver, then a default is taken from the configuration property `${receiver.defaultMaxBackoffDelay}` which + If this is not set on the receiver, then a default is taken from the configuration property <pre>${receiver.defaultMaxBackoffDelay}</pre> which defaults to 60 seconds. </p> @@ -401,7 +558,7 @@ - Name of the first pipe to execute when a message is to be processed Default: first pipe of the pipeline + Name of the first pipe to execute when a message is to be processed. Default: first pipe of the pipeline @@ -550,21 +707,21 @@ The <code>transactionAttribute</code> declares transactional behavior of execution. It applies both to database transactions and XA transactions. The pipeline uses this to start a new transaction or suspend the current one when required. - For developers: it is equal to <a href=\"https://docs.oracle.com/javaee/7/tutorial/transactions003.htm\">EJB transaction attribute</a>. + For developers: it is equal to <a href="https://docs.oracle.com/javaee/7/tutorial/transactions003.htm">EJB transaction attribute</a>. Possible values for transactionAttribute: - <table border=\"1\"> + <table border="1"> <tr><th>transactionAttribute</th><th>callers Transaction</th><th>Pipeline excecuted in Transaction</th></tr> - <tr><td colspan=\"1\" rowspan=\"2\">Required</td> <td>none</td><td>T2</td></tr> + <tr><td colspan="1" rowspan="2">Required</td> <td>none</td><td>T2</td></tr> <tr><td>T1</td> <td>T1</td></tr> - <tr><td colspan=\"1\" rowspan=\"2\">RequiresNew</td> <td>none</td><td>T2</td></tr> + <tr><td colspan="1" rowspan="2">RequiresNew</td> <td>none</td><td>T2</td></tr> <tr><td>T1</td> <td>T2</td></tr> - <tr><td colspan=\"1\" rowspan=\"2\">Mandatory</td> <td>none</td><td>error</td></tr> + <tr><td colspan="1" rowspan="2">Mandatory</td> <td>none</td><td>error</td></tr> <tr><td>T1</td> <td>T1</td></tr> - <tr><td colspan=\"1\" rowspan=\"2\">NotSupported</td><td>none</td><td>none</td></tr> + <tr><td colspan="1" rowspan="2">NotSupported</td><td>none</td><td>none</td></tr> <tr><td>T1</td> <td>none</td></tr> - <tr><td colspan=\"1\" rowspan=\"2\">Supports</td> <td>none</td><td>none</td></tr> + <tr><td colspan="1" rowspan="2">Supports</td> <td>none</td><td>none</td></tr> <tr><td>T1</td> <td>T1</td></tr> - <tr><td colspan=\"1\" rowspan=\"2\">Never</td> <td>none</td><td>none</td></tr> + <tr><td colspan="1" rowspan="2">Never</td> <td>none</td><td>none</td></tr> <tr><td>T1</td> <td>error</td></tr> </table> Default: Supports @@ -577,6 +734,11 @@ Timeout (in seconds) of transaction started to process a message. Default: <code>0</code> (use system default) + + + Name of the sender or the listener + + @@ -599,21 +761,6 @@ - - - - - - - - - - - - - Name of the sender or the listener - - @@ -805,7 +952,7 @@ - + @@ -871,7 +1018,7 @@ A JmsRealm is a definition of a JMS provider, and is kind of a utility - class to prevent the tedeous work of repeatedly defining all parameters + class to prevent the tedious work of repeatedly defining all parameters to connect to a queue or topic. <br/> This class is not an extension of JNDIBase, which would be logical, because @@ -1011,6 +1158,7 @@ + @@ -1039,6 +1187,41 @@ + + Parameter that resolves it's value to either <code>true</code> or <code>false</code>. + <p/> + Generic parameter definition. + + <p> + A parameter resembles an attribute. However, while attributes get their value at configuration-time, + parameters get their value at the time of processing the message. Value can be retrieved from the message itself, + a fixed value, or from the pipelineSession. If this does not result in a value (or if neither of these is specified), a default value + can be specified. If an XPathExpression, XSLT stylesheet or JSONPathExpression is specified, it will be applied to the message, the value retrieved + from the pipelineSession or the fixed value specified. If the transformation produces no output, the default value + of the parameter is taken if provided. + </p> + Examples: + <pre><code> + stored under SessionKey 'TransportInfo': + &lt;transportinfo&gt; + &lt;to&gt;***@zonnet.nl&lt;/to&gt; + &lt;to&gt;***@zonnet.nl&lt;/to&gt; + &lt;cc&gt;***@zonnet.nl&lt;/cc&gt; + &lt;/transportinfo&gt; + + to obtain all 'to' addressees as a parameter: + sessionKey="TransportInfo" + xpathExpression="transportinfo/to" + type="xml" + + Result: + &lt;to&gt;***@zonnet.nl&lt;/to&gt; + &lt;to&gt;***@zonnet.nl&lt;/to&gt; + </code></pre> + + N.B. to obtain a fixed value: a non-existing 'dummy' <code>sessionKey</code> in combination with the fixed value in <code>defaultValue</code> is used traditionally. + The current version of parameter supports the <code>value</code> attribute, that is sufficient to set a fixed value.<br><br><b>TIP</b><p><code>!false</code> also resolves to <code>true</code>, and <code>!true</code> is seen as <code>false</code>.</p> + @@ -1056,6 +1239,22 @@ + + + A parameter which represents its value as a Message with mimetype <pre>application/json</pre>. If the + derived value was of type <pre>application/xml</pre> then it will be converted into JSON using the same rules as the + org.frankframework.pipes.JsonPipe. + If the derived value of the parameter was neither XML nor JSON format then a JSON will be constructed that looks like + <code>{&quot;paramName&quot;:value}</code>. (The value will be quoted if it was not a number or boolean value). + + + + + + + + + @@ -1110,13 +1309,13 @@ - The value of the parameter, or the base for transformation using xpathExpression or stylesheet, or formatting. + The value of the parameter, or the base for transformation using xpathExpression, jpathExpression or stylesheet, or formatting. Key of a PipelineSession-variable. <br/>If specified, the value of the PipelineSession variable is used as input for - the xpathExpression or stylesheet, instead of the current input message. <br/>If no xpathExpression or stylesheet are + the xpathExpression, jpathExpression or stylesheet, instead of the current input message. <br/>If no xpathExpression, jpathExpression or stylesheet are specified, the value itself is returned. <br/>If the value '*' is specified, all existing sessionkeys are added as parameter of which the name starts with the name of this parameter. <br/>If also the name of the parameter has the value '*' then all existing sessionkeys are added as parameter (except tsReceived) @@ -1132,6 +1331,11 @@ Instead of a fixed <code>sessionKey</code> it's also possible to use a XPath expression applied to the input message to extract the name of the session-variable. + + + Instead of a fixed <code>sessionKey</code> it's also possible to use a JPath expression applied to the input message to extract the name of the session-variable. + + URL to a stylesheet that wil be applied to the contents of the message or the value of the session-variable. @@ -1142,6 +1346,14 @@ the XPath expression to extract the parameter value from the (xml formatted) input or session-variable. + + + The JPath expression to extract the parameter value from the input or session-variable. + The input should be JSON or XML formatted, if it is XML formatter a simple XML-to-JSON conversion is done. + When <code>jsonPathExpression</code> is set, then the value of the parameter will be derived using the same order + of precedence as with <code>xpathExpression</code>. + + If set to <code>2</code> or <code>3</code> a Saxon (net.sf.saxon) xslt processor 2.0 or 3.0 respectively will be used, otherwise xslt processor 1.0 (org.apache.xalan). <code>0</code> will auto-detect Default: 0 @@ -1269,6 +1481,11 @@ + + + + + @@ -1337,6 +1554,18 @@ + + + Listener for AMQP 1.0 end-points. + + + + + + + + + Listener that allows a Receiver to receive messages as a REST webservice. @@ -1348,7 +1577,7 @@ The generated OpenAPI specifications have <code>servers</code> and <code>paths</code> objects and therefore they document the full URLs of the provided services. <p> - It is possible to automatically generate eTags over the listener result. This can be controlled by globally + It is possible to automatically generate eTags over the listener result. This can be controlled by globally setting the property <code>api.etag.enabled</code> or by setting the attribute <code>updateEtag="true"</code>. When enabled the listener will respond to the <code>If-Match</code>, <code>If-None-Match</code> headers and may return status code 304. <p> @@ -1363,7 +1592,14 @@ <li><code>etag.cache.username</code></li> <li><code>etag.cache.password</code></li> <li><code>etag.cache.authalias</code></li> - </ul><br><br><b>TIP</b><p>The OPTIONS verb will automatically be handled by the framework.</p> + </ul> + + Custom pages can be added to the console (using a comma separated list, no spaces) with the following property + <code>customViews.names=MyApplication</code>. + + Specify details for each view, the url is either a relative path from the web-content folder or an external url, eq. <code>http://google.com/</code>. + <code>customViews.MyApplication.name=Custom View</code> + <code>customViews.MyApplication.url=myWebapp</code><br><br><b>TIP</b><p>The OPTIONS verb will automatically be handled by the framework.</p><br><b>TIP</b><p>Its possible to change the URL mapping from /api to /rest (or use both) for easy transitions from the RestListener.</p> @@ -1385,7 +1621,7 @@ 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> @@ -1407,7 +1643,7 @@ listener that looks in a FileSystem for files. When a file is found, it is moved to an in-process folder, so that it isn't found more than once. <br/> - The information specified by #setMessageType(IMessageType) is then passed to the pipeline.<br><br><b>INFO</b><p>To avoid problems with duplicate filenames in folders like the <code>errorFolder</code> or <code>processedFolder</code>, + The information specified by <code>messageType</code> is then passed to the pipeline.<br><br><b>INFO</b><p>To avoid problems with duplicate filenames in folders like the <code>errorFolder</code> or <code>processedFolder</code>, you should configure either <code>overwrite=&quot;true&quot;</code>, configure <code>numberOfBackups</code> to a value larger than 0, or configure an <code>inProcessFolder</code> and <code>fileTimeSensitive=&quot;true&quot;</code>. These options can be used together as well.</p><br><b>WARNING</b><p>In addition to the above, prior to release 9.0 it was not sufficient to configure <code>inProcessFolder</code> and <code>fileTimeSensitive</code> @@ -1423,7 +1659,72 @@ - ESB (Enterprise Service Bus) extension of JmsListener. + ESB (Enterprise Service Bus) extension of JmsListener. + + 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><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 for committing. + 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.</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, that in turn sends the message to + whatever it is configured to.</p> + + <p>You can add parameters to the JmsListener, the values will be added as Headers to the JMS response message.</p> + + <p><b>Notice:</b> the JmsListener is ONLY capable of processing + jakarta.jms.TextMessages and jakarta.jms.BytesMessage<br/><br/> + </p> + + JMSListener re-implemented as a pushing listener rather than a pulling listener. + The JMS messages have to come in from an external source: an MDB or a Spring + message container. + + This version of the <code>JmsListener</code> supports distributed transactions using the XA-protocol. + No special action is required to have the listener join the transaction. + </p><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.</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><b>Notice:</b> the JmsListener is ONLY capable of processing + jakarta.jms.TextMessages and jakarta.jms.BytesMessage<br/><br/> + </p> + + Provides functions for jms connections, queues and topics and acts as a facade + to hide for clients whether a <code>Queue</code> or <code>Topic</code> is used. + <br/> + The <code>destinationType</code> field specifies which type should be used.<br/> + This class sends messages with JMS. @@ -1468,7 +1769,7 @@ listener that looks in a FileSystem for files. When a file is found, it is moved to an in-process folder, so that it isn't found more than once. <br/> - The information specified by #setMessageType(IMessageType) is then passed to the pipeline.<br><br><b>INFO</b><p>To avoid problems with duplicate filenames in folders like the <code>errorFolder</code> or <code>processedFolder</code>, + The information specified by <code>messageType</code> is then passed to the pipeline.<br><br><b>INFO</b><p>To avoid problems with duplicate filenames in folders like the <code>errorFolder</code> or <code>processedFolder</code>, you should configure either <code>overwrite=&quot;true&quot;</code>, configure <code>numberOfBackups</code> to a value larger than 0, or configure an <code>inProcessFolder</code> and <code>fileTimeSensitive=&quot;true&quot;</code>. These options can be used together as well.</p><br><b>WARNING</b><p>In addition to the above, prior to release 9.0 it was not sufficient to configure <code>inProcessFolder</code> and <code>fileTimeSensitive</code> @@ -1493,10 +1794,77 @@ <tr><td>jmsRealm</td><td>&nbsp;</td><td>"qcf_tibco_p2p_ff"</td></tr> <tr><td>messageProtocol</td><td>protocol of ESB service to be called. Possible values <ul> - <li>"FF": Fire & Forget protocol</li> + <li>"FF": Fire &amp; Forget protocol</li> <li>"RR": Request-Reply protocol</li> </ul></td><td>"FF"</td></tr> - </table></p> + </table></p> + + ESB (Enterprise Service Bus) extension of JmsListener. + + 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><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 for committing. + 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.</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, that in turn sends the message to + whatever it is configured to.</p> + + <p>You can add parameters to the JmsListener, the values will be added as Headers to the JMS response message.</p> + + <p><b>Notice:</b> the JmsListener is ONLY capable of processing + jakarta.jms.TextMessages and jakarta.jms.BytesMessage<br/><br/> + </p> + + JMSListener re-implemented as a pushing listener rather than a pulling listener. + The JMS messages have to come in from an external source: an MDB or a Spring + message container. + + This version of the <code>JmsListener</code> supports distributed transactions using the XA-protocol. + No special action is required to have the listener join the transaction. + </p><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.</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><b>Notice:</b> the JmsListener is ONLY capable of processing + jakarta.jms.TextMessages and jakarta.jms.BytesMessage<br/><br/> + </p> + + Provides functions for jms connections, queues and topics and acts as a facade + to hide for clients whether a <code>Queue</code> or <code>Topic</code> is used. + <br/> + The <code>destinationType</code> field specifies which type should be used.<br/> + This class sends messages with JMS. @@ -1519,11 +1887,20 @@ Use this listener to receive messages from other adapters or a scheduler within the same Frank-application or from other components residing in the same JVM. JavaListeners can receive calls made via de ibis-servicedispatcher, which should be located on the JVM classpath to receive calls from other components in the JVM. If you want to call an adapter in the same Frank-application, consider using the IbisLocalSender. - <br/> + <p> To understand what this listener does exactly, please remember that the Frank!Framework is a Java application. The JavaListener listens to Java method calls. You can issue Java method calls using a IbisJavaSender (external call) or IbisLocalSender (internal call). - For more information see the ibis-servicedispatcher project. + </p> + <p> + Calling the JavaListener via the IbisJavaSender forces all request messages to be passed as strings without + metadata. + </p> + <p> + When calling the JavaListener via the IbisLocalSender all messages are passed in their native format, + retaining all their metadata. + </p> + <p> @@ -1588,7 +1965,41 @@ <p><b>Notice:</b> the JmsListener is ONLY capable of processing jakarta.jms.TextMessages and jakarta.jms.BytesMessage<br/><br/> - </p> + </p> + + JMSListener re-implemented as a pushing listener rather than a pulling listener. + The JMS messages have to come in from an external source: an MDB or a Spring + message container. + + This version of the <code>JmsListener</code> supports distributed transactions using the XA-protocol. + No special action is required to have the listener join the transaction. + </p><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.</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><b>Notice:</b> the JmsListener is ONLY capable of processing + jakarta.jms.TextMessages and jakarta.jms.BytesMessage<br/><br/> + </p> + + Provides functions for jms connections, queues and topics and acts as a facade + to hide for clients whether a <code>Queue</code> or <code>Topic</code> is used. + <br/> + The <code>destinationType</code> field specifies which type should be used.<br/> + This class sends messages with JMS. @@ -1598,6 +2009,21 @@ + + + Experimental IListener for listening to a topic in + a Kafka instance. + The Kafka integration is still under development so do not + currently use unless you wish to participate in this development. + + + + + + + + + Read messages from the IBISSTORE database table previously stored by a MessageStoreSender. @@ -1642,11 +2068,13 @@ Links to <a href="https://www.eclipse.org/paho/files/javadoc" target="_blank">https://www.eclipse.org/paho/files/javadoc</a> are opened in a new window/tab because the response from eclipse.org contains header X-Frame-Options:SAMEORIGIN which will make the browser refuse to open the link inside this frame. - Requires a resource to be configured. Example `resources.yml`: + Requires a resource to be configured. Example <pre>resources.yml</pre>: <pre><code>mqtt: - name: &quot;my-connection&quot; - type: &quot;org.frankframework.jdbc.datasource.MqttClientSettings&quot; url: &quot;tcp://host:port&quot; + username: &quot;&quot; + password: &quot;&quot; + authalias: &quot;${property.name.here}&quot; properties: automaticReconnect: &quot;true&quot; cleanSession: &quot;false&quot;</code></pre> @@ -1654,7 +2082,7 @@ The clientId is automatically determined from <code>transactionmanager.uid</code>, but can optionally be overwritten. Be aware that the clientId must be unique for each instance of the framework. <br><br> - Inbound and outbound messages are persisted while they are in flight to prevent data loss. The default is an in memory store, but the `persistenceDirectory` + Inbound and outbound messages are persisted while they are in flight to prevent data loss. The default is an in memory store, but the <pre>persistenceDirectory</pre> flag can be used to set the disk storage location. @@ -1694,7 +2122,13 @@ </p> <p><b>Notice:</b> the JmsListener is ONLY capable of processing <code>jakarta.jms.TextMessage</code>s <br/><br/> - </p> + </p> + + Provides functions for jms connections, queues and topics and acts as a facade + to hide for clients whether a <code>Queue</code> or <code>Topic</code> is used. + <br/> + The <code>destinationType</code> field specifies which type should be used.<br/> + This class sends messages with JMS. @@ -1732,7 +2166,13 @@ <p><b>Notice:</b> the JmsListener is ONLY capable of processing jakarta.jms.TextMessages and jakarta.jms.BytesMessage<br/><br/> - </p> + </p> + + Provides functions for jms connections, queues and topics and acts as a facade + to hide for clients whether a <code>Queue</code> or <code>Topic</code> is used. + <br/> + The <code>destinationType</code> field specifies which type should be used.<br/> + This class sends messages with JMS. @@ -1755,27 +2195,6 @@ - - - Listener that allows a Receiver to receive messages as a REST webservice. - Prepends the configured URI pattern with <code>rest/</code>. When you are writing a new Frank config, you are recommended - to use an ApiListener instead. You can find all serviced URI patterns - in the Frank!Console: main menu item Webservice, heading Available REST Services. - - <p> - Note: - Servlets' multipart configuration expects a Content-Type of <code>multipart/form-data</code> (see http://docs.oracle.com/javaee/6/api/javax/servlet/annotation/MultipartConfig.html). - So do not use other multipart content types like <code>multipart/related</code> - </p> - - - - - - - - - File listener for an SMB2 or SMB3 share. @@ -1783,7 +2202,7 @@ listener that looks in a FileSystem for files. When a file is found, it is moved to an in-process folder, so that it isn't found more than once. <br/> - The information specified by #setMessageType(IMessageType) is then passed to the pipeline.<br><br><b>INFO</b><p>To avoid problems with duplicate filenames in folders like the <code>errorFolder</code> or <code>processedFolder</code>, + The information specified by <code>messageType</code> is then passed to the pipeline.<br><br><b>INFO</b><p>To avoid problems with duplicate filenames in folders like the <code>errorFolder</code> or <code>processedFolder</code>, you should configure either <code>overwrite=&quot;true&quot;</code>, configure <code>numberOfBackups</code> to a value larger than 0, or configure an <code>inProcessFolder</code> and <code>fileTimeSensitive=&quot;true&quot;</code>. These options can be used together as well.</p><br><b>WARNING</b><p>In addition to the above, prior to release 9.0 it was not sufficient to configure <code>inProcessFolder</code> and <code>fileTimeSensitive</code> @@ -1823,7 +2242,7 @@ listener that looks in a FileSystem for files. When a file is found, it is moved to an in-process folder, so that it isn't found more than once. <br/> - The information specified by #setMessageType(IMessageType) is then passed to the pipeline.<br><br><b>INFO</b><p>To avoid problems with duplicate filenames in folders like the <code>errorFolder</code> or <code>processedFolder</code>, + The information specified by <code>messageType</code> is then passed to the pipeline.<br><br><b>INFO</b><p>To avoid problems with duplicate filenames in folders like the <code>errorFolder</code> or <code>processedFolder</code>, you should configure either <code>overwrite=&quot;true&quot;</code>, configure <code>numberOfBackups</code> to a value larger than 0, or configure an <code>inProcessFolder</code> and <code>fileTimeSensitive=&quot;true&quot;</code>. These options can be used together as well.</p><br><b>WARNING</b><p>In addition to the above, prior to release 9.0 it was not sufficient to configure <code>inProcessFolder</code> and <code>fileTimeSensitive</code> @@ -1851,6 +2270,72 @@ + + 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><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 for committing. + 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.</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, that in turn sends the message to + whatever it is configured to.</p> + + <p>You can add parameters to the JmsListener, the values will be added as Headers to the JMS response message.</p> + + <p><b>Notice:</b> the JmsListener is ONLY capable of processing + jakarta.jms.TextMessages and jakarta.jms.BytesMessage<br/><br/> + </p> + + JMSListener re-implemented as a pushing listener rather than a pulling listener. + The JMS messages have to come in from an external source: an MDB or a Spring + message container. + + This version of the <code>JmsListener</code> supports distributed transactions using the XA-protocol. + No special action is required to have the listener join the transaction. + </p><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.</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><b>Notice:</b> the JmsListener is ONLY capable of processing + jakarta.jms.TextMessages and jakarta.jms.BytesMessage<br/><br/> + </p> + + Provides functions for jms connections, queues and topics and acts as a facade + to hide for clients whether a <code>Queue</code> or <code>Topic</code> is used. + <br/> + The <code>destinationType</code> field specifies which type should be used.<br/> + This class sends messages with JMS. + @@ -1875,7 +2360,7 @@ <li>SOAP protocol is stored under a session key 'soapProtocol'</li> <li>SOAP action is stored under a session key 'SOAPAction'</li> </ul> - and for each response a multipart message is constructed if a 'multipart'-XML is provided in sessionKey specified by multipartXmlSessionKey. + and for each response a multipart message is constructed if a 'multipart'-XML is provided in sessionKey specified by <code>multipartXmlSessionKey</code>. @@ -1887,6 +2372,91 @@ + + + + + + + + Name of the AMQP connection in the <pre>amqp</pre> section of the <code>resources.yaml</code> file. + + + + + Timeout in seconds for sending messages and receiving replies. Default: <code>30</code> + + + + + Set the type of address to which messages are being sent, TOPIC or QUEUE. + For <pre>MessageProtocol#RR</pre> the type will always be QUEUE. Default: <pre>QUEUE</pre> + + + + + + + + Set the address (name of the queue or topic) on which to send messages + + + + + If the adapter needs to send a reply message, and the address of the reply-queue is not + dynamically set on the message, then a <code>replyAddressName</code> can be configured for the + queue on which to send the reply message. If a <code>replyAddressName</code> is configured but + the message does have a dynamic reply-queue, then the dynamic reply-queue is used and the + <code>replyAddressName</code> is ignored. + + + + + If <pre>true</pre>, then listen for durable messages on a topic + + + + + Set the message time-to-live, in milliseconds, for any reply messages sent by this listener. Default: <pre>-1</pre>ms, meaning no expiry. + + + + + Receive message as Fire-and-Forget, or as Request-Reply Default: <pre>FF</pre> + + + + + + + + When the listener is durable, then a subscriptionName should be set so the message broker + can keep track of which subscribers have already received each message. + + + + + + When an exception happens in the execution of the pipeline, with <code>RETHROW</code> the + exception is thrown to the caller. With <code>FORMAT_AND_RETURN</code> the exception is processed + by the Adapter#setErrorMessageFormatter(IErrorMessageFormatter) and returned as result-message + of the Adapter. + + <br/> + The default is currently <code>RETHROW</code> for backwards compatibility but will become <code>FORMAT_AND_RETURN</code> in a future version. Default: RETHROW + + + + + + + + The functional name of the object. + + + + + @@ -2105,7 +2675,20 @@ Name of the listener as known to the adapter - + + + When an exception happens in the execution of the pipeline, with <code>RETHROW</code> the + exception is thrown to the caller. With <code>FORMAT_AND_RETURN</code> the exception is processed + by the Adapter#setErrorMessageFormatter(IErrorMessageFormatter) and returned as result-message + of the Adapter. + + <br/> + The default is currently <code>RETHROW</code> for backwards compatibility but will become <code>FORMAT_AND_RETURN</code> in a future version. Default: RETHROW + + + + + @@ -2305,6 +2888,7 @@ + @@ -2327,6 +2911,11 @@ + + + The name of this FrankElement + + @@ -2376,6 +2965,7 @@ + Name of the JMS destination (queue or topic) to use @@ -2403,6 +2993,11 @@ + + + The name of this FrankElement + + @@ -2416,7 +3011,11 @@ - + + + Sets the value of providerURL + + @@ -2426,13 +3025,7 @@ - - - - Name of the sender or the listener - - @@ -2454,8 +3047,8 @@ - Interval <i>in milliseconds</i> for the poll guard to check whether a successful poll was done by the receive - (https://docs.oracle.com/javaee/7/api/javax/jms/messageconsumer.html#receive-long-) since last check. If polling has stopped this will be logged + Interval <i>in milliseconds</i> for the poll guard to check whether a successful poll was done by the + (<a href="https://docs.oracle.com/javaee/7/api/javax/jms/messageconsumer.html#receive-long-">JMS Receive call</a>) since last check. If polling has stopped this will be logged and the listener will be stopped and started in an attempt to workaround problems with polling. Polling might stop due to bugs in the JMS driver/implementation which should be fixed by the supplier. As the poll time includes reading and processing of the message no successful poll might be registered since the last check when message processing takes a long time, hence @@ -2467,6 +3060,7 @@ + @@ -2489,6 +3083,11 @@ + + + The name of this FrankElement + + @@ -2666,6 +3265,20 @@ The name of the <code>FrankListener</code> must be unique across the configuration. + + + When an exception happens in the execution of the pipeline, with <code>RETHROW</code> the + exception is thrown to the caller. With <code>FORMAT_AND_RETURN</code> the exception is processed + by the Adapter#setErrorMessageFormatter(IErrorMessageFormatter) and returned as result-message + of the Adapter. + + <br/> + The default is currently <code>RETHROW</code> for backwards compatibility but will become <code>FORMAT_AND_RETURN</code> in a future version. Default: RETHROW + + + + + @@ -2967,15 +3580,24 @@ If not set (not even to an empty value), all session keys can be returned. Default: all session keys can be returned - + - Should the JavaListener throw a ListenerException when it occurs or return an error message Default: true + If <code>true</code>, the WSDL of the service provided by this listener will available for download Default: false - + - If <code>true</code>, the WSDL of the service provided by this listener will available for download Default: false + When an exception happens in the execution of the pipeline, with <code>RETHROW</code> the + exception is thrown to the caller. With <code>FORMAT_AND_RETURN</code> the exception is processed + by the Adapter#setErrorMessageFormatter(IErrorMessageFormatter) and returned as result-message + of the Adapter. + + <br/> + The default is currently <code>RETHROW</code> for backwards compatibility but will become <code>FORMAT_AND_RETURN</code> in a future version. Default: RETHROW + + + @@ -3038,13 +3660,18 @@ - + - + + + + Name of the sender or the listener + + @@ -3054,37 +3681,19 @@ User name for authentication when connecting to database, when none found from <code>authAlias</code> - - - - - Password for authentication when connecting to database, when none found from <code>authAlias</code> - - - - - controls the use of transactions - - - - - - - - - - - - - - - - - + + + - Name of the sender or the listener + Password for authentication when connecting to database, when none found from <code>authAlias</code> + + + + + controls the use of transactions + @@ -3101,7 +3710,7 @@ - Field containing the status of the message. + Field containing the status of the message. <b>NB: For optimal performance, an index should exist that starts with this field, followed by all fields that are used with a fixed value in the select condition, and end with the <code>orderField</code>. @@ -3153,6 +3762,55 @@ + + + + + + + + The group id of the consumer + + + + + How often to check for new topics when using Patterns. (in MS) + + + + + The topics to listen to as comma-separated list. Regular expressions are supported, + for instance: <code>example.*</code>. + + + + + The functional name of the object. + + + + + + + + + The client id to use when connecting to the Kafka cluster. + + + + + + + + + + + The client id to use when connecting to the Kafka cluster. + + + + + @@ -3203,7 +3861,7 @@ - Field containing the status of the message. + Field containing the status of the message. <b>NB: For optimal performance, an index should exist that starts with this field, followed by all fields that are used with a fixed value in the select condition, and end with the <code>orderField</code>. Default: TYPE @@ -3268,7 +3926,7 @@ - + @@ -3291,7 +3949,7 @@ character encoding of received messages Default: UTF-8 - + @@ -3300,85 +3958,6 @@ - - - - - - - - Uri pattern to match, the {uri} part in https://mydomain.com/ibis4something/rest/{uri}, where mydomain.com and ibis4something refer to 'your ibis'. - - - - - Method (e.g. GET or POST) to match - - - - - Key of session variable to store etag - - - - - Key of Session variable that determines requested content type, overrides produces - - - - - Can be either <code>/rest</code> or <code>/rest-public</code> and must correspond with the available RestListenerServlet path(s). - - - - - Comma separated list of authorization roles which are granted for this rest service Default: IbisWebService,IbisObserver,IbisDataAdmin,IbisAdmin,IbisTester - - - - - - - Indicates whether the parts of a multipart entity should be retrieved and put in session keys. This can only be done once! Default: true - - - - - Mediatype (e.g. XML, JSON, TEXT) the RestServiceDispatcher receives as input Default: XML - - - - - - - - Mediatype (e.g. XML, JSON, TEXT) the RestServiceDispatcher sends as output, if set to json the ibis will automatically try to convert the xml message Default: XML - - - - - - - - If set to true the ibis will automatically validate and process etags Default: false - - - - - If set to true the ibis will automatically create an etag Default: false - - - - - Uses an JsonPipe to convert the json-input to xml, and xml-output to json. - Use with caution, a properly configured Input/Output-wrapper can do much more and is more robust! Default: true - - - - - - - @@ -3643,7 +4222,7 @@ - + @@ -3674,6 +4253,12 @@ where mydomain.com and ibis4something refer to 'your ibis'. + + + SOAP Action to listen to. Requests sent to `/servlet/rpcrouter` which matches the soapAction will be processed by this listener. + This is slightly different from the namespaceURI which routes messages based on the first element's namespace. + + If set, MTOM is enabled on the SOAP binding @@ -3716,7 +4301,13 @@ - ESB (Enterprise Service Bus) extension of JmsSender. + ESB (Enterprise Service Bus) extension of <code>JmsSender</code>. + + Provides functions for jms connections, queues and topics and acts as a facade + to hide for clients whether a <code>Queue</code> or <code>Topic</code> is used. + <br/> + The <code>destinationType</code> field specifies which type should be used.<br/> + This class sends messages with JMS. @@ -3730,7 +4321,16 @@ JMS sender which will add an IMS header to the message and call the MQ specific logic. - <p>See JmsSender for configuration</p> + <p>See JmsSender for configuration</p> + + JMS sender which will call IBM WebSphere MQ specific <code>setTargetClient(JMSC.MQJMS_CLIENT_NONJMS_MQ)</code> on the destination prior to sending a message. + This is needed when the MQ destination is not a JMS receiver otherwise format errors occur (e.g. dots are added after every character in the message). + + Provides functions for jms connections, queues and topics and acts as a facade + to hide for clients whether a <code>Queue</code> or <code>Topic</code> is used. + <br/> + The <code>destinationType</code> field specifies which type should be used.<br/> + This class sends messages with JMS. @@ -3742,7 +4342,11 @@ - This class sends messages with JMS. + Provides functions for jms connections, queues and topics and acts as a facade + to hide for clients whether a <code>Queue</code> or <code>Topic</code> is used. + <br/> + The <code>destinationType</code> field specifies which type should be used.<br/> + This class sends messages with JMS. @@ -3754,13 +4358,14 @@ - JMS sender which will call IBM WebSphere MQ specific - setTargetClient(JMSC.MQJMS_CLIENT_NONJMS_MQ) on the destination prior to - sending a message. This is needed when the MQ destination is not a JMS - receiver otherwise format errors occur (e.g. dots are added after every - character in the message). + JMS sender which will call IBM WebSphere MQ specific <code>setTargetClient(JMSC.MQJMS_CLIENT_NONJMS_MQ)</code> on the destination prior to sending a message. + This is needed when the MQ destination is not a JMS receiver otherwise format errors occur (e.g. dots are added after every character in the message). - <p>See JmsSender for configuration</p> + Provides functions for jms connections, queues and topics and acts as a facade + to hide for clients whether a <code>Queue</code> or <code>Topic</code> is used. + <br/> + The <code>destinationType</code> field specifies which type should be used.<br/> + This class sends messages with JMS. @@ -3926,7 +4531,7 @@ - ESB (Enterprise Service Bus) extension of JmsTransactionalStorage. + ESB (Enterprise Service Bus) extension of <code>JmsTransactionalStorage</code>. <p> Depending on the <code>type</code> of the <code>TransactionalStorage</code> @@ -3938,17 +4543,31 @@ ESB.Infrastructure.US.Log.BusinessLog.2.AuditLog.1.Action</li> </ul> </p> - <p> - <b>Configuration </b><i>(where deviating from - JmsTransactionalStorage)</i><b>:</b> - <table border="1"> - <tr> - <th>attributes</th> - <th>description</th> - <th>default</th> - </tr> - </table> - </p> + + Implements a message log (<code>JmsMessageLog</code>) or error store (<code>JmsErrorStorage</code>) that uses JMS technology. + <br/><br/> + <b>Message log:</b> A message log writes messages in persistent storage for logging purposes. + When a message log appears in a receiver, it also ensures that the same message is only processed + once, even if a related pushing listener receives the same message multiple times. + <br/><br/> + <b>Error store:</b> Appears in a receiver or sender pipe to store messages that could not be processed. + Storing a message in the error store is the last resort of the Frank!Framework. Many types of listeners and senders + offer a retry mechanism. Only if several tries have failed, then an optional transaction is not rolled + back and the message is stored in the error store. Users can retry messages in an error store using the Frank!Console. When + this is done, the message is processed in the same way as messages received from the original source. + <br/><br/> + How does a message log or error store see duplicate messages? The message log or error store + always appears in combination with a sender or listener. This sender or listener determines + a key based on the sent or received message. Messages with the same key are considered to + be the same. + + Basic browser of JMS Messages. + + Provides functions for jms connections, queues and topics and acts as a facade + to hide for clients whether a <code>Queue</code> or <code>Topic</code> is used. + <br/> + The <code>destinationType</code> field specifies which type should be used.<br/> + This class sends messages with JMS. @@ -3985,13 +4604,16 @@ Storage structure is defined in /IAF_util/IAF_DatabaseChangelog.xml. If these database objects do not exist, the Frank!Framework will try to create them. <br/><br/> - N.B. Note on using XA transactions: + {@ff.warning When using an XA transaction manager like Narayana, make sure to configure an XA-capable datasource + for the JdbcErrorStorage or JdbcMessageLog. Otherwise messages may get lost.} + {@ff.info N.B. Note on using XA transactions: If transactions are used on Oracle, make sure that the database user can access the table SYS.DBA_PENDING_TRANSACTIONS. If not, transactions present when the server goes down cannot be properly recovered, resulting in exceptions like: <pre> The error code was XAER_RMERR. The exception stack trace follows: javax.transaction.xa.XAException at oracle.jdbc.xa.OracleXAResource.recover(OracleXAResource.java:508) - </pre> + </pre> + } @@ -4018,7 +4640,15 @@ How does a message log or error store see duplicate messages? The message log or error store always appears in combination with a sender or listener. This sender or listener determines a key based on the sent or received message. Messages with the same key are considered to - be the same. + be the same. + + Basic browser of JMS Messages. + + Provides functions for jms connections, queues and topics and acts as a facade + to hide for clients whether a <code>Queue</code> or <code>Topic</code> is used. + <br/> + The <code>destinationType</code> field specifies which type should be used.<br/> + This class sends messages with JMS. @@ -4223,7 +4853,7 @@ - + @@ -4242,7 +4872,7 @@ - ESB (Enterprise Service Bus) extension of JmsTransactionalStorage. + ESB (Enterprise Service Bus) extension of <code>JmsTransactionalStorage</code>. <p> Depending on the <code>type</code> of the <code>TransactionalStorage</code> @@ -4254,17 +4884,31 @@ ESB.Infrastructure.US.Log.BusinessLog.2.AuditLog.1.Action</li> </ul> </p> - <p> - <b>Configuration </b><i>(where deviating from - JmsTransactionalStorage)</i><b>:</b> - <table border="1"> - <tr> - <th>attributes</th> - <th>description</th> - <th>default</th> - </tr> - </table> - </p> + + Implements a message log (<code>JmsMessageLog</code>) or error store (<code>JmsErrorStorage</code>) that uses JMS technology. + <br/><br/> + <b>Message log:</b> A message log writes messages in persistent storage for logging purposes. + When a message log appears in a receiver, it also ensures that the same message is only processed + once, even if a related pushing listener receives the same message multiple times. + <br/><br/> + <b>Error store:</b> Appears in a receiver or sender pipe to store messages that could not be processed. + Storing a message in the error store is the last resort of the Frank!Framework. Many types of listeners and senders + offer a retry mechanism. Only if several tries have failed, then an optional transaction is not rolled + back and the message is stored in the error store. Users can retry messages in an error store using the Frank!Console. When + this is done, the message is processed in the same way as messages received from the original source. + <br/><br/> + How does a message log or error store see duplicate messages? The message log or error store + always appears in combination with a sender or listener. This sender or listener determines + a key based on the sent or received message. Messages with the same key are considered to + be the same. + + Basic browser of JMS Messages. + + Provides functions for jms connections, queues and topics and acts as a facade + to hide for clients whether a <code>Queue</code> or <code>Topic</code> is used. + <br/> + The <code>destinationType</code> field specifies which type should be used.<br/> + This class sends messages with JMS. @@ -4301,13 +4945,16 @@ Storage structure is defined in /IAF_util/IAF_DatabaseChangelog.xml. If these database objects do not exist, the Frank!Framework will try to create them. <br/><br/> - N.B. Note on using XA transactions: + {@ff.warning When using an XA transaction manager like Narayana, make sure to configure an XA-capable datasource + for the JdbcErrorStorage or JdbcMessageLog. Otherwise messages may get lost.} + {@ff.info N.B. Note on using XA transactions: If transactions are used on Oracle, make sure that the database user can access the table SYS.DBA_PENDING_TRANSACTIONS. If not, transactions present when the server goes down cannot be properly recovered, resulting in exceptions like: <pre> The error code was XAER_RMERR. The exception stack trace follows: javax.transaction.xa.XAException at oracle.jdbc.xa.OracleXAResource.recover(OracleXAResource.java:508) - </pre> + </pre> + } @@ -4334,7 +4981,15 @@ How does a message log or error store see duplicate messages? The message log or error store always appears in combination with a sender or listener. This sender or listener determines a key based on the sent or received message. Messages with the same key are considered to - be the same. + be the same. + + Basic browser of JMS Messages. + + Provides functions for jms connections, queues and topics and acts as a facade + to hide for clients whether a <code>Queue</code> or <code>Topic</code> is used. + <br/> + The <code>destinationType</code> field specifies which type should be used.<br/> + This class sends messages with JMS. @@ -4353,21 +5008,82 @@ + + + Applies a DataSonnet <code>.jsonnet</code> JSON transformation file to the standard JSON error message generated by the ErrorMessageFormatter. + + <p> + If the transformation does not succeed, this 'standard' error message is returned in JSON format and an exception is logged. + </p> + + + + + + + + + - This class wraps an error in an XML string. + This is the default IErrorMessageFormatter implementation that is used when no specific <code>ErrorMessageFormatter</code> has + been configured. It wraps an error in an XML or JSON string. XML is the default. + + <p> + {@inheritClassDoc } + </p> + <p> + If the exception is a PipeRunException that has parameters set on it, then these parameters + are added to a <code>params</code> element in the error message. These parameters can be set from an + org.frankframework.pipes.ExceptionPipe. + </p> + <p> + If you need more control over the layout of the error message, then configure your org.frankframework.core.Adapter or + org.frankframework.configuration.Configuration with an <code>ErrorMessageFormatter</code> implementation + that can reformat the error message to the desired layout: the XslErrorMessageFormatter for XML error formats or the + DataSonnetErrorMessageFormatter for JSON error messages. + </p> <p> Sample xml: <pre><code>&lt;errorMessage&gt; &lt;message timestamp=&quot;Mon Oct 13 12:01:57 CEST 2003&quot; originator=&quot;NN IOS AdapterFramework(set from 'application.name' and 'application.version')&quot; message=&quot;message describing the error that occurred&quot;&gt; - &lt;location class=&quot;org.frankframework.pipes.XmlSwitch&quot; name=&quot;ServiceSwitch&quot;/&gt; - &lt;details&gt;detailed information of the error&lt;/details&gt; + &lt;location class=&quot;org.frankframework.pipes.SwitchPipe&quot; name=&quot;ServiceSwitch&quot;/&gt; + &lt;details&gt;Exception and stacktrace&lt;/details&gt; + &lt;params&gt; + &lt;param name=&quot;sampleParam&gt;paramValue&lt;/param&gt; + &lt;param name=&quot;errorCode&gt;535&lt;/param&gt; + &lt;/params&gt; &lt;originalMessage messageId=&quot;...&quot; receivedTime=&quot;Mon Oct 27 12:10:18 CET 2003&quot; &gt; &lt;![CDATA[contents of message for which the error occurred]]&gt; &lt;/originalMessage&gt; - &lt;/errorMessage&gt;</code></pre> + &lt;/errorMessage&gt;</code></pre> + </p> + <p> + Sample JSON: + <pre><code>{ + &quot;errorMessage&quot;: { + &quot;timestamp&quot;: &quot;Mon Oct 13 12:01:57 CEST 2003&quot;, + &quot;originator&quot;: &quot;IAF 9.2&quot;, + &quot;message&quot;: &quot;Message describing error and location&quot;, + &quot;location&quot;: { + &quot;class&quot;: &quot;org.frankframework.pipes.SwitchPipe&quot;, + &quot;name&quot;: &quot;ServiceSwitch&quot; + }, + &quot;details&quot;: &quot;Exception and stacktrace&quot;, + &quot;params&quot;: { + &quot;sampleParam&quot;: &quot;paramValue&quot;, + &quot;errorCode&quot;: 535 + }, + &quot;originalMessage&quot;: { + &quot;messageId&quot;: &quot;...&quot;, + &quot;receivedTime&quot;: &quot;Mon Oct 27 12:10:18 CET 2003&quot;, + &quot;message&quot;: &quot;contents of message for which the error occurred&quot; + } + } + }</code></pre> + </p> @@ -4380,7 +5096,16 @@ - ErrorMessageFormatter that returns a fixed message with replacements. + ErrorMessageFormatter that returns a fixed message with replacements. + + <p> + The fixed message is loaded from a file or a string configured on the formatter. If neither + is set, then the default ErrorMessageFormatter is used to create the error message. + </p> + <p> + Fixed strings in the generated error message can be replaced using <code>replaceFrom</code> / <code>replaceTo</code>. As + last step, an optional XSLT stylesheet transformation is applied. + </p> @@ -4392,7 +5117,7 @@ - ErrorMessageFormatter that returns a soap fault message. + ErrorMessageFormatter that returns a standard SOAP fault message. @@ -4404,11 +5129,11 @@ - Applies a XSLT-stylesheet to the standard error generated by an ErrorMessageFormatter. + Applies an XSLT stylesheet to the standard error message generated by the ErrorMessageFormatter. + <p> If the transformation does not succeed, this 'standard' error message is returned and an exception is logged. - - Hint: use <code>xpathExression="/errorMessage/@message"</code> for a single compact string as errormessage. + </p><br><br><b>TIP</b><p>use <code>xpathExpression="/errorMessage/@message"</code> for a single compact string as errormessage.</p> @@ -4420,13 +5145,60 @@ + + + + + + + + + + + + + + Set a DataSonnet stylesheet to transform the default JSON error message to a custom format. + + + + + Computes the mimetype when it is unknown. It requires more computation but improves + mapping results. Default: true + + + + + Output file format. DataSonnet is semi-capable of converting the converted JSON to a different format. Default: JSON + + + + + + + + + + + + + + + + + Format the error message as XML or as JSON. Default: XML + + + + + - + - + @@ -4440,20 +5212,34 @@ name of the file containing the result message - - + + + The string to replace + + + + + What to replace the <code>replaceFrom</code> with. + + - - + + + + + + + + - + - + @@ -4462,7 +5248,7 @@ - + URL to the stylesheet used to transform the output of the standard ErrorMessageFormatter @@ -4472,6 +5258,9 @@ xPathExpression to use for transformation + + + @@ -4627,7 +5416,7 @@ - + @@ -5158,19 +5947,20 @@ - + The JSON Schema to validate to - Prefix to element name to find subschema in schema Default: /definitions/ + The subSchemaPrefix is an optional attribute used when referencing a subschema located in a nested structure, such as $defs or definitions. + Adding only the subSchema attribute is not enough if your schema organizes definitions in nested objects. Add root attribute to complete the process. Default: /definitions/ - If set: key of session variable to store reasons of mis-validation in Default: failureReason + If set: creates a sessionKey to store any errors when validating the json output Default: failureReason @@ -5178,12 +5968,12 @@ - + - - + + - + name of the root element @@ -5195,8 +5985,8 @@ - - + + @@ -5370,7 +6160,7 @@ - + @@ -6304,7 +7094,7 @@ - If <code>true</code>, the cache is stored on disk and survives configuration reloads & JVM restarts. Default: false + If <code>true</code>, the cache is stored on disk and survives configuration reloads and JVM restarts. Default: false @@ -6470,7 +7260,13 @@ </p> <p><b>Notice:</b> the JmsListener is ONLY capable of processing <code>jakarta.jms.TextMessage</code>s <br/><br/> - </p> + </p> + + Provides functions for jms connections, queues and topics and acts as a facade + to hide for clients whether a <code>Queue</code> or <code>Topic</code> is used. + <br/> + The <code>destinationType</code> field specifies which type should be used.<br/> + This class sends messages with JMS. @@ -6591,7 +7387,12 @@ - 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 + If endPosition &gt;= 0 then this field contains the endPosition (Java style, i.e the position of the next character) 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 + + + + + If <code>false</code>, no newlines are expected, all records of the size specified in the flows are read from a single 'line'. Default: true @@ -6703,7 +7504,19 @@ - + + + + + + + + + Sender to send to AMQP 1.0 end-points. + + + + @@ -6791,6 +7604,7 @@ &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;property name=&quot;DocumentDetail&quot; isNull=&quot;true&quot; /&gt; &lt;/properties&gt; &lt;/cmis&gt;</code></pre> </p> @@ -6839,7 +7653,7 @@ QuerySender that interprets the input message as a query, possibly with attributes. - Messages are expected to contain sql-text.<br><br><b>INFO</b><p>Please note that the default value of <code>trimSpaces</code> is `true`</p> + Messages are expected to contain sql-text.<br><br><b>INFO</b><p>Please note that the default value of <code>trimSpaces</code> is <pre>true</pre></p> @@ -6863,7 +7677,13 @@ - ESB (Enterprise Service Bus) extension of JmsSender. + ESB (Enterprise Service Bus) extension of <code>JmsSender</code>. + + Provides functions for jms connections, queues and topics and acts as a facade + to hide for clients whether a <code>Queue</code> or <code>Topic</code> is used. + <br/> + The <code>destinationType</code> field specifies which type should be used.<br/> + This class sends messages with JMS. @@ -6887,7 +7707,32 @@ - QuerySender that assumes a fixed query, possibly with attributes.<br><br><b>INFO</b><p>See DB2XMLWriter for ResultSet!</p><br><b>INFO</b><p>Please note that the default value of <code>trimSpaces</code> is `true`</p> + QuerySender that assumes a fixed query, possibly with attributes. + + Example of a <code>XML</code> result: + <pre><code>&lt;result&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;1&quot;&gt; + &lt;field name=&quot;FIELDNAME&quot;&gt;value&lt;/field&gt; + &lt;field name=&quot;FIELDNAME&quot; null=&quot;true&quot;&gt;&lt;/field&gt; + &lt;field name=&quot;FIELDNAME&quot;&gt;value&lt;/field&gt; + &lt;field name=&quot;FIELDNAME&quot;&gt;value&lt;/field&gt; + &lt;/row&gt; + &lt;/rowset&gt; + &lt;/result&gt;</code></pre> + + See DB2XMLWriter for more information about the ResultSet!<br><br><b>INFO</b><p>The result <code>fieldname</code> and <code>columntype</code> are always capital case.</p><br><b>TIP</b><p>The default value of <code>trimSpaces</code> is <pre>true</pre>.</p><br><b>TIP</b><p>The default value of <code>useNamedParams</code> is determined by the presence of <code>?&#123;...&#125;</code> in the query.</p> @@ -6977,7 +7822,7 @@ 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: @@ -7136,14 +7981,10 @@ <p><b>Expected message format:</b></p> <p>GET methods expect a message looking like this: - <pre> - param_name=param_value&another_param_name=another_param_value - </pre> + <pre><code>param_name=param_value&amp;another_param_name=another_param_value</code></pre> <p>POST AND PUT methods expect a message similar as GET, or looking like this: - <pre> - param_name=param_value - another_param_name=another_param_value - </pre><br><br><b>INFO</b><p>When used as MTOM sender and MTOM receiver doesn't support Content-Transfer-Encoding "base64", messages without line feeds will give an error. + <pre><code>param_name=param_value + another_param_name=another_param_value</code></pre><br><br><b>INFO</b><p>When used as MTOM sender and MTOM receiver doesn't support Content-Transfer-Encoding "base64", messages without line feeds will give an error. This can be fixed by setting the Content-Transfer-Encoding in the MTOM sender.</p><br><b>INFO</b><p>The use of `multi-value` parameters can be achieved by adding multiple parameters with the same name.</p> @@ -7158,7 +7999,16 @@ JMS sender which will add an IMS header to the message and call the MQ specific logic. - <p>See JmsSender for configuration</p> + <p>See JmsSender for configuration</p> + + JMS sender which will call IBM WebSphere MQ specific <code>setTargetClient(JMSC.MQJMS_CLIENT_NONJMS_MQ)</code> on the destination prior to sending a message. + This is needed when the MQ destination is not a JMS receiver otherwise format errors occur (e.g. dots are added after every character in the message). + + Provides functions for jms connections, queues and topics and acts as a facade + to hide for clients whether a <code>Queue</code> or <code>Topic</code> is used. + <br/> + The <code>destinationType</code> field specifies which type should be used.<br/> + This class sends messages with JMS. @@ -7310,7 +8160,7 @@ </p> <p> Failure to ensure the output is a string may mean the result will look like <code>[Object object]</code>. - </p> + </p><br><br><b>INFO</b><p>J2V8 is not compatible with ARM based environments.</p><br><b>WARNING</b><p>The default Javascript runtime has been changed from J2V8 to GraalJS.</p> @@ -7322,7 +8172,11 @@ - This class sends messages with JMS. + Provides functions for jms connections, queues and topics and acts as a facade + to hide for clients whether a <code>Queue</code> or <code>Topic</code> is used. + <br/> + The <code>destinationType</code> field specifies which type should be used.<br/> + This class sends messages with JMS. @@ -7346,6 +8200,20 @@ + + + Experimental ISender for sending messages to a Kafka instance. + The Kafka integration is still under development so do not + currently use unless you wish to participate in this development. + + + + + + + + + Sender to obtain information from and write to an LDAP Directory. @@ -7466,13 +8334,14 @@ - JMS sender which will call IBM WebSphere MQ specific - setTargetClient(JMSC.MQJMS_CLIENT_NONJMS_MQ) on the destination prior to - sending a message. This is needed when the MQ destination is not a JMS - receiver otherwise format errors occur (e.g. dots are added after every - character in the message). + JMS sender which will call IBM WebSphere MQ specific <code>setTargetClient(JMSC.MQJMS_CLIENT_NONJMS_MQ)</code> on the destination prior to sending a message. + This is needed when the MQ destination is not a JMS receiver otherwise format errors occur (e.g. dots are added after every character in the message). - <p>See JmsSender for configuration</p> + Provides functions for jms connections, queues and topics and acts as a facade + to hide for clients whether a <code>Queue</code> or <code>Topic</code> is used. + <br/> + The <code>destinationType</code> field specifies which type should be used.<br/> + This class sends messages with JMS. @@ -7584,11 +8453,13 @@ Links to <a href="https://www.eclipse.org/paho/files/javadoc" target="_blank">https://www.eclipse.org/paho/files/javadoc</a> are opened in a new window/tab because the response from eclipse.org contains header X-Frame-Options:SAMEORIGIN which will make the browser refuse to open the link inside this frame. - Requires a resource to be configured. Example `resources.yml`: + Requires a resource to be configured. Example <pre>resources.yml</pre>: <pre><code>mqtt: - name: &quot;my-connection&quot; - type: &quot;org.frankframework.jdbc.datasource.MqttClientSettings&quot; url: &quot;tcp://host:port&quot; + username: &quot;&quot; + password: &quot;&quot; + authalias: &quot;${property.name.here}&quot; properties: automaticReconnect: &quot;true&quot; cleanSession: &quot;false&quot;</code></pre> @@ -7596,7 +8467,7 @@ The clientId is automatically determined from <code>transactionmanager.uid</code>, but can optionally be overwritten. Be aware that the clientId must be unique for each instance of the framework. <br><br> - Inbound and outbound messages are persisted while they are in flight to prevent data loss. The default is an in memory store, but the `persistenceDirectory` + Inbound and outbound messages are persisted while they are in flight to prevent data loss. The default is an in memory store, but the <pre>persistenceDirectory</pre> flag can be used to set the disk storage location. @@ -7676,7 +8547,7 @@ - QuerySender that writes each row in a ResultSet to a file.<br><br><b>INFO</b><p>Please note that the default value of <code>trimSpaces</code> is `true`</p> + QuerySender that writes each row in a ResultSet to a file.<br><br><b>INFO</b><p>Please note that the default value of <code>trimSpaces</code> is <pre>true</pre></p> @@ -7881,7 +8752,7 @@ &lt;/rowset&gt; &lt;/result&gt; &lt;/resultset&gt;</code></pre> - </p><br><br><b>INFO</b><p>Support for stored procedures is currently experimental and changes in the currently produced output-format are expected.</p><br><b>INFO</b><p>Please note that the default value of <code>trimSpaces</code> is `true`</p> + </p><br><br><b>INFO</b><p>Please note that the default value of <code>trimSpaces</code> is <pre>true</pre></p> @@ -8033,7 +8904,7 @@ sql - type [0..1] one of {select;ddl;other}, other by default - query</code></pre> - <br/><br><br><b>INFO</b><p>Please note that the default value of <code>trimSpaces</code> is `true`</p> + <br/><br><br><b>INFO</b><p>Please note that the default value of <code>trimSpaces</code> is <pre>true</pre></p> @@ -8157,6 +9028,15 @@ The S3 service endpoint, either with or without the protocol. (e.g. https://sns.us-west-1.amazonaws.com or sns.us-west-1.amazonaws.com) + + + Set the desired storage class for the S3 object when action is move,copy or write. + More info on storage classes can be found on the <a href="https://aws.amazon.com/s3/storage-classes/">AWS S3 docs</a>. Default: <pre>STANDARD</pre> + + + + + Maximum concurrent connections towards S3 Default: 50 @@ -8282,6 +9162,77 @@ + + + + + + + + + Name of the AMQP connection in the <pre>amqp</pre> section of the <code>resources.yaml</code> file. + + + + + Timeout in seconds for sending messages and receiving replies. Default: <code>30</code> + + + + + Set the type of address to which messages are being sent, TOPIC or QUEUE. + For <pre>MessageProtocol#RR</pre> the type will always be QUEUE. Default: <pre>QUEUE</pre> + + + + + + + + Set the address (name of the queue or topic) on which to send messages. + + + + + Set the message type: MessageType#TEXT to character data to be sent as <code>AmqpValue</code> section, + MessageType#BINARY for binary data to be sent as AMQP <code>Data</code> section, or MessageType#AUTO to + decide automatically based on the wether the input Message is binary or not. + <p> + When a message is to be received as a streaming message by the recipient, it has to be sent as a MessageType#BINARY + message. + <br/> + When #setStreamingMessages(boolean) is configured <pre>true</pre>, the <code>messageType</code> is ignored. + </p> Default: <pre>AUTO</pre> + + + + + + + + Set if messages should be created as streaming messages. Streaming messages are + always sent as binary messages, with an AMQP <code>Body</code> section. + + + + + + Set the message time-to-live, in milliseconds. Default: <pre>-1</pre>ms, meaning no expiry. + + + + + Send message as Fire-and-Forget, or as Request-Reply Default: <pre>FF</pre> + + + + + + + + + + @@ -8556,7 +9507,7 @@ - + @@ -8637,12 +9588,6 @@ - - - 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 - - Controls automatically whether blobdata is stored compressed and/or serialized in the database Default: false @@ -9221,7 +10166,11 @@ - + + + Client_id used in authentication to <code>tokenEndpoint</code> + + @@ -9290,7 +10239,11 @@ - + + + Client_id used in authentication to <code>tokenEndpoint</code> + + @@ -9883,6 +10836,33 @@ + + + + + + + + The topic to send messages to. Only one topic per sender. Wildcards are not supported. + + + + + The functional name of the object. + + + + + + + + + The client id to use when connecting to the Kafka cluster. + + + + + @@ -9950,10 +10930,24 @@ (Only used when <code>operation=search/deepsearch</code>) when <code>true</code> the xml '&lt;ldapresult&gt;object not found&lt;/ldapresult&gt;' is returned instead of the PartialResultException 'unprocessed continuation reference(s)' Default: false + + + name of the sender + + - + + + + + + + + + + @@ -10126,7 +11120,7 @@ Collection to act upon. Can be overridden by parameter <code>collection</code> - + Action @@ -10199,7 +11193,7 @@ character encoding of received messages Default: UTF-8 - + @@ -10307,7 +11301,11 @@ - + + + Client_id used in authentication to <code>tokenEndpoint</code> + + @@ -11078,7 +12076,11 @@ - + + + Client_id used in authentication to <code>tokenEndpoint</code> + + @@ -11323,7 +12325,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 <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 + Alternatively, warnings can be switched off using suppression properties SuppressKeys#XSD_VALIDATION_WARNINGS_SUPPRESS_KEY, SuppressKeys#XSD_VALIDATION_ERROR_SUPPRESS_KEY and SuppressKeys#XSD_VALIDATION_FATAL_ERROR_SUPPRESS_KEY Default: true @@ -11704,11 +12706,6 @@ 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 - - @@ -12209,7 +13206,7 @@ &quot;userId&quot; : &quot;123&quot;, &quot;name&quot; : &quot;DataSonnet&quot; }</code></pre> - + Jsonnet stylesheet: <pre><code>{ &quot;uid&quot;: payload.userId, @@ -12232,7 +13229,7 @@ - Pipe that sleeps for a specified time, which defaults to 5000 msecs. + Pipe that sleeps for a specified time, which defaults to 5000 msecs. It is useful for testing purposes. @@ -12526,7 +13523,12 @@ Pipe that throws an exception based on the input message. <br/> - The `success` forward is only used when the (deprecated) attribute `throwException` has been set to `false`. Otherwise, the (default) `exception` forward will be used.<br><br><b>WARNING</b><p>The attribute `throwException` has been deprecated and thus the `success` forward will be removed along with the `throwException` attribute.</p> + Parameters that are set on the ExceptionPipe will be added to the error message that is produced by + the org.frankframework.errormessageformatters.ErrorMessageFormatter that has been configured on + the org.frankframework.core.Adapter and will also be copied into the PipeLineSession, so + that they can be passed back to a calling adapter as <code>returnedSessionKey</code>. + <br/> + The <pre>success</pre> forward is only used when the (deprecated) attribute <pre>throwException</pre> has been set to <pre>false</pre>. Otherwise, the (default) <pre>exception</pre> forward will be used.<br><br><b>WARNING</b><p>The attribute <pre>throwException</pre> has been deprecated and thus the <pre>success</pre> forward will be removed along with the <pre>throwException</pre> attribute.</p> @@ -12772,7 +13774,7 @@ - + @@ -12810,11 +13812,32 @@ - This pipe can be used to generate a hash for the given message using an algorithm. With this, you can prove the integrity of the message. - If you use one of the Mac-based algorithms (starting with 'Hmac'), you need a secret as well. A Mac algorithm uses a secret, combined with the algorithm - to create a 'hash' of a message. Only sources that have this secret are able to generate the same hash for the given message. - With this, you can prove the integrity and authenticity of a message. - <p> + This pipe can be used to generate a hash for the given message using an algorithm. With this, you can prove the integrity of the message. + If you need to prove the authenticity of the message as well, use one of the Mac-based algorithms (starting with 'Hmac'). These algorithms + require a secret to prove both integrity and authenticity. The HMac combined with the algorithm is used + to create a 'hash' of a message. Only sources that have this secret are able to generate the same hash for the given message. + <p> + The hash is generated based on the bytes of the given input message. + <p> + The supported integrity algorithms are: + <ul> + <li>MD5</li> + <li>SHA</li> + <li>SHA256</li> + <li>SHA384</li> + <li>SHA512</li> + <li>CRC32</li> + <li>Adler32</li> + </ul> + <p> + The supported integrity <i>and</i> authenticity algorithms are: + <ul> + <li>HmacMD5</li> + <li>HmacSHA1</li> + <li>HmacSHA256</li> + <li>HmacSHA384</li> + <li>HmacSHA512</li> + </ul> @@ -12826,15 +13849,16 @@ - Selects a forward based on an expression. The expression type is coupled to the mediaType: + <p>Selects a forward based on an expression. The expression type is coupled to the mediaType:</p> <ul> <li>XML (application/xml) uses Xpath.</li> <li>JSON (application/json) uses jsonPath.</li> </ul> - The XML mediaType is the default type. If you want to use JSON, you need to set this using 'mimeType' in the Message. + + <p>The XML mediaType is the default type. If you want to use JSON, you need to set this using 'mimeType' in the Message.</p> <h4>Expressions</h4> - Expressions are used to select nodes in the given input document. Imagine a collection of books: + <p>Expressions are used to select nodes in the given input document. Imagine a collection of books:</p> <pre><code>{ &quot;store&quot;: { &quot;book&quot;: [ @@ -12867,48 +13891,37 @@ ] } }</code></pre> - <p> - With both expression languages, you'll be able to select one or multiple nodes from this collection. - <br/> - Using this pipe, there are two options. Use it only with an <code>expression</code> or combine it with an <code>expressionValue</code>. When using the expression, - the pipe evaluates to <code>thenForwardName</code> when <em>there is a match</em>, even if it is empty. In the given example, this might be one of: + + <p>With both expression languages, you'll be able to select one or multiple nodes from this collection.</p> + + <p>Using this pipe, there are two options. Use it only with an <code>expression</code> or combine it with an <code>expressionValue</code>. When using the expression, + the pipe evaluates to <code>thenForwardName</code> when <em>there is a match</em>, even if it is empty. In the given example, this might be one of:</p> <pre><code>$.store $.store.book[1] $.store.book[?(@.price == 22.99)].author $.store.book[?(@.category == 'fiction')]</code></pre> <h4>expressionValue</h4> - When using expression combined with expressionValue, the pipe evaluates to <code>thenForwardName</code> when <em>the matched value is equal to - expressionValue</em>. This needs to be an exact match. - <br/> + <p>When using expression combined with expressionValue, the pipe evaluates to <code>thenForwardName</code> when <em>the matched value is equal to + expressionValue</em>. This needs to be an exact match.</p> <h4>XML/XPATH</h4> - Xpath has been around a long time. Information about the syntax can be found everywhere on the internet. + <p>Xpath has been around a long time. Information about the syntax can be found everywhere on the internet. The XML implementation wraps the Xpath expression in an XSL. This enables us to use complex expressions which evaluate to true or false instead of being used only as a selector of nodes in the input XML. This is available to be backwards compatible with the XmlIf pipe. - For instance, take the following example input: + For instance, take the following example input:</p> <pre><code>&lt;results&gt; &lt;result name=&quot;test&quot;&gt;&lt;/result&gt; &lt;result name=&quot;test&quot;&gt;&lt;/result&gt; &lt;/results&gt;</code></pre> - Examples with complex expressions might be something like: <code>number(count(/results/result[contains(@name , 'test')])) &gt; 1</code>, to test if there's more + + <p>Examples with complex expressions might be something like: <code>number(count(/results/result[contains(@name , 'test')])) &gt; 1</code>, to test if there's more than one node found containing the string 'test'. Please check if a simpler, less error-prone expression like - <code>/results/result[contains(@name, 'test')]</code> can suffice. - <p></p> + <code>/results/result[contains(@name, 'test')]</code> can suffice.</p> <h4>Without expression</h4> - Without an expression, the default behaviour is to assume the input is a string. The code will try to match the string to an optional regular expression - or tries to match the string value to the optional expressionValue. - <p></p> - - <h4>Resources</h4> - <ul> - <li><a href="https://github.com/json-path/JsonPath">JsonPath / Jayway implementation including examples</a></li> - <li><a href="https://jsonpath.fly.dev/">JsonPath online evaluator</a></li> - <li><a href="https://www.w3schools.com/xml/xpath_syntax.asp">Xpath syntax</a></li> - <li><a href="https://www.freeformatter.com/xpath-tester.html">Xpath online evaluator</a></li> - <li><a href="https://en.wikipedia.org/wiki/XPath">Xpath information and history</a></li> - </ul> + <p>Without an expression, the default behaviour is to assume the input is a string. The code will try to match the string to an optional regular expression + or tries to match the string value to the optional expressionValue.</p> @@ -12975,6 +13988,65 @@ + + + Apply a one-liner JSON path expression to the input to extract a value from input data. + If the input is in XML format, it will be converted to JSON using the same method as the org.frankframework.align.Xml2Json pipe. + Depending on the result of the expression, this pipe can return a string value or JSON value. + + <h3>Examples</h3> + <p> + <table> + <tr> + <th>JSON Path Expression</th> + <th>Input Message</th> + <th>Output</th> + </tr> + <tr> + <td><code>$.a</code></td> + <td> + <pre><code>{ + &quot;a&quot;: &quot;Hello World&quot; + }</code></pre> + </td> + <td>String with value <code>Hello World</code></td> + </tr> + <tr> + <td><code>$.*.a</code></td> + <td> + <pre><code>{ + &quot;k1&quot;: {&quot;a&quot;: 1}, + &quot;k2&quot;: {&quot;a&quot;: 2} + }</code></pre> + </td> + <td>JSON Array with value <pre><code>[1, 2]</code></pre></td> + </tr> + <tr> + <td><code>$.a</code></td> + <td> + <pre><code>{ + &quot;a&quot;: { + &quot;Hello&quot;: &quot;World&quot; + } + }</code></pre> + </td> + <td>JSON Object with value + <pre><code>{ + &quot;Hello&quot;: &quot;World&quot; + }</code></pre> + </tr> + </table> + If the input message does not have a match with the expression, then the Exception Forward path will be taken. + </p> + + + + + + + + + JSON is not aware of the element order. This pipe performs a <strong>best effort</strong> JSON to XML transformation. @@ -13006,7 +14078,7 @@ - + @@ -13110,27 +14182,24 @@ - Pipe that returns the memberships of a userDN. - The input is a fullDn, of a user or a group. - <br/> - Sample result:<br/><code><pre> - &lt;ldap&gt; - &lt;entry name="CN=xxyyzz,OU=Users,DC=domain,DC=ext"&gt; - &lt;attributes&gt; - &lt;attribute&gt; - &lt;attribute name="memberOf" value="Extern"/&gt; - &lt;attribute name="departmentCode" value="358000"/&gt; - &lt;attribute name="organizationalHierarchy"&gt; - &lt;item value="ou=zzyyxx"/&gt; - &lt;item value="ou=OPS&amp;IT,ou=Group,ou=domain,o=ext"/&gt; - &lt;/attribute> - &lt;attribute name="givenName" value="Gerrit"/> - &lt;/attributes&gt; - &lt;/entry&gt; - &lt;entry&gt; .... &lt;/entry&gt; - ..... - &lt;/ldap&gt; - </pre></code> <br/> + <p>Pipe that returns the memberships of a userDN. The input is a fullDn, of a user or a group.</p> + <p>Sample result:</p> + + <pre><code>&lt;ldap&gt; + &lt;entry name=&quot;CN=xxyyzz,OU=Users,DC=domain,DC=ext&quot;&gt; + &lt;attributes&gt; + &lt;attribute&gt; + &lt;attribute name=&quot;memberOf&quot; value=&quot;Extern&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=zzyyxx&quot;/&gt; + &lt;item value=&quot;ou=OPS&amp;IT,ou=Group,ou=domain,o=ext&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;/ldap&gt;</code></pre> @@ -13303,7 +14372,7 @@ - + @@ -13368,7 +14437,7 @@ - + @@ -13393,7 +14462,7 @@ - + @@ -13405,7 +14474,7 @@ <ol> <li>If the attribute <code>find</code> is provided, the pipe will attempt to replace the provided value with the content of the attribute <code>replace</code>.</li> <li>The resulting string is substituted based on the parameters of this pipe. It will replace values in the input enclosed - with <code>?{...}</code>, for instance text like: <code>?{parameterOne}</code> in combination with a parameter <code>parameterOne</code> will use the value of this Parameter. + with <code>?{...}</code>, for instance text like: <code>?{parameterOne}</code> in combination with a parameter <code>parameterOne</code> will use the value of this Parameter. If a parameter for the given value is not found, it will not be replaced and the <code>?{parameterOne}</code> value will remain in the output.</li> <p> <p> @@ -13435,20 +14504,6 @@ - - - Uses the (old) SMB 1 protocol. - <br/> - Only supports NTLM authentication. - - - - - - - - - @@ -13458,15 +14513,6 @@ - - - - - - - - - Manager for SAP Logical Units of Work (LUWs). @@ -13481,7 +14527,7 @@ - + @@ -13616,9 +14662,9 @@ - Pipe for transforming a stream with records. Records in the stream must be separated with new line characters. + Pipe for transforming a stream with records. Records in the stream must be separated with new line characters, or be of fixed length. - For file containing only a single type of lines, a simpler configuration without managers and flows + 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. @@ -13630,6 +14676,19 @@ + + + Selects an exitState, based on either the content of the input message, by means + of an XSLT-stylesheet, the content of a session variable, a JSON Path expression, or, by default, by returning the name of the root-element. + + + + + + + + + Pipe for converting TEXT to XML. @@ -13763,7 +14822,8 @@ Selects an exitState, based on either the content of the input message, by means - of a XSLT-stylesheet, the content of a session variable or, by default, by returning the name of the root-element. + of an XSLT-stylesheet, the content of a session variable or, by default, by returning the name of the root-element. + <br/> @@ -13792,7 +14852,7 @@ - + @@ -13893,16 +14953,8 @@ - - - - Charset to be used to read the input message. - Defaults to the message's known charset or UTF-8 when unknown. - - - + - @@ -14147,11 +15199,6 @@ - - - Character encoding to be used when reading input from strings for direction = encode or writing data for direction = decode. - - (Only used when direction=encode) Defines the separator between lines. Special values: <code>auto</code>: platform default, <code>dos</code>: crlf, <code>unix</code>: lf. Default: auto @@ -14270,7 +15317,11 @@ Alternatively: xpath-expression to create stylesheet from - + + + Namespace defintions for xpathExpression. Must be in the form of a comma or space separated list of <code>prefix=namespaceuri</code>-definitions. For some use other cases (NOT xpathExpression), one entry can be without a prefix, that will define the default namespace. + + Only valid for xpathexpression Default: text @@ -14420,7 +15471,11 @@ Alternatively: xpath-expression to create stylesheet from - + + + Namespace defintions for xpathExpression. Must be in the form of a comma or space separated list of <code>prefix=namespaceuri</code>-definitions. For some use other cases (NOT xpathExpression), one entry can be without a prefix, that will define the default namespace. + + Only valid for xpathexpression Default: text @@ -14597,6 +15652,11 @@ See <a href="https://en.wikipedia.org/wiki/C0_and_C1_control_codes#Field_separators">WIKI Control Codes</a>. + + + When set to true, whitespace is trimmed from the beginning and end of each header and field value. Default: false + + @@ -14608,14 +15668,14 @@ - + Location of the stylesheet to apply to the input message. - Output file format. DataSonnet is semi-capable of converting the converted JSON to a different format. + Output file format. DataSonnet is semi-capable of converting the converted JSON to a different format. Default: JSON @@ -14635,39 +15695,23 @@ - - - - - The time <i>in milliseconds</i> that the thread will be put to sleep. Default: 5000 - - - - - - - - - - - - - - - - If <code>true</code>, a piperunexception is thrown. otherwise the output is only logged as an error (and returned in a xml string with 'error' tags) Default: true - - - + + + - timeout in seconds of obtaining a result Default: 30 + The time <i>in milliseconds</i> that the thread will be put to sleep. Default: 5000 - - + + + + + + + @@ -14842,12 +15886,12 @@ - + - - + + - + Key of the session variable to retrieve the output message from. When left unspecified, the input message is used as the key of the session variable. @@ -14862,8 +15906,8 @@ - - + + @@ -14929,6 +15973,22 @@ + + + + If <code>true</code>, a piperunexception is thrown. otherwise the output is only logged as an error (and returned in a xml string with 'error' tags) Default: true + + + + + timeout in seconds of obtaining a result Default: 30 + + + + + + + @@ -15083,6 +16143,18 @@ + + + + + + + + + + + + @@ -15105,7 +16177,7 @@ - When direction is JSON2XML, specifies the name of the root element when `addXmlRootElement` is <code>true</code>. + When direction is JSON2XML, specifies the name of the root element when <pre>addXmlRootElement</pre> is <code>true</code>. When direction is XML2JSON, can not be used. Default: root @@ -15119,10 +16191,10 @@ - + - + @@ -15355,9 +16427,9 @@ - Set to <code>true</code> when the pipeline is triggered by a user (e.g. using an http based listener - that will add a securityHandler session key) and you don't want the listener to check whether the user - is autorised and/or you want the enforce the roles as configured for the Ladybug Default: false + Set this to <code>true</code> if you wish to enforce the + user roles (e.g. when using an HTTP based listener). + When set to false the Ladybug is run anonymously. Default: false @@ -15864,11 +16936,6 @@ - - - charset to be used to decode the given input message in case the input is not binary but character stream Default: UTF-8 - - aspose license location including the file name. It can also be used without license but there some restrictions on usage. If license is in resource, license attribute can be license file name. If the license is in somewhere in filesystem then it should be full path to file including filename and starting with file://// prefix. classloader.allowed.protocols property should contain 'file' protocol @@ -15894,12 +16961,12 @@ - + - - + + - + Key of the session variable to store the input in @@ -15911,8 +16978,8 @@ - - + + @@ -15984,12 +17051,12 @@ - + - - + + - + Fixed name of the rekenbox (or wrapper) to be called. If empty, the name is determined from the request @@ -16044,8 +17111,8 @@ - - + + @@ -16092,20 +17159,20 @@ - + - - + + - + name of the key of the entry in the <code>pipelinesession</code> to remove. If this key is empty the input message is interpretted as key. for multiple keys use ',' as delimiter - - + + @@ -16174,52 +17241,6 @@ - - - - - - - - - The destination, aka smb://xxx/yyy share - - - - - The SMB share username - - - - - The SMB share password - - - - - Alias used to obtain credentials for the SMB share - - - - - logon/authentication domain, in case the user account is bound to a domain such as Active Directory. - - - - - when <code>true</code>, intermediate directories are created also Default: false - - - - - controls whether hidden files are seen or not Default: false - - - - - - - @@ -16290,17 +17311,12 @@ - - - - - - + - - + + - + Name of the SapSystem used by this object @@ -16317,8 +17333,8 @@ - - + + @@ -16594,6 +17610,47 @@ + + + + + + + + + stylesheet may return a string representing the forward to look up Default: <i>a stylesheet that returns the name of the root-element</i> + + + + + xpath-expression that returns a string representing the forward to look up. It's possible to refer to a parameter (which e.g. contains a value from a sessionkey) by using the parameter name prefixed with $ + + + + + jsonPath expression to be applied to the input-message. if not set, no transformation is done when the input message is mediatype JSON + + + + + Namespace defintions for xpathExpression. Must be in the form of a comma or space separated list of <code>prefix=namespaceuri</code>-definitions. For some use other cases (NOT xpathExpression), one entry can be without a prefix, that will define the default namespace. + + + + + + + If set to <code>2</code> or <code>3</code> a Saxon (net.sf.saxon) xslt processor 2.0 or 3.0 respectively will be used, otherwise xslt processor 1.0 (org.apache.xalan). <code>0</code> will auto-detect Default: 0 + + + + + + + + + + @@ -16759,7 +17816,8 @@ - + + stylesheet may return a string representing the forward to look up Default: <i>a stylesheet that returns the name of the root-element</i> @@ -16775,39 +17833,16 @@ Namespace defintions for xpathExpression. Must be in the form of a comma or space separated list of <code>prefix=namespaceuri</code>-definitions. For some use other cases (NOT xpathExpression), one entry can be without a prefix, that will define the default namespace. - - - Forward returned when the pipename derived from the stylesheet could not be found. - - - - - Forward returned when the content, on which the switch is performed, is empty. if <code>emptyforwardname</code> is not specified, <code>notfoundforwardname</code> is used. - - + + If set to <code>2</code> or <code>3</code> a Saxon (net.sf.saxon) xslt processor 2.0 or 3.0 respectively will be used, otherwise xslt processor 1.0 (org.apache.xalan). <code>0</code> will auto-detect Default: 0 - - - Selected forward name will be stored in the specified session key. - - - - - Session key that will be used to get the forward name from. - - - - - controls namespace-awareness of XSLT transformation Default: true - - - - - + + + @@ -16828,7 +17863,8 @@ - If set to <code>false</code>, the inputstream is not closed after it has been used Default: true + If set to <code>false</code>, the inputstream is not closed after it has been used. + Use with caution, they may create memory leaks. Default: true @@ -16886,7 +17922,7 @@ Job which can stop/start adapters and receivers. - + <h3>Possible cron expressions:</h3> <p> A "Cron-Expression" is a string comprised of 6 or 7 fields separated by @@ -17102,7 +18138,7 @@ day-of-month fields!</p><br><br><b>INFO</b><p>Support for specifying both a day-of-week and a day-of-month value is not complete (you'll need to use the '?' character in on of these fields).</p><br><b>INFO</b><p>Be careful when setting fire times between mid-night and 1:00 AM - "daylight savings" can cause a skip or a repeat depending on whether - the time moves back or jumps forward.</p><br><b>INFO</b><p>Specified in the Configuration.xml inside a <code>&lt;scheduler&gt;</code> element. + the time moves back or jumps forward.</p><br><b>INFO</b><p>Specified in the Configuration.xml inside a <code>&lt;scheduler&gt;</code> element. The scheduler element must be a direct child of configuration, not of adapter.</p><br><b>TIP</b><p>All registered jobs are displayed in the Frank!Console under 'Scheduler'.</p><br><b>WARNING</b><p>Support for the features described for the 'C' character is not complete.</p> @@ -17115,7 +18151,7 @@ - Frank!Framework job which periodically looks in the <code>IBISCONFIG</code> table to see if a new Configuration should be loaded.<br><br><b>INFO</b><p>This is a default job that can be controlled with the property `checkReload.active` and `checkReload.interval`.</p> + Frank!Framework job which periodically looks in the <code>IBISCONFIG</code> table to see if a new Configuration should be loaded.<br><br><b>INFO</b><p>This is a default job that can be controlled with the property <pre>checkReload.active</pre> and <pre>checkReload.interval</pre>.</p> @@ -17129,8 +18165,8 @@ Frank!Framework job to cleanup the <code>IBISSTORE</code> and <code>IBISLOCK</code> tables. Find all MessageLogs and Lockers in the current configuration and removes database - entries which have surpassed their corresponding ExpiryDateField. - + entries which have surpassed their corresponding ExpiryDateField. + <h3>Possible cron expressions:</h3> <p> A "Cron-Expression" is a string comprised of 6 or 7 fields separated by @@ -17343,10 +18379,10 @@ </p> <p>Pay attention to the effects of '?' and '*' in the day-of-week and - day-of-month fields!</p><br><br><b>INFO</b><p>This is a default job that can be controlled with the property `cleanup.database.active` and `cleanup.database.cron`.</p><br><b>INFO</b><p>Support for specifying both a day-of-week and a day-of-month + day-of-month fields!</p><br><br><b>INFO</b><p>This is a default job that can be controlled with the property <pre>cleanup.database.active</pre> and <pre>cleanup.database.cron</pre>.</p><br><b>INFO</b><p>Support for specifying both a day-of-week and a day-of-month value is not complete (you'll need to use the '?' character in on of these fields).</p><br><b>INFO</b><p>Be careful when setting fire times between mid-night and 1:00 AM - "daylight savings" can cause a skip or a repeat depending on whether - the time moves back or jumps forward.</p><br><b>INFO</b><p>Specified in the Configuration.xml inside a <code>&lt;scheduler&gt;</code> element. + the time moves back or jumps forward.</p><br><b>INFO</b><p>Specified in the Configuration.xml inside a <code>&lt;scheduler&gt;</code> element. The scheduler element must be a direct child of configuration, not of adapter.</p><br><b>TIP</b><p>All registered jobs are displayed in the Frank!Console under 'Scheduler'.</p><br><b>WARNING</b><p>Support for the features described for the 'C' character is not complete.</p> @@ -17362,7 +18398,7 @@ Frank!Framework job to empty files in a given directory that have been stale (untouched) for the given <code>retention</code> duration. See DirectoryCleaner for more info. - + <h3>Possible cron expressions:</h3> <p> A "Cron-Expression" is a string comprised of 6 or 7 fields separated by @@ -17578,7 +18614,7 @@ day-of-month fields!</p><br><br><b>INFO</b><p>Support for specifying both a day-of-week and a day-of-month value is not complete (you'll need to use the '?' character in on of these fields).</p><br><b>INFO</b><p>Be careful when setting fire times between mid-night and 1:00 AM - "daylight savings" can cause a skip or a repeat depending on whether - the time moves back or jumps forward.</p><br><b>INFO</b><p>Specified in the Configuration.xml inside a <code>&lt;scheduler&gt;</code> element. + the time moves back or jumps forward.</p><br><b>INFO</b><p>Specified in the Configuration.xml inside a <code>&lt;scheduler&gt;</code> element. The scheduler element must be a direct child of configuration, not of adapter.</p><br><b>TIP</b><p>All registered jobs are displayed in the Frank!Console under 'Scheduler'.</p><br><b>WARNING</b><p>Support for the features described for the 'C' character is not complete.</p> @@ -17592,7 +18628,7 @@ Scheduled job to execute JDBC Queries using a FixedQuerySender. - + <h3>Possible cron expressions:</h3> <p> A "Cron-Expression" is a string comprised of 6 or 7 fields separated by @@ -17808,7 +18844,7 @@ day-of-month fields!</p><br><br><b>INFO</b><p>Support for specifying both a day-of-week and a day-of-month value is not complete (you'll need to use the '?' character in on of these fields).</p><br><b>INFO</b><p>Be careful when setting fire times between mid-night and 1:00 AM - "daylight savings" can cause a skip or a repeat depending on whether - the time moves back or jumps forward.</p><br><b>INFO</b><p>Specified in the Configuration.xml inside a <code>&lt;scheduler&gt;</code> element. + the time moves back or jumps forward.</p><br><b>INFO</b><p>Specified in the Configuration.xml inside a <code>&lt;scheduler&gt;</code> element. The scheduler element must be a direct child of configuration, not of adapter.</p><br><b>TIP</b><p>All registered jobs are displayed in the Frank!Console under 'Scheduler'.</p><br><b>WARNING</b><p>Support for the features described for the 'C' character is not complete.</p> @@ -17828,9 +18864,9 @@ If it is not present it add the job to the scheduler. 4. Once it's looped through all the database jobs, loop through the remaining jobs in the Map. Since they have been removed from the database, remove them from the Quartz Scheduler - - - Frank!Framework job which periodically looks in the `IBISSCHEDULES` table to see if a new DatabaseJob should be loaded.<br><br><b>INFO</b><p>This is a default job that can be controlled with the property `loadDatabaseSchedules.active` and `loadDatabaseSchedules.interval`.</p> + + + Frank!Framework job which periodically looks in the <pre>IBISSCHEDULES</pre> table to see if a new DatabaseJob should be loaded.<br><br><b>INFO</b><p>This is a default job that can be controlled with the property <pre>loadDatabaseSchedules.active</pre> and <pre>loadDatabaseSchedules.interval</pre>.</p> @@ -17843,7 +18879,7 @@ Frank!Framework Adapter recovery-job, which monitors all adapter states, attempts to recover them if required, - and logs this information to the <code>HEARTBEAT</code> log appender.<br><br><b>INFO</b><p>This is a default job that can be controlled with the property `recover.adapters.interval`.</p> + and logs this information to the <code>HEARTBEAT</code> log appender.<br><br><b>INFO</b><p>This is a default job that can be controlled with the property <pre>recover.adapters.interval</pre>.</p> @@ -17856,8 +18892,8 @@ Scheduled job to send messages to a FrankListener. - Message may be `null` (or empty). - + Message may be <pre>null</pre> (or empty). + <h3>Possible cron expressions:</h3> <p> A "Cron-Expression" is a string comprised of 6 or 7 fields separated by @@ -18073,7 +19109,7 @@ day-of-month fields!</p><br><br><b>INFO</b><p>Support for specifying both a day-of-week and a day-of-month value is not complete (you'll need to use the '?' character in on of these fields).</p><br><b>INFO</b><p>Be careful when setting fire times between mid-night and 1:00 AM - "daylight savings" can cause a skip or a repeat depending on whether - the time moves back or jumps forward.</p><br><b>INFO</b><p>Specified in the Configuration.xml inside a <code>&lt;scheduler&gt;</code> element. + the time moves back or jumps forward.</p><br><b>INFO</b><p>Specified in the Configuration.xml inside a <code>&lt;scheduler&gt;</code> element. The scheduler element must be a direct child of configuration, not of adapter.</p><br><b>TIP</b><p>All registered jobs are displayed in the Frank!Console under 'Scheduler'.</p><br><b>WARNING</b><p>Support for the features described for the 'C' character is not complete.</p> @@ -18629,6 +19665,7 @@ + @@ -18674,6 +19711,11 @@ Similar to <code>DATETIME</code>, except for the formatString that is <code>yyyy-MM-dd HH:mm:ss.SSS</code> by default + + + Converts the result to a Date, formatted as a unix timestamp in ms since Jan 01 1970. (UTC). + + Converts the result from a XML formatted dateTime to a Date. @@ -18716,6 +19758,15 @@ 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;) + + + A parameter which represents its value as a Message with mimetype <pre>application/json</pre>. If the + derived value was of type <pre>application/xml</pre> then it will be converted into JSON using the same rules as the + org.frankframework.pipes.JsonPipe. + If the derived value of the parameter was neither XML nor JSON format then a JSON will be constructed that looks like + <code>{&quot;paramName&quot;:value}</code>. (The value will be quoted if it was not a number or boolean value). + + @@ -18724,6 +19775,32 @@ + + + + + + + + + + + Fire &amp; Forget protocol + + + + + Request-Reply protocol + + + + + + + + + + @@ -18849,7 +19926,7 @@ - Fire & Forget protocol + Fire &amp; Forget protocol @@ -18886,7 +19963,7 @@ - + @@ -19005,13 +20082,6 @@ - - - - - - - @@ -19026,20 +20096,6 @@ - - - - - Fire & Forget protocol - - - - - Request-Reply protocol - - - - @@ -19140,6 +20196,14 @@ + + + + + + + + @@ -19220,6 +20284,23 @@ + + + + + + + + + + + + + + + + + @@ -19308,6 +20389,27 @@ + + + + + Automatically determine the type of the outgoing org.apache.qpid.protonj2.client.Message based + on the value of Message#isBinary(). + + + + + Create the outgoing message with an <code>AmqpValue</code> section containing character data. + + + + + Create the outgoing message with an AMQP <code>Body</code> section containing the message as binary data. + Only binary messages can be read or created in a streaming manner when messages are large. + + + + @@ -19412,38 +20514,38 @@ - Requires `tokenEndpoint`, `clientId` and `clientSecret` to be set. - Implements <a href="https://datatracker.ietf.org/doc/html/rfc6749#section-4.4">rfc6749</a>. The `clientId` and `clientSecret` are sent as basic authorization - to the authorization server. The `accessToken` is then used in the Authorization header to authenticate against the resource server. + Requires <pre>tokenEndpoint</pre>, <pre>clientId</pre> and <pre>clientSecret</pre> to be set. + Implements <a href="https://datatracker.ietf.org/doc/html/rfc6749#section-4.4">rfc6749</a>. The <pre>clientId</pre> and <pre>clientSecret</pre> are sent as basic authorization + to the authorization server. The <pre>accessToken</pre> is then used in the Authorization header to authenticate against the resource server. - Requires `tokenEndpoint`, `clientId` and `clientSecret` to be set. - Implements <a href="https://datatracker.ietf.org/doc/html/rfc6749#section-4.4">rfc6749</a>. The `clientId` and `clientSecret` are sent in the form body - to the authorization server. The `accessToken` is then used in the Authorization header to authenticate against the resource server. + Requires <pre>tokenEndpoint</pre>, <pre>clientId</pre> and <pre>clientSecret</pre> to be set. + Implements <a href="https://datatracker.ietf.org/doc/html/rfc6749#section-4.4">rfc6749</a>. The <pre>clientId</pre> and <pre>clientSecret</pre> are sent in the form body + to the authorization server. The <pre>accessToken</pre> is then used in the Authorization header to authenticate against the resource server. - Requires `tokenEndpoint`, `clientId`, `clientSecret`, `username` and `password` to be set. - Implements <a href="https://datatracker.ietf.org/doc/html/rfc6749#section-4.3">rfc6749</a>. The `clientId` and `clientSecret` are sent as basic authorization - to the authorization server. The `username` and `password` are sent in the form body to the authorization server. - The `accessToken` is then used in the Authorization header to authenticate against the resource server. + Requires <pre>tokenEndpoint</pre>, <pre>clientId</pre>, <pre>clientSecret</pre>, <pre>username</pre> and <pre>password</pre> to be set. + Implements <a href="https://datatracker.ietf.org/doc/html/rfc6749#section-4.3">rfc6749</a>. The <pre>clientId</pre> and <pre>clientSecret</pre> are sent as basic authorization + to the authorization server. The <pre>username</pre> and <pre>password</pre> are sent in the form body to the authorization server. + The <pre>accessToken</pre> is then used in the Authorization header to authenticate against the resource server. - Requires `tokenEndpoint`, `clientId`, `clientSecret`, `username` and `password` to be set. - Implements <a href="https://datatracker.ietf.org/doc/html/rfc6749#section-4.3">rfc6749</a>. The `clientId`, `clientSecret`, `username` - and `password` are sent in the form body to the authorization server. - The `accessToken` is then used in the Authorization header to authenticate against the resource server. + Requires <pre>tokenEndpoint</pre>, <pre>clientId</pre>, <pre>clientSecret</pre>, <pre>username</pre> and <pre>password</pre> to be set. + Implements <a href="https://datatracker.ietf.org/doc/html/rfc6749#section-4.3">rfc6749</a>. The <pre>clientId</pre>, <pre>clientSecret</pre>, <pre>username</pre> + and <pre>password</pre> are sent in the form body to the authorization server. + The <pre>accessToken</pre> is then used in the Authorization header to authenticate against the resource server. - Requires `samlNameId`, `samlIssuer`, `samlAudience`, `samlAssertionExpiry`, and a certificate and private key. - Generates a new SAML assertion, which will be exchanged for a token by the authorization server. The `accessToken` is then used + Requires <pre>samlNameId</pre>, <pre>samlIssuer</pre>, <pre>samlAudience</pre>, <pre>samlAssertionExpiry</pre>, and a certificate and private key. + Generates a new SAML assertion, which will be exchanged for a token by the authorization server. The <pre>accessToken</pre> is then used in the Authorization header to authenticate against the resource server. @@ -19674,14 +20776,6 @@ - - - - - - - - @@ -19728,12 +20822,14 @@ + + @@ -19752,7 +20848,7 @@ - Encrypts and then signs the given input. On top of the requirements for Encrypt action, signing requires senders to bet set for user's email; and secretKey & secretPassword to be set to private key's path and it's password (password is optional, if private key does not have protection). + Encrypts and then signs the given input. On top of the requirements for the <code>Encrypt</code> action, signing requires senders to be set for user's email; and secretKey <pre>&amp;</pre> secretPassword to be set to private key's path and it's password (password is optional, if private key does not have protection). @@ -19762,7 +20858,7 @@ - Decrypts and verifies the given input. On top of the requirements for Decrypt action, verification expects list of senders' email's and corresponding public keys. However, sender emails does not have to be set, and in that case, this pipe will only validate that someone signed the input. + Decrypts and verifies the given input. On top of the requirements for the <code>Decrypt</code> action, verification expects list of senders' email's and corresponding public keys. However, sender emails does not have to be set, and in that case, this pipe will only validate that someone signed the input. @@ -19795,7 +20891,7 @@ - Fire & Forget + Fire &amp; Forget @@ -19959,14 +21055,15 @@ + - Type of the messageing destination. + Type of the messaging destination. This function also sets the <code>useTopicFunctions</code> field, that controls whether Topic functions are used or Queue functions. Default: QUEUE - + @@ -20045,11 +21142,6 @@ class to use as initial context factory - - - Sets the value of providerURL - - maps to the field context.security_protocol @@ -20070,7 +21162,6 @@ authentication alias, may be used to override principal and credential-settings - @@ -20119,12 +21210,21 @@ Additional condition for a row to belong to this TableListener. Impacts all process states + + + The bootstrap servers to connect to, as a comma separated list. + + see <a href="https://www.eclipse.org/paho/files/javadoc/org/eclipse/paho/client/mqttv3/MqttClient.html#MqttClient-java.lang.String-java.lang.String-org.eclipse.paho.client.mqttv3.MqttClientPersistence-" target="_blank">MqttClient(java.lang.String serverURI, java.lang.String clientId, MqttClientPersistence persistence)</a> Default: 2 - + + + Name of the MqttClientSettings configuration in the `resources.yml`. + + Index of the field in the ImportParameterList of the RFC function that contains the correlationId Default: 0 @@ -20285,21 +21385,21 @@ The <code>transactionAttribute</code> declares transactional behavior of execution. It applies both to database transactions and XA transactions. The pipeline uses this to start a new transaction or suspend the current one when required. - For developers: it is equal to <a href=\"https://docs.oracle.com/javaee/7/tutorial/transactions003.htm\">EJB transaction attribute</a>. + For developers: it is equal to <a href="https://docs.oracle.com/javaee/7/tutorial/transactions003.htm">EJB transaction attribute</a>. Possible values for transactionAttribute: - <table border=\"1\"> + <table border="1"> <tr><th>transactionAttribute</th><th>callers Transaction</th><th>Pipeline excecuted in Transaction</th></tr> - <tr><td colspan=\"1\" rowspan=\"2\">Required</td> <td>none</td><td>T2</td></tr> + <tr><td colspan="1" rowspan="2">Required</td> <td>none</td><td>T2</td></tr> <tr><td>T1</td> <td>T1</td></tr> - <tr><td colspan=\"1\" rowspan=\"2\">RequiresNew</td> <td>none</td><td>T2</td></tr> + <tr><td colspan="1" rowspan="2">RequiresNew</td> <td>none</td><td>T2</td></tr> <tr><td>T1</td> <td>T2</td></tr> - <tr><td colspan=\"1\" rowspan=\"2\">Mandatory</td> <td>none</td><td>error</td></tr> + <tr><td colspan="1" rowspan="2">Mandatory</td> <td>none</td><td>error</td></tr> <tr><td>T1</td> <td>T1</td></tr> - <tr><td colspan=\"1\" rowspan=\"2\">NotSupported</td><td>none</td><td>none</td></tr> + <tr><td colspan="1" rowspan="2">NotSupported</td><td>none</td><td>none</td></tr> <tr><td>T1</td> <td>none</td></tr> - <tr><td colspan=\"1\" rowspan=\"2\">Supports</td> <td>none</td><td>none</td></tr> + <tr><td colspan="1" rowspan="2">Supports</td> <td>none</td><td>none</td></tr> <tr><td>T1</td> <td>T1</td></tr> - <tr><td colspan=\"1\" rowspan=\"2\">Never</td> <td>none</td><td>none</td></tr> + <tr><td colspan="1" rowspan="2">Never</td> <td>none</td><td>none</td></tr> <tr><td>T1</td> <td>error</td></tr> </table> Default: Supports @@ -20329,7 +21429,7 @@ - If set, the pipe result is copied to a session key that has the name defined by this attribute. + If set, the pipe result is copied to a session key that has the name defined by this attribute. The pipe result is still written as the output message as usual. @@ -20361,7 +21461,7 @@ - If durationThreshold >=0 and the duration of the message processing exceeded the value specified (in milliseconds) the message is logged informatory to be analyzed Default: -1 + If durationThreshold >=0 and the duration of the message processing exceeded the value specified (in milliseconds) the message will be logged and a monitor event will be fired. Default: -1 @@ -20402,7 +21502,7 @@ - Identical to the <code>soapBody</code> attribute except that it's used for the output message instead of the input message. For more information see <a href=\"#note1\">note 1</a> + Identical to the <code>soapBody</code> attribute except that it's used for the output message instead of the input message. @@ -20502,7 +21602,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 <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 + Alternatively, warnings can be switched off using suppression properties SuppressKeys#XSD_VALIDATION_WARNINGS_SUPPRESS_KEY, SuppressKeys#XSD_VALIDATION_ERROR_SUPPRESS_KEY and SuppressKeys#XSD_VALIDATION_FATAL_ERROR_SUPPRESS_KEY Default: true @@ -20659,8 +21759,8 @@ If set, the status code of the HTTP response is put in the specified sessionKey and the (error or okay) response message is returned. - Setting this property has a side effect. If a 4xx or 5xx result code is returned and if the configuration does not implement - the specific forward for the returned HTTP result code, then the success forward is followed instead of the exception forward. + Setting this property has a side effect. If a 4xx or 5xx result code is returned and if the pipeline does not implement + the specific forward, pipeline-global forward or pipeline-exit for the returned HTTP result code, then the success forward is followed instead of the exception forward. @@ -20694,11 +21794,6 @@ Alias used to obtain client_id and client_secret for authentication to <code>tokenEndpoint</code> - - - Client_id used in authentication to <code>tokenEndpoint</code> - - Client_secret used in authentication to <code>tokenEndpoint</code> @@ -20711,7 +21806,7 @@ - Only used when `tokenEndpoint` has been configured. Sets the OAuth authentication method and controls which authentication flow should be used. + Only used when <pre>tokenEndpoint</pre> has been configured. Sets the OAuth authentication method and controls which authentication flow should be used. @@ -20949,11 +22044,6 @@ Comma separated list of domains to which mails can be send, domains not on the list are filtered out. Empty allows all domains - - - Namespace defintions for xpathExpression. Must be in the form of a comma or space separated list of <code>prefix=namespaceuri</code>-definitions. For some use other cases (NOT xpathExpression), one entry can be without a prefix, that will define the default namespace. - - Key of session variable to store number of items processed, i.e. the position or index in the set of items to be processed. When handling the first item, the value will be 1. @@ -21008,6 +22098,31 @@ Maximum number of child threads that may run in parallel simultaneously (combined total of all threads calling this pipe). Use <code>0</code> for unlimited threads Default: 0 + + + Forward returned when the pipename derived from the stylesheet could not be found. + + + + + Forward returned when the content, on which the switch is performed, is empty. if <code>emptyforwardname</code> is not specified, <code>notfoundforwardname</code> is used. + + + + + Selected forward name will be stored in the specified session key. + + + + + Session key that will be used to get the forward name from. + + + + + controls namespace-awareness of XSLT transformation Default: true + +