From 34a66a48303e7de5634187a7d75169392e14107f Mon Sep 17 00:00:00 2001 From: MLenterman Date: Wed, 17 Apr 2024 14:25:51 +0200 Subject: [PATCH] build(dependencies): bump f!f version to 8.1.0-RC2-20240411.160355 --- Dockerfile | 4 +- docker-compose.zaakbrug.dev.yml | 7 +- frank-runner.properties | 2 +- src/main/FrankConfig.xsd | 310 +- src/main/configurations/FrankConfig.xsd | 3306 ++++++----------- .../frankframework/parameters/Parameter.java | 73 +- .../parameters/Parameter.java-orig | 70 +- .../resources/DeploymentSpecifics.properties | 1 + .../ladybug/DatabaseChangelog_Custom.xml | 17 + 9 files changed, 1425 insertions(+), 2365 deletions(-) create mode 100644 src/main/resources/ladybug/DatabaseChangelog_Custom.xml diff --git a/Dockerfile b/Dockerfile index 69bb7c2..26366fe 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ # Keep in sync with version in frank-runner.properties. Detailed instructions can be found in CONTRIBUTING.md. # Check whether java-orig files have changed in F!F and update custom code (java and java-orig files) accordingly -ARG FF_VERSION=8.1.0-20240221.213323 +ARG FF_VERSION=8.1.0-RC2-20240411.160355 FROM docker.io/frankframework/frankframework:${FF_VERSION} as ff-base # Copy dependencies @@ -9,7 +9,7 @@ COPY --chown=tomcat lib/webapp/* /usr/local/tomcat/webapps/ROOT/WEB-INF/lib/ # Compile custom class -FROM eclipse-temurin:11-jdk-jammy AS custom-code-builder +FROM eclipse-temurin:17-jdk-jammy AS custom-code-builder # Copy dependencies COPY --from=ff-base /usr/local/tomcat/lib/ /usr/local/tomcat/lib/ diff --git a/docker-compose.zaakbrug.dev.yml b/docker-compose.zaakbrug.dev.yml index e5cc2d5..e0580c8 100644 --- a/docker-compose.zaakbrug.dev.yml +++ b/docker-compose.zaakbrug.dev.yml @@ -14,8 +14,11 @@ services: - openforms2bpel openforms2bpel: - build: . - image: wearefrank/openforms2bpel:latest + build: + context: . + args: + FF_VERSION: ${FF_VERSION:-8.1.0-RC2-20240411.160355} + image: wearefrank/openforms2bpel:${OPENFORMS2BPEL_VERSION:-latest} environment: - zaakbrug.zds.timezone=UTC - TZ=Europe/Amsterdam diff --git a/frank-runner.properties b/frank-runner.properties index 1a0711c..3a3e7eb 100644 --- a/frank-runner.properties +++ b/frank-runner.properties @@ -1 +1 @@ -ff.version=8.1.0-20240221.213323 \ No newline at end of file +ff.version=8.1.0-RC2-20240411.160355 \ No newline at end of file diff --git a/src/main/FrankConfig.xsd b/src/main/FrankConfig.xsd index 21befe1..aef4117 100644 --- a/src/main/FrankConfig.xsd +++ b/src/main/FrankConfig.xsd @@ -1,5 +1,5 @@ - + Container of Adapters that belong together. @@ -178,7 +178,7 @@ - One of 'continue' or 'close'. Controls the behaviour of the Receiver when it encounters an error sending a reply or receives an exception asynchronously Default: CONTINUE + One of 'continue', 'recover' or 'close'. Controls the behaviour of the Receiver, when it encounters an error during processing of a message. Default: CONTINUE @@ -1145,8 +1145,26 @@ by OpenAPI specifications. The Frank!Framework generates an OpenAPI specification for each ApiListener and also an OpenAPI specification for all ApiListeners in all configurations. You can find them in the Frank!Console under main menu item Webservices, heading Available ApiListeners. + <p> The generated OpenAPI specifications have <code>servers</code> and <code>paths</code> objects and - therefore they document the full URLs of the provided services. + therefore they document the full URLs of the provided services. + <p> + It is possible to automatically generate eTags over the listener result. This can be controlled by globally + setting the property <code>api.etag.enabled</code> or by setting the attribute <code>updateEtag="true"</code>. + When enabled the listener will respond to the 'if-match', 'if-none-match' headers and may return status code 304. + <p> + In order to make eTags work across multiple nodes you must configure Memcached to store the eTags. + The following properties will need to be set: + <ul> + <li>etag.cache.server=ip or hostname:port</li> + <li>etag.cache.type=memcached</li> + </ul> + In case authentication, is required the following application properties can be used: + <ul> + <li>etag.cache.username</li> + <li>etag.cache.password</li> + <li>etag.cache.authalias</li> + </ul> @@ -1619,7 +1637,7 @@ - The required contentType on requests, if it doesn't match the request will fail Default: ANY + The required contentType on requests, if it doesn't match a 415 Unsupported Media Type is replied Default: ANY @@ -1833,13 +1851,12 @@ - By default, the JmsListener takes the Correlation-ID (if present) as the ID that has to be used as Correlation-ID of the reply. - When set to <code>true</code>, the messageID is used as Correlation-ID of the reply. Default: if messageProtocol=<code>RR</code>: </td><td><code>true</code> + if messageProtocol=RR, default value is: true Default: false - Flag if reply-to queue from the request message should be used or not. Default: if messageProtocol=<code>FF</code>: <code>false</code> + if messageProtocol=FF, default value is: false Default: true @@ -4244,6 +4261,29 @@ + + + Wrapper for senders, that opens the wrapped sender at runtime before each sender action, and closes it afterwards. + This prevents (long) open connections inside Senders and possible connection failures. + + <b>Example:</b> + <pre><code> + &lt;SenderPipe&gt; + &lt;ReconnectSenderWrapper&gt; + &lt;EchoSender myAttribute="myValue" /&gt; + &lt;/ReconnectSenderWrapper&gt; + &lt;/SenderPipe&gt; + </code></pre> + </p> + + + + + + + + + Performs a reload on database configuration. @@ -4491,18 +4531,6 @@ - - - Sender that sends a message via a WebService based on NTLM authentication. - - - - - - - - - Sender that sends a message via a WebService. @@ -5168,7 +5196,7 @@ - The number of seconds the driver will wait for a statement object to execute. If the limit is exceeded, a TimeoutException is thrown. A value of 0 means execution time is not limited Default: 0 + The number of seconds the JDBC driver will wait for a statement object to execute. If the limit is exceeded, a TimeoutException is thrown. A value of 0 means execution time is not limited Default: 0 @@ -5623,7 +5651,7 @@ - The SQL query text to be excecuted each time sendMessage() is called + The SQL query text to be executed each time sendMessage() is called @@ -7186,6 +7214,22 @@ + + + + + + + + + + + + + + + + @@ -7795,64 +7839,6 @@ - - - - - - - - - content-type of the request Default: text/html; charset=utf-8 - - - - - url or base of url to be used - - - - - timeout in ms of obtaining a connection/result. 0 means no timeout Default: 10000 - - - - - the maximum number of concurrent connections Default: 10 - - - - - alias used to obtain credentials for authentication to host - - - - - username used in authentication to host - - - - - password used to authenticate with the host - - - - - - - Default: 80 - - - - - the soapactionuri to be set in the requestheader - - - - - - - @@ -9027,6 +9013,29 @@ + + + Wrapper for senders, that opens the wrapped sender at runtime before each sender action, and closes it afterwards. + This prevents (long) open connections inside Senders and possible connection failures. + + <b>Example:</b> + <pre><code> + &lt;SenderPipe&gt; + &lt;ReconnectSenderWrapper&gt; + &lt;EchoSender myAttribute="myValue" /&gt; + &lt;/ReconnectSenderWrapper&gt; + &lt;/SenderPipe&gt; + </code></pre> + </p> + + + + + + + + + Performs a reload on database configuration. @@ -9274,18 +9283,6 @@ - - - Sender that sends a message via a WebService based on NTLM authentication. - - - - - - - - - Sender that sends a message via a WebService. @@ -11211,6 +11208,11 @@ If true, the password is sent digested; Otherwise it is sent in clear text Default: true + + + For direction=<code>wrap</code> only: When false, adds an XML declaration to the output message. Default: true + + The functional name of this pipe. Can be referenced by the <code>path</code> attribute of a PipeForward. @@ -11890,7 +11892,7 @@ tag found in the input XML. Every field tag should have a type attribute that specifies the type of conversion that needs to be done on the string specified by the value attribute. A value attribute also needs to be present - for every field tag. Currently two types of conversion are supported: + for every field tag. Currently, two types of conversion are supported: <ul> <li><code>GetBytesFromString</code>, a conversion from string to bytes as specified by java.lang.String.getBytes(String charsetName)</li> @@ -11924,7 +11926,7 @@ <li>The string 1234 will be translated to three bytes with the following hexadecimal representation: 01 23 4F</li> </ul> - The Packed-decimal is prefixed with zero's when the specified size is bigger + The Packed-decimal is prefixed with zeroes when the specified size is bigger than the number of decimals. An exception is thrown when the specified size is smaller than the number of decimals. @@ -11980,18 +11982,6 @@ - - - Pipe for deleting files. - - - - - - - - - Pipe that iterates over the lines in a CLOB. @@ -12880,6 +12870,18 @@ + + + Pipe that performs obfuscation on a message, using the tibcrypt library. + + + + + + + + + <p>Performs various PGP (Pretty Good Privacy) actions such as Encrypt, Sign, Decrypt, Verify.</p> @@ -13980,57 +13982,6 @@ - - - - - - - - - files that match this pattern will be deleted. parameters of the pipe are applied to this pattern. if this attribute is not set, the input of the pipe is interpreted as the file to be removed - - - - - session key that contains the pattern of files to be deleted, only used if filePattern is not set - - - - - time in milliseconds after last modification that must have passed at least before a file will be deleted (set to negative value to disable) Default: 0 - - - - - when <code>true</code>, files in subdirectories will be deleted, too Default: false - - - - - when <code>true</code>, empty subdirectories will be deleted, too Default: false - - - - - filter of files to delete. if not set and a directory is specified, all files in the directory are interpreted to be deleted - - - - - filter of files to be excluded for deletion - - - - - Minimal age of file <i>in milliseconds</i>, to avoid deleting a file while it is still being written (only used when wildcard is set) (set to 0 to disable) Default: 1000 - - - - - - - @@ -14282,7 +14233,7 @@ - + @@ -14303,7 +14254,7 @@ - when <code>true</code>, a piperunexception is thrown. otherwise the output is only logged as an error (and no rollback is performed). Default: true + When <code>true</code>, a PipeRunException is thrown. Otherwise, the output is only logged as an error (and no rollback is performed). Default: true @@ -14634,7 +14585,7 @@ Direction of the transformation. Default: JSON2XML - + @@ -14953,7 +14904,7 @@ - the larva timeout Default: 10000 + the larva timeout in milliseconds Default: 10000 @@ -15200,6 +15151,25 @@ + + + + + + + + + Default: OBFUSCATE + + + + + + + + + + @@ -17728,8 +17698,8 @@ - If an error occurs (eg. connection is lost) the receiver will be stopped and marked as ERROR - Once every <code>recover.adapters.interval</code> it will be attempted to (re-) start the receiver. + If an error occurs (e.g. connection is lost) the receiver will be stopped and marked as ERROR + Once every <code>recover.adapters.interval</code> it attempts to (re-) start the receiver. @@ -17905,7 +17875,7 @@ - + @@ -17927,12 +17897,18 @@ - + + + + + + + @@ -19012,7 +18988,11 @@ If set <code>true</code>, compacted messages in the result are restored to their original format (see also #setElementToMove(java.lang.String)) - + + + Collect and aggregate Message size statistics + + when set to <code>true</code> a record is written to the security log when the pipe has finished successfully diff --git a/src/main/configurations/FrankConfig.xsd b/src/main/configurations/FrankConfig.xsd index 3b9a9e6..aef4117 100644 --- a/src/main/configurations/FrankConfig.xsd +++ b/src/main/configurations/FrankConfig.xsd @@ -1,5 +1,5 @@ - + Container of Adapters that belong together. @@ -34,7 +34,7 @@ reference to a configuration to be included in the current. - + @@ -103,7 +103,7 @@ - + @@ -112,7 +112,7 @@ Wrapper for a listener that specifies a channel for the incoming messages of a specific Adapter. By choosing a listener, the Frank developer determines how the messages are received. - For example, an nl.nn.adapterframework.http.rest.ApiListener receives RESTful HTTP requests and a + For example, an org.frankframework.http.rest.ApiListener receives RESTful HTTP requests and a JavaListener receives messages from direct Java calls. <br/><br/> Apart from wrapping the listener, a Receiver can be configured @@ -122,7 +122,7 @@ There are two kinds of listeners: synchronous listeners and asynchronous listeners. Synchronous listeners are expected to return a response. The system that triggers the receiver typically waits for a response before proceeding its operation. When a - nl.nn.adapterframework.http.rest.ApiListener receives a HTTP request, the listener is expected to return a + org.frankframework.http.rest.ApiListener receives a HTTP request, the listener is expected to return a HTTP response. Asynchronous listeners are not expected to return a response. The system that triggers the listener typically continues without waiting for the adapter to finish. When a receiver contains an asynchronous listener, it can have a sender that sends the transformed @@ -171,12 +171,14 @@ - Name of the Receiver as known to the Adapter + Sets the name of the Receiver, as known to the Adapter. + If the listener implements the name interface and <code>getName()</code> + of the listener is empty, the name of this object is given to the listener. - One of 'continue' or 'close'. Controls the behaviour of the Receiver when it encounters an error sending a reply or receives an exception asynchronously Default: CONTINUE + One of 'continue', 'recover' or 'close'. Controls the behaviour of the Receiver, when it encounters an error during processing of a message. Default: CONTINUE @@ -194,17 +196,21 @@ - The number of seconds waited after an unsuccesful poll attempt before another poll attempt is made. Only for polling listeners, not for e.g. ifsa, jms, webservice or javaListeners Default: 10 + The number of seconds waited after an unsuccessful poll attempt, before another poll attempt is made. Only for polling listeners, not for e.g. jms, webservice or javaListeners Default: 10 - timeout to start receiver. If this timeout is reached, the Receiver may be stopped again + timeout (in seconds) to start receiver. If this timeout is exceeded, the Receiver startup is + aborted and all resources closed and the receiver will be in state {@code EXCEPTION_STARTING} + and a new start command may be issued again. - timeout to stopped receiver. If this timeout is reached, a new stop command may be issued + timeout (in seconds) to stop receiver. If this timeout is exceeded, stopping will be aborted + and the receiver will be in state {@code EXCEPTION_STOPPING}. + The receiver will no longer be running but some resources might not have been cleaned up properly. @@ -272,12 +278,12 @@ - If set, the character data in this element is stored under a session key and in the message replaced by a reference to this session key: {sessionkey: + <code>elementToMoveSessionKey</code> + } + If set, the character data in this XML element is stored inside a session key and in the message it is replaced by a reference to this session key: {sessionKey: + <code>elementToMoveSessionKey</code> + } - (Only used when <code>elementToMove</code> is set) Name of the session key under which the character data is stored Default: ref_ + the name of the element + (Only used when <code>elementToMove</code> or <code>elementToMoveChain</code> is set) Name of the session key wherein the character data is stored Default: ref_ + the name of the element @@ -311,12 +317,12 @@ - Number of connection attemps to put the adapter in warning status Default: 5 + Number of connection attempts to put the adapter in warning status Default: 5 - + @@ -406,7 +412,7 @@ - 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 * @ff.default 0 + 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 @@ -433,8 +439,11 @@ Value of parameter is determined using substitution and formatting, following MessageFormat syntax with named parameters. The expression can contain references - to session-variables or other parameters using {name-of-parameter} and is formatted using java.text.MessageFormat. - <br/>If for instance <code>fname</code> is a parameter or session variable that resolves to Eric, then the pattern + to <code>session-variables</code> or other <code>parameters</code> using the {name-of-parameter} and is formatted using java.text.MessageFormat. + <br/><b>NB: When referencing other <code>parameters</code> these MUST be defined before the parameter using pattern substitution.</b> + <br/> + <br/> + If for instance <code>fname</code> is a parameter or session-variable that resolves to Eric, then the pattern 'Hi {fname}, how do you do?' resolves to 'Hi Eric, do you do?'.<br/> The following predefined reference can be used in the expression too:<ul> <li>{now}: the current system time</li> @@ -518,10 +527,10 @@ Set the mode of the parameter, which determines if the parameter is an INPUT, OUTPUT, or INOUT. - This parameter only has effect for nl.nn.adapterframework.jdbc.StoredProcedureQuerySender. + This parameter only has effect for StoredProcedureQuerySender. An OUTPUT parameter does not need to have a value specified, but does need to have the type specified. Parameter values will not be updated, but output values will be put into the result of the - nl.nn.adapterframework.jdbc.StoredProcedureQuerySender. + StoredProcedureQuerySender. <b/> If not specified, the default is INPUT. @@ -529,7 +538,7 @@ - + @@ -599,7 +608,7 @@ - If messageSizeWarn>=0 and the size of the input or result pipe message exceeds the value specified a warning message is logged. You can specify the value with the suffixes <code>KB</code>, <code>MB</code> or <code>GB</code> Default: application default (3MB) + If messageSizeWarn>=0 and the size of the input or result pipe message exceeds the value specified a warning message is logged. You can specify the value with the suffixes <code>KB</code>, <code>MB</code> or <code>GB</code> Default: application default (30MB) @@ -609,7 +618,7 @@ - + @@ -641,7 +650,7 @@ initialized with one Exit having name READY and state SUCCESS - + @@ -790,7 +799,7 @@ Name of the sender or the listener - + @@ -818,7 +827,7 @@ - + @@ -874,7 +883,7 @@ If set to <code>true</code>, the output will not be validated or transformed by the validator. Default: <code>false</code> - + @@ -887,92 +896,11 @@ - + - - - The flow contains the handlers to handle records of a specific type. - Each flow is registered to a manager using the recordHandlerManagerRef. - - - - Key under which this flow is registered in the manager - - - - - Name of the manager to be used after handling this record - - - - - Name of the recordHandler to be used to transform records of the type specified in the key (optional) - - - - - Name of the manager to which this flow must be added - - - - - Name of the resultHandler to be used to handle the transformed result - - - - - Instructs the resultHandler to start a new block before the parsed line is processed - - - - - Instructs the resultHandler to end the specified block before the parsed line is processed - - - - - Instructs the resultHandler to start a new block after the parsed line is processed - - - - - Instructs the resultHandler to end the specified block after the parsed line is processed - - - - - If <code>true</code>, any open block of this type (and other nested open 'autoClose' block) is closed before a new one of the same type is opened. At a forced close, nested blocks are closed too (since 4.9) Default: true - - - - - If &gt;0 the <code>openBlockBeforeLine</code> instruction is only performed when the current line number is a multiple of this value Default: 0 - - - - - - - - - - - - - - - - - - - - - - - Container for jobs that are scheduled for periodic execution. @@ -980,7 +908,7 @@ - + @@ -1014,7 +942,7 @@ when set <code>true</code>, send warnings to logging and console about not existing directories Default: true - + @@ -1023,7 +951,7 @@ - + @@ -1037,7 +965,7 @@ - + @@ -1085,7 +1013,7 @@ - + @@ -1098,7 +1026,7 @@ - + @@ -1109,10 +1037,10 @@ <pre><code> {@literal <monitor name="Receiver Shutdown" destinations="MONITOR_LOG"> - <trigger className="nl.nn.adapterframework.monitoring.Alarm" severity="WARNING"> + <trigger className="org.frankframework.monitoring.Alarm" severity="WARNING"> <event>Receiver Shutdown</event> </trigger> - <trigger className="nl.nn.adapterframework.monitoring.Clearing" severity="WARNING"> + <trigger className="org.frankframework.monitoring.Clearing" severity="WARNING"> <event>Receiver Shutdown</event> </trigger> </monitor> @@ -1141,7 +1069,7 @@ - + @@ -1158,7 +1086,7 @@ Set the name of the Adapter that this AdapterFilter filters on. - + @@ -1168,7 +1096,7 @@ - + @@ -1176,7 +1104,7 @@ - + @@ -1217,8 +1145,26 @@ by OpenAPI specifications. The Frank!Framework generates an OpenAPI specification for each ApiListener and also an OpenAPI specification for all ApiListeners in all configurations. You can find them in the Frank!Console under main menu item Webservices, heading Available ApiListeners. + <p> The generated OpenAPI specifications have <code>servers</code> and <code>paths</code> objects and - therefore they document the full URLs of the provided services. + therefore they document the full URLs of the provided services. + <p> + It is possible to automatically generate eTags over the listener result. This can be controlled by globally + setting the property <code>api.etag.enabled</code> or by setting the attribute <code>updateEtag="true"</code>. + When enabled the listener will respond to the 'if-match', 'if-none-match' headers and may return status code 304. + <p> + In order to make eTags work across multiple nodes you must configure Memcached to store the eTags. + The following properties will need to be set: + <ul> + <li>etag.cache.server=ip or hostname:port</li> + <li>etag.cache.type=memcached</li> + </ul> + In case authentication, is required the following application properties can be used: + <ul> + <li>etag.cache.username</li> + <li>etag.cache.password</li> + <li>etag.cache.authalias</li> + </ul> @@ -1303,55 +1249,6 @@ - - - Implementation of IPullingListener that acts as an IFSA-service. - - There is no need or possibility to set the ServiceId as the Provider will receive all messages - for this Application on the same serviceQueue. - - The following session keys are set for each message: - <ul> - <li>id (the message id)</li> - <li>cid (the correlation id)</li> - <li>timestamp</li> - <li>replyTo</li> - <li>messageText</li> - <li>fullIfsaServiceName</li> - <li>ifsaServiceName</li> - <li>ifsaGroup</li> - <li>ifsaOccurrence</li> - <li>ifsaVersion</li> - </ul> - - N.B. - Starting from IFSA-jms version 2.2.10.055(beta) a feature was created to have separate service-queues for Request/Reply - and for Fire & Forget services. This allows applications to provide both types of services, each in its own transaction - mode. This options is not compatible with earlier versions of IFSA-jms. If an earlier version of IFSA-jms is deployed on - the server, this behaviour must be disabled by the following setting in DeploymentSpecifics.properties: - - <code>ifsa.provider.useSelectors=false</code> - - - - - - - - - - - - Extension of JmsListener which only stores IFSA variables with their value to simulate IFSA. - - - - - - - - - @@ -1442,7 +1339,7 @@ <p>You can add parameters to the JmsListener, the values will be added as Headers to the JMS response message.</p> <p><b>Notice:</b> the JmsListener is ONLY capable of processing - <code>javax.jms.TextMessage</code>s <br/><br/> + javax.jms.TextMessages and javax.jms.BytesMessage<br/><br/> </p> @@ -1453,18 +1350,6 @@ - - - Common baseclass for Pulling and Pushing JMS Listeners. - - - - - - - - - Read messages from the IBISSTORE database table previously stored by a @@ -1522,42 +1407,6 @@ - - - Implementation of IPullingListener that acts as an IFSA-service. - - There is no need or possibility to set the ServiceId as the Provider will receive all messages - for this Application on the same serviceQueue. - - The following session keys are set for each message: - <ul> - <li>id (the message id)</li> - <li>cid (the correlation id)</li> - <li>timestamp</li> - <li>replyTo</li> - <li>messageText</li> - <li>fullIfsaServiceName</li> - <li>ifsaServiceName</li> - <li>ifsaGroup</li> - <li>ifsaOccurrence</li> - <li>ifsaVersion</li> - </ul> - N.B. - Starting from IFSA-jms version 2.2.10.055(beta) a feature was created to have separate service-queues for Request/Reply - and for Fire & Forget services. This allows applications to provide both types of services, each in its own transaction - mode. This options is not compatible with earlier versions of IFSA-jms. If an earlier version of IFSA-jms is deployed on - the server, this behaviour must be disabled by the following setting in DeploymentSpecifics.properties: - - <code>ifsa.provider.useSelectors=false</code> - - - - - - - - - A true multi-threaded Listener-class. @@ -1606,54 +1455,6 @@ - - - Implementation of IPortConnectedListener that acts as an IFSA-service. - - There is no need or possibility to set the ServiceId as the Provider will receive all messages - for this Application on the same serviceQueue. - - The following session keys are set for each message: - <ul> - <li>id (the message id)</li> - <li>cid (the correlation id)</li> - <li>timestamp</li> - <li>replyTo</li> - <li>messageText</li> - <li>fullIfsaServiceName</li> - <li>ifsaServiceName</li> - <li>ifsaGroup</li> - <li>ifsaOccurrence</li> - <li>ifsaVersion</li> - <li>ifsaBifName</li> - <li>ifsaBtcData</li> - </ul> - N.B. - Starting from IFSA-jms version 2.2.10.055(beta) a feature was created to have separate service-queues for Request/Reply - and for Fire & Forget services. This allows applications to provide both types of services, each in its own transaction - mode. This options is not compatible with earlier versions of IFSA-jms. If an earlier version of IFSA-jms is deployed on - the server, this behaviour must be disabled by the following setting in DeploymentSpecifics.properties: - - <code>ifsa.provider.useSelectors=false</code> - - <p> - For Fire&Forget providers, the message log might get cluttered with messages like: - <code><pre> - [1-10-08 17:10:34:382 CEST] 209d4317 ConnectionMan W J2CA0075W: An active transaction should be present while processing method allocateMCWrapper. - [1-10-08 17:10:34:382 CEST] 209d4317 ConnectionMan W J2CA0075W: An active transaction should be present while processing method initializeForUOW - </pre></code> - This is due to a IFSA requirement, that sessions be created using a parameter transacted=true, indicating - JMS transacted sessions. - </p> - - - - - - - - - JMSListener re-implemented as a pushing listener rather than a pulling listener. @@ -1693,7 +1494,7 @@ whatever it is configured to.</p> <p><b>Notice:</b> the JmsListener is ONLY capable of processing - <code>javax.jms.TextMessage</code>s <br/><br/> + javax.jms.TextMessages and javax.jms.BytesMessage<br/><br/> </p> @@ -1774,18 +1575,6 @@ - - - Dedicated Listener on Tibco JMS Destinations. - - - - - - - - - @@ -1825,7 +1614,7 @@ - + @@ -1836,6 +1625,11 @@ + + + HTTP method(s) to listen to, separated by comma Default: GET + + URI pattern to register this listener on, eq. `/my-listener/{something}/here` @@ -1843,7 +1637,7 @@ - The required contentType on requests, if it doesn't match the request will fail Default: ANY + The required contentType on requests, if it doesn't match a 415 Unsupported Media Type is replied Default: ANY @@ -1865,7 +1659,7 @@ - Automatically generate and validate etags Default: <code>true</code> for repeatable responses + Automatically generate and validate etags Default: <code>false</code>, can be changed by setting the property <code>api.etag.enabled</code>. @@ -1933,7 +1727,12 @@ - Comma separated key value pairs to match with JWT payload. e.g. "sub=UnitTest, aud=test" + Comma separated key value pairs to exactly match with JWT payload. e.g. "sub=UnitTest, aud=test" + + + + + Comma separated key value pairs to one-of match with JWT payload. e.g. "appid=a,appid=b" @@ -1963,7 +1762,7 @@ - + @@ -1974,7 +1773,7 @@ - + @@ -2034,7 +1833,7 @@ - + @@ -2052,13 +1851,12 @@ - By default, the JmsListener takes the Correlation-ID (if present) as the ID that has to be used as Correlation-ID of the reply. - When set to <code>true</code>, the messageID is used as Correlation-ID of the reply. Default: if messageProtocol=<code>RR</code>: </td><td><code>true</code> + if messageProtocol=RR, default value is: true Default: false - Flag if reply-to queue from the request message should be used or not. Default: if messageProtocol=<code>FF</code>: <code>false</code> + if messageProtocol=FF, default value is: false Default: true @@ -2089,6 +1887,7 @@ + @@ -2113,11 +1912,6 @@ - - - - - @@ -2161,9 +1955,10 @@ - + + Name of the JMS destination (queue or topic) to use @@ -2198,7 +1993,7 @@ - + @@ -2227,7 +2022,7 @@ - + @@ -2254,6 +2049,7 @@ + @@ -2280,7 +2076,7 @@ - + @@ -2513,7 +2309,7 @@ - + @@ -2684,7 +2480,7 @@ - + @@ -2712,85 +2508,9 @@ - - - - - - - - - - - - Name of the WebSphere listener port that this JMS Listener binds to. Optional. - - This property is only used in EJB Deployment mode and has no effect otherwise. - If it is not set in EJB Deployment Mode, then the listener port name is - constructed by the EjbListenerPortConnector from - the Listener name, Adapter name and the Receiver name. - - - - - Controls caching of JMS objects. Must be one of CACHE_NONE, CACHE_CONNECTION, CACHE_SESSION, CACHE_CONSUMER - - - - - - - - - - - - - - - - - - Protocol of the IFSA-Service to be called. - When the protocol equals to <code>FF</code>, transacted is set to true. - - - - - - - - set the IFSA service Id, for requesters only - - - - - the ApplicationID, in the form of "IFSA://<i>AppId</i>" - - - - - The functional name of the object. - - - - - The receive timeout in milliseconds. To use the timeout defined as IFSA expiry, set this value to -1 Default: 20000 - - - - - - - - - - - - - + @@ -2837,7 +2557,7 @@ - + @@ -2871,14 +2591,15 @@ - + - Primary key field of the table, used to identify messages. For optimal performance, there should be an index on this field. + Primary key field of the table, used to identify and differentiate messages. + <b>NB: there should be an index on this field!</b> @@ -2896,12 +2617,14 @@ - Field containing the message Id Default: <i>same as keyField</i> + Field containing the <code>messageId</code>. + <b>NB: If this column is not set the default (primary key) keyField will be used as messageId!</b> Default: <i>same as keyField</i> - Field containing the correlationId Default: <i>same as messageIdField</i> + Field containing the <code>correlationId</code>. + <b>NB: If this column is not set, the <code>messageId</code> and <code>correlationId</code> will be the same!</b> Default: <i>same as messageIdField</i> @@ -2927,7 +2650,7 @@ - + @@ -2975,7 +2698,7 @@ - + @@ -3035,11 +2758,11 @@ - + - + @@ -3059,7 +2782,8 @@ - Primary key field of the table, used to identify messages. For optimal performance, there should be an index on this field. Default: MESSAGEKEY + Primary key field of the table, used to identify and differentiate messages. + <b>NB: there should be an index on this field!</b> Default: MESSAGEKEY @@ -3069,12 +2793,14 @@ - Field containing the message Id Default: MESSAGEID + Field containing the <code>messageId</code>. + <b>NB: If this column is not set the default (primary key) keyField will be used as messageId!</b> Default: MESSAGEID - Field containing the correlationId Default: CORRELATIONID + Field containing the <code>correlationId</code>. + <b>NB: If this column is not set, the <code>messageId</code> and <code>correlationId</code> will be the same!</b> Default: CORRELATIONID @@ -3159,11 +2885,11 @@ - + - + @@ -3219,18 +2945,14 @@ - - - - - + - + @@ -3308,11 +3030,19 @@ - + - - + + + Hostname of the SMB share. + + + + + Port to connect to. Default: 445 + + Type of the authentication either 'NTLM' or 'SPNEGO'. @@ -3339,19 +3069,25 @@ - domain, in case the user account is bound to a domain + NTLM only: logon/authentication domain, in case the user account is bound to a domain such as Active Directory. + + + + + May not contain '\\' characters. The destination share, aka smb://xxx/yyy share. - - Key Distribution Center, typically hosted on a domain controller. + SPNEGO only: + Key Distribution Center, typically hosted on a domain controller. Stored in <code>java.security.krb5.kdc</code> - Kerberos Realm, case sensitive. Typically upper case and the same as the domain name. + SPNEGO only: + Kerberos Realm, case sensitive. Typically upper case and the same as the domain name. An Active Directory domain acts as a Kerberos Realm. Stored in <code>java.security.krb5.realm</code> @@ -3363,11 +3099,11 @@ - + - + @@ -3424,12 +3160,12 @@ - + - pathname of the file or directory to list. Default: Home folder of the ftp user + Path of the file or directory to start working. Default: Home folder of the sftp user @@ -3532,7 +3268,7 @@ - + @@ -3546,26 +3282,14 @@ - - - - - - - - - - - - - + - + @@ -3633,7 +3357,7 @@ - + @@ -3660,7 +3384,7 @@ - + @@ -4050,7 +3774,7 @@ Sender for the HTTP protocol using HttpMethod. By default, any response code outside the 2xx or 3xx range is considered an error and the <code>exception</code> forward of the SenderPipe is followed if present and if there is no forward for the specific HTTP status code. Forwards for specific HTTP codes (e.g. "200", "201", ...) - are returned by this sender so they are available to the SenderPipe. + are returned by this sender, so they are available to the SenderPipe. <p><b>Expected message format:</b></p> <p>GET methods expect a message looking like this: @@ -4107,7 +3831,7 @@ <li>Define a Receiver with a JavaListener</li> <li>Set the attribute <code>serviceName</code> to <i>yourExternalServiceName</i></li> </ul> - N.B. Please make sure that the IbisServiceDispatcher-1.1.jar is present on the class path of the server. + N.B. Please make sure that the IbisServiceDispatcher-1.4.jar or newer is present on the class path of the server. @@ -4120,13 +3844,13 @@ Posts a message to another IBIS-adapter in the same IBIS instance. If the callee exits with an &lt;<code>exit</code>&gt; - that has state nl.nn.adapterframework.core.PipeLine.ExitState#ERROR, an error is considered to happen + that has state PipeLine.ExitState#ERROR, an error is considered to happen in the caller which means that the <code>exception</code> forward is followed if it is present. <p/> <p/> Returns exit.code as forward name to SenderPipe provided that exit.code can be parsed as integer. For example, if the called adapter has an exit state with code - <code>2</code>, then the nl.nn.adapterframework.pipes.SenderPipe supports a forward with name <code>2</code> + <code>2</code>, then the SenderPipe supports a forward with name <code>2</code> that is followed when the called adapter exits with the mentioned exit. This does not work if the code is for example <code>c2</code>. <p/> <p/> @@ -4197,71 +3921,6 @@ - - - sender that sends a message to an IFSA service and, in case the MessageProtocol is RR (Request-Reply) - it waits for an reply-message. - - - - - - - - - - - - Extension of JmsSender which only adds parameters to simulate IFSA. - - <p><b>Configuration </b><i>(where deviating from JmsSender)</i><b>:</b> - <table border="1"> - <tr><th>attributes</th><th>description</th><th>default</th></tr> - <tr><td>messageType</td><td>type of messages. Possible values: - <ul> - <li>rr_request</li> - <li>rr_reply</li> - <li>ff_request</li> - </ul> When messageType=rr_reply, the destination is retrieved from session key <code>replyTo</code></td><td>&nbsp;</td></tr> - </table></p> - <p><b>added parameters:</b> - <table border="1"> - <tr><th>name</th><th>type</th><th>sessionKey</th><th>defaultValue</th><th>pattern</th><th>value</th><th>minLength</th><th/></tr> - <tr><td>ifsa</td><td></td><td></td><td></td><td></td><td>_IFSA_HEADER_</td><td></td><td></td></tr> - <tr><td>ifsa_api</td><td></td><td></td><td></td><td></td><td>jms_wrapper</td><td></td><td></td></tr> - <tr><td>ifsa_api_version</td><td></td><td></td><td></td><td></td><td>22.30.020</td><td></td><td></td></tr> - <tr><td>ifsa_auth_flag</td><td></td><td></td><td></td><td></td><td>1</td><td></td><td></td></tr> - <tr><td>ifsa_bif_id</td><td></td><td><code>rr_reply: </code>ifsa_bif_id</td><td></td><td><code>rr_request/ff_request: </code>${IFSAApplicationID}#{ifsa_destination}#{uid}</td><td></td><td></td><td></td></tr> - <tr><td>ifsa_bif_type</td><td></td><td></td><td></td><td></td><td><code>rr_request/rr_reply: </code>0<br/><code>ff_request: </code>2</td><td></td><td></td></tr> - <tr><td>ifsa_bulk</td><td></td><td></td><td></td><td></td><td>0</td><td></td><td></td></tr> - <tr><td>ifsa_bulk_auth_flag</td><td></td><td></td><td></td><td></td><td>0</td><td></td><td></td></tr> - <tr><td>ifsa_cil_version</td><td></td><td></td><td></td><td></td><td>22.30.009</td><td></td><td></td></tr> - <tr><td>ifsa_comp_algo</td><td></td><td>null</td><td>""</td><td></td><td></td><td></td><td></td></tr> - <tr><td>ifsa_destination</td><td></td><td><code>rr_reply: </code>ifsa_source</td><td></td><td></td><td></td><td></td><td><code>rr_request/ff_request: </code>to be set in IBIS configuration</td></tr> - <tr><td>ifsa_expiry</td><td></td><td></td><td></td><td></td><td><code>rr_request/rr_reply: </code>${timeOutIFSARR}<br/><code>ff_request: </code>0</td><td></td><td></td></tr> - <tr><td>ifsa_header_version</td><td></td><td></td><td></td><td></td><td>02.02.000</td><td></td><td></td></tr> - <tr><td>ifsa_hop_count</td><td></td><td></td><td></td><td></td><td>000</td><td></td><td></td></tr> - <tr><td>ifsa_node_id</td><td></td><td></td><td></td><td></td><td>${ifsa_node_id}</td><td></td><td></td></tr> - <tr><td>ifsa_ori_area</td><td></td><td><code>ff_request: </code>null</td><td><code>ff_request: </code>""</td><td></td><td><code>rr_request/rr_reply: </code>${ifsa_ori_area}</td><td>60</td><td></td></tr> - <tr><td>ifsa_ori_format</td><td></td><td>null</td><td>""</td><td></td><td></td><td></td><td></td></tr> - <tr><td>ifsa_ori_length</td><td></td><td>null</td><td>""</td><td></td><td></td><td></td><td></td></tr> - <tr><td>ifsa_ori_rtq</td><td></td><td><code>rr_reply/ff_request: </code>null</td><td><code>rr_reply/ff_request: </code>""</td><td></td><td><code>rr_request: </code>${ifsa_ori_rtq}</td><td>48</td><td></td></tr> - <tr><td>ifsa_ori_rtqm</td><td></td><td><code>rr_reply/ff_request: </code>null</td><td><code>rr_reply/ff_request: </code>""</td><td></td><td><code>rr_request: </code>${ifsa_ori_rtqm}</td><td>48</td><td></td></tr> - <tr><td>ifsa_priority</td><td></td><td></td><td></td><td></td><td><code>rr_request/rr_reply: </code>3<br/><code>ff_request: </code>2</td><td></td><td></td></tr> - <tr><td>ifsa_source</td><td></td><td></td><td></td><td><code>rr_reply: </code>${IFSAApplicationID}#{ifsa_destination}</td><td><code>rr_request/ff_request: </code>${IFSAApplicationID}</td><td></td><td></td></tr> - <tr><td>ifsa_unique_id</td><td></td><td></td><td></td><td>{uid}</td><td></td><td></td><td></td></tr> - <tr><td>JMS_IBM_MsgType</td><td>integer</td><td></td><td></td><td></td><td><code>rr_request: </code>1<br/><code>rr_reply: </code>2<br/><code>ff_request: </code>8</td><td></td><td></td></tr> - </table> - </p> - - - - - - - - - @@ -4273,14 +3932,20 @@ - Sender used to run javascript code using J2V8 or Rhino - + Sender used to run JavaScript code using J2V8 + <p> This sender can execute a function of a given javascript file, the result of the function will be the output of the sender. The parameters of the javascript function to run are given as parameters by the adapter configuration The sender doesn't accept nor uses the given input, instead for each argument for the #jsFunctionName method, you will need to create a parameter on the sender. - It is recommended to have the result of the javascript function be of type String, as the output of the sender will be - of type String. + </p> + <p> + The result of the javascript function should be of type String, or directly convertible to String from a primitive type + or an array of primitive types / strings, as the output of the sender will be of type String. + </p> + <p> + Failure to ensure the output is a string may mean the result will look like {@code [Object object]}. + </p> @@ -4326,7 +3991,7 @@ <code> <pre> &lt;sender - className="nl.nn.adapterframework.ldap.LdapSender" + className="org.frankframework.ldap.LdapSender" ldapProviderURL="ldap://servername:389/o=ing" operation="read" attributesToReturn="givenName,sn,telephoneNumber" &gt; @@ -4596,6 +4261,29 @@ + + + Wrapper for senders, that opens the wrapped sender at runtime before each sender action, and closes it afterwards. + This prevents (long) open connections inside Senders and possible connection failures. + + <b>Example:</b> + <pre><code> + &lt;SenderPipe&gt; + &lt;ReconnectSenderWrapper&gt; + &lt;EchoSender myAttribute="myValue" /&gt; + &lt;/ReconnectSenderWrapper&gt; + &lt;/SenderPipe&gt; + </code></pre> + </p> + + + + + + + + + Performs a reload on database configuration. @@ -4624,6 +4312,11 @@ + + Uses the (old) SMB 1 protocol. + <br/> + Only supports NTLM authentication. + @@ -4633,6 +4326,14 @@ + + Uses the (newer) SMB 2 and 3 protocol. + + Possible error codes: + <br/> + Pre-authentication information was invalid (24) or Identifier doesn't match expected value (906): login information is incorrect + Server not found in Kerberos database (7): Verify that the hostname is the FQDN and the server is using a valid SPN. + @@ -4641,19 +4342,10 @@ - + - - - - - - - - - - + @@ -4739,13 +4431,18 @@ StoredProcedureQuerySender is used to send stored procedure queries and retrieve the result. <p> + <h3>QueryType settings and OUTPUT parameters</h3> The StoredProcedureQuerySender class has the following features: <ul> <li>It supports setting the output parameters of the stored procedure by setting 'mode' attribute of the corresponding 'Param' to 'OUTPUT' or 'INOUT'.</li> - <li>The queryType can only be 'SELECT' or 'OTHER'. Use 'SELECT' when the stored procedure - returns a set of rows, use 'OTHER' if the stored procedure has one or more output parameters. - </li> + <li>The queryType can only be 'SELECT' or 'OTHER'.</li> + <li>Use queryType 'SELECT' when the stored procedure only returns a set of rows, and you need + the output to be the format as FixedQuerySender (see DB2XMLWriter).</li> + <li>Use queryType 'OTHER' if the stored procedure has one or more output parameters. With this query type, + the stored procedure can return a result-set along with returning some values in output parameters. + Depending on the database, the stored procedure can even returning multiple result sets or a combination + of result sets as return values, and result sets as REF_CURSOR OUT parameters. </li> </ul> </p> <p> @@ -4753,7 +4450,78 @@ have a corresponding Parameter entry. Output parameters should have {@code mode="OUTPUT"}, or {@code mode="INOUT"} depending on how the stored procedure is defined. </p> - <p><b>NOTE:</b> See DB2XMLWriter for ResultSet!</p> + <p> + <h3>Sample Output for queryType=OTHER</h3> + <h4>Basic Example with Only Simple Output Parameters</h4> + <code><pre> + &lt;resultset&gt; + &lt;result param="r1" type="STRING"&gt;MESSAGE-CONTENTS&lt;/result&gt; + &lt;result param="r2" type="STRING"&gt;E&lt;/result&gt; + &lt;/resultset&gt; + </pre></code> + + <h4>Example with Resultset and Simple Output Parameters</h4> + <code><pre> + &lt;resultset&gt; + &lt;result resultNr="1"&gt; + &lt;fielddefinition&gt; + &lt;field name="FIELDNAME" + type="columnType" + columnDisplaySize="" + precision="" + scale="" + isCurrency="" + columnTypeName="" + columnClassName=""/&gt; + &lt;field ...../&gt; + &lt;/fielddefinition&gt; + &lt;rowset&gt; + &lt;row number="0"&gt; + &lt;field name="TKEY"&gt;MSG-ID&lt;/field&gt; + &lt;field name="TCHAR"&gt;E&lt;/field&gt; + &lt;field name="TMESSAGE"&gt;MESSAGE-CONTENTS&lt;/field&gt; + &lt;field name="TCLOB" null="true"/&gt; + &lt;field name="TBLOB" null="true"/&gt; + &lt;/row&gt; + &lt;row number="1" ...../&gt; + &lt;/rowset&gt; + &lt;/result&gt; + &lt;result param="count" type="INTEGER"&gt;5&lt;/result&gt; + &lt;/resultset&gt; + </pre></code> + + <h4>Example with Simple and Cursor Output Parameters</h4> + <code><pre> + &lt;resultset&gt; + &lt;result param="count" type="INTEGER"&gt;5&lt;/result&gt; + &lt;result param="cursor1" type="LIST"&gt; + &lt;fielddefinition&gt; + &lt;field name="FIELDNAME" + type="columnType" + columnDisplaySize="" + precision="" + scale="" + isCurrency="" + columnTypeName="" + columnClassName=""/&gt; + &lt;field ...../&gt; + &lt;/fielddefinition&gt; + &lt;rowset&gt; + &lt;row number="0"&gt; + &lt;field name="TKEY"&gt;MSG-ID&lt;/field&gt; + &lt;field name="TCHAR"&gt;E&lt;/field&gt; + &lt;field name="TMESSAGE"&gt;MESSAGE-CONTENTS&lt;/field&gt; + &lt;field name="TCLOB" null="true"/&gt; + &lt;field name="TBLOB" null="true"/&gt; + &lt;/row&gt; + &lt;row number="1" ..... /&gt; + &lt;/rowset&gt; + &lt;/result&gt; + &lt;/resultset&gt; + </pre></code> + </p> + <p><em>NOTE:</em> Support for stored procedures is currently experimental and changes in the currently produced output-format + are expected.</p> @@ -4763,30 +4531,6 @@ - - - Dedicated sender on Tibco Destinations. - - - - - - - - - - - - Sender that sends a message via a WebService based on NTLM authentication. - - - - - - - - - Sender that sends a message via a WebService. @@ -4831,7 +4575,7 @@ <br/> - Folder should have SGID bit set so that all files what is copied to this folder get group ownership xfbgw <br/> - - send file must have rights 660 after putting the file in the send directory. + - send file must have rights 660 after putting the file in the send directory. <br/> <br/> RECEIVING CFT: @@ -4999,7 +4743,7 @@ - + @@ -5016,7 +4760,7 @@ - + @@ -5124,7 +4868,7 @@ - If set <code>true</code>, for actions create, move, copy or rename, the destination file is overwritten if it already exists Default: false + If set <code>true</code>, for actions create, write, move, copy or rename, the destination file is overwritten if it already exists Default: false @@ -5188,7 +4932,7 @@ - + @@ -5259,12 +5003,12 @@ - (Only used when <code>action</code>=<code>get</code>). If true, the content of the document is streamed to <code>fileInputStreamSessionKey</code> and all document properties are put in the result as a xml string Default: false + (Only used when <code>action</code>=<code>get</code>). If true, the content of the document is put to <code>FileSessionKey</code> and all document properties are put in the result as a xml string Default: false - (Only used when <code>action</code>=<code>get</code>). If true, the attachment for the document is the sender result or, if set, stored in <code>fileInputStreamSessionKey</code>. If false, only the properties are returned Default: true + (Only used when <code>action</code>=<code>get</code>). If true, the attachment for the document is the sender result or, if set, stored in <code>FileSessionKey</code>. If false, only the properties are returned Default: true @@ -5401,7 +5145,7 @@ - + @@ -5409,7 +5153,7 @@ The command to be executed. Note: Executing a command in WAS requires &lt;&lt;ALL FILES&gt;&gt; execute permission to avoid that provide the absolute path of the command. Absolute path can be found with the following command 'which -a {commandName}' - + The number of seconds to execute a command. If the limit is exceeded, a TimeoutException is thrown. A value of 0 means execution time is not limited Default: 0 @@ -5426,7 +5170,7 @@ - + @@ -5442,7 +5186,7 @@ - + @@ -5452,7 +5196,7 @@ - The number of seconds the driver will wait for a statement object to execute. If the limit is exceeded, a TimeoutException is thrown. A value of 0 means execution time is not limited Default: 0 + The number of seconds the JDBC driver will wait for a statement object to execute. If the limit is exceeded, a TimeoutException is thrown. A value of 0 means execution time is not limited Default: 0 @@ -5585,7 +5329,7 @@ - + @@ -5601,7 +5345,7 @@ - + @@ -5612,10 +5356,9 @@ - + - receiver timeout, in milliseconds - ff.default 20000 (20s) + receiver timeout, in milliseconds Default: 20000 (20s) @@ -5628,7 +5371,7 @@ - if messageProtocol=<code>RR</code> then <code>replyTimeout</code> defaults to <code>timeOut</code> Default: 5000 + if messageProtocol=<code>RR</code> then <code>replyTimeout</code> defaults to <code>timeout</code> Default: 5000 @@ -5664,7 +5407,7 @@ - + @@ -5718,7 +5461,7 @@ - + @@ -5898,17 +5641,17 @@ - + - + - The SQL query text to be excecuted each time sendMessage() is called + The SQL query text to be executed each time sendMessage() is called @@ -5920,7 +5663,7 @@ - + @@ -5949,7 +5692,7 @@ - + @@ -6120,7 +5863,7 @@ - + @@ -6136,11 +5879,6 @@ (Only used when <code>methodType</code>=<code>POST</code> and <code>postType</code>=<code>URLENCODED</code>, <code>FORM-DATA</code> or <code>MTOM</code>) Prepends a new BodyPart using the specified name and uses the input of the Sender as content - - - If set, the result is streamed to the HhttpServletResponse object of the RestServiceDispatcher (instead of passed as a string) Default: false - - If set and <code>methodType</code>=<code>POST</code> and <code>paramsInUrl</code>=<code>false</code>, a multipart/form-data entity is created instead of a request body. @@ -6175,11 +5913,7 @@ - - - URL or base of URL to be used - - + @@ -6262,6 +5996,7 @@ + @@ -6326,6 +6061,7 @@ + @@ -6333,7 +6069,7 @@ - + @@ -6349,7 +6085,7 @@ - + @@ -6386,7 +6122,7 @@ - + @@ -6438,30 +6174,30 @@ - + - This is the contract number for iDIN the Merchant received from its Acquirer after registration, - and is used to unambiguously identify the Merchant. This number is 10-digits long, where the + This is the contract number for iDIN the Merchant received from its Acquirer after registration, + and is used to unambiguously identify the Merchant. This number is 10-digits long, where the first four digits are equal to the AcquirerID. - The SubID that uniquely defines the name and address of the Merchant to be used for iDIN, - if operating under different brands or trading entities. The Merchant obtains the SubID - from its Acquirer after registration for iDIN. A Merchant can request permission from + The SubID that uniquely defines the name and address of the Merchant to be used for iDIN, + if operating under different brands or trading entities. The Merchant obtains the SubID + from its Acquirer after registration for iDIN. A Merchant can request permission from the Acquirer to use one or more SubIDs. - The web address provided by the Merchant in the transaction request that is used to redirect the - Consumer back to the Merchant after completing the authentication in the Issuer domain. The URL - does not necessarily begin with http:// or https://, it can also start with an app handler + The web address provided by the Merchant in the transaction request that is used to redirect the + Consumer back to the Merchant after completing the authentication in the Issuer domain. The URL + does not necessarily begin with http:// or https://, it can also start with an app handler e.g. companyname-nlservice://. @@ -6470,7 +6206,7 @@ - The Java iDIN Software Library needs to access a keystore located in the Java classpath to + The Java iDIN Software Library needs to access a keystore located in the Java classpath to store all the required certificates @@ -6504,22 +6240,22 @@ - This is the public certificate used to authenticate incoming messages from the Acquirer. The library - only needs its public key. The public certificate must be in PEM format (base64 ASCII) and typically + This is the public certificate used to authenticate incoming messages from the Acquirer. The library + only needs its public key. The public certificate must be in PEM format (base64 ASCII) and typically has the file extension .cer,.crt or .pem. - This is the public certificate used to authenticate incoming messages from the Acquirer. The library - only needs its public key. The public certificate must be in PEM format (base64 ASCII) and typically + This is the public certificate used to authenticate incoming messages from the Acquirer. The library + only needs its public key. The public certificate must be in PEM format (base64 ASCII) and typically has the file extension .cer,.crt or .pem. - This is the certificate owned by the Merchant. Its public key is used by the Issuer to encrypt information. - The Merchant can then use the private key to decrypt that information. The SAML certificate must be in + This is the certificate owned by the Merchant. Its public key is used by the Issuer to encrypt information. + The Merchant can then use the private key to decrypt that information. The SAML certificate must be in PKCS#12 format which has the extension .p12 or .pfx; @@ -6545,7 +6281,7 @@ - + @@ -6568,33 +6304,10 @@ - - - - - - - - - - - - - - - - - - - - - - - - + @@ -6640,10 +6353,21 @@ - + - + + + + + + + + + + + + @@ -6657,7 +6381,7 @@ - the name of the javascript engine to be used Default: J2V8 + the name of the JavaScript engine to be used. Default: J2V8 @@ -6671,7 +6395,7 @@ - + @@ -6736,7 +6460,7 @@ - + @@ -6746,7 +6470,7 @@ - Namespace defintions for xpathExpression. Must be in the form of a comma or space separated list of <code>prefix=namespaceuri</code>-definitions Default: j=http://www.w3.org/2013/XSL/json + Namespace definitions for xpathExpression. Must be in the form of a comma or space separated list of <code>prefix=namespaceuri</code>-definitions Default: j=http://www.w3.org/2013/XSL/json @@ -6818,7 +6542,7 @@ - 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 + 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 @@ -6827,7 +6551,7 @@ - + @@ -6902,7 +6626,7 @@ - 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 + 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 @@ -6914,7 +6638,7 @@ - + @@ -6986,7 +6710,7 @@ - + @@ -7002,7 +6726,7 @@ - + @@ -7023,12 +6747,12 @@ - + - + @@ -7041,6 +6765,11 @@ Port of the SMTP-host by which the messages are to be send Default: 25 + + + When set to true, we ensure TLS is being used Default: false + + @@ -7078,7 +6807,7 @@ - + @@ -7122,7 +6851,7 @@ - + @@ -7156,7 +6885,7 @@ - + @@ -7246,7 +6975,7 @@ - + @@ -7308,7 +7037,7 @@ - + @@ -7318,7 +7047,7 @@ - + @@ -7454,13 +7183,14 @@ + - + @@ -7484,10 +7214,26 @@ + + + + + + + + + + + + + + + + - + @@ -7503,7 +7249,7 @@ - + @@ -7535,35 +7281,40 @@ - + - Shared folder name in the samba server + The destination, aka smb://xxx/yyy share - the smb share username + The SMB share username - the smb share password + The SMB share password - alias used to obtain credentials for the smb share + Alias used to obtain credentials for the SMB share - + - in case the user account is bound to a domain + 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 @@ -7576,11 +7327,19 @@ - + - - + + + Hostname of the SMB share. + + + + + Port to connect to. Default: 445 + + Type of the authentication either 'NTLM' or 'SPNEGO'. @@ -7607,19 +7366,25 @@ - domain, in case the user account is bound to a domain + NTLM only: logon/authentication domain, in case the user account is bound to a domain such as Active Directory. + + + + + May not contain '\\' characters. The destination share, aka smb://xxx/yyy share. - - Key Distribution Center, typically hosted on a domain controller. + SPNEGO only: + Key Distribution Center, typically hosted on a domain controller. Stored in <code>java.security.krb5.kdc</code> - Kerberos Realm, case sensitive. Typically upper case and the same as the domain name. + SPNEGO only: + Kerberos Realm, case sensitive. Typically upper case and the same as the domain name. An Active Directory domain acts as a Kerberos Realm. Stored in <code>java.security.krb5.realm</code> @@ -7629,15 +7394,10 @@ - - - - - - + @@ -7663,7 +7423,7 @@ - + @@ -7694,7 +7454,7 @@ - + @@ -7845,7 +7605,7 @@ - Secure socket protocol (such as 'SSL' and 'TLS') to use when a SSLContext object is generated. Default: SSL + Secure socket protocol (such as 'TLSv1.2') to use when a SSLContext object is generated. Default: TLSv1.2 @@ -7874,7 +7634,7 @@ - + @@ -7890,12 +7650,12 @@ - + - pathname of the file or directory to list. Default: Home folder of the ftp user + Path of the file or directory to start working. Default: Home folder of the sftp user @@ -7999,7 +7759,7 @@ - + @@ -8025,7 +7785,7 @@ - + @@ -8079,84 +7839,10 @@ - - - - - - - - - URL (hostname and port, separated by ':') of Tibco-Server - - - - - - - - - - - - - - - - content-type of the request Default: text/html; charset=utf-8 - - - - - url or base of url to be used - - - - - timeout in ms of obtaining a connection/result. 0 means no timeout Default: 10000 - - - - - the maximum number of concurrent connections Default: 10 - - - - - alias used to obtain credentials for authentication to host - - - - - username used in authentication to host - - - - - password used to authenticate with the host - - - - - - - Default: 80 - - - - - the soapactionuri to be set in the requestheader - - - - - - - - + @@ -8222,12 +7908,94 @@ - + + + + + + + + + + + (Only used when xHtml=<code>true</code>) stylesheet to apply to the HTML response + + + + + + + The functional name of the object. + + + + + Timeout in ms of obtaining a connection/result. 0 means no timeout Default: 10000 + + + + + + + Authentication alias used for authentication to the host + + + + + Username used for authentication to the host + + + + + Password used for authentication to the host + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -8330,7 +8098,7 @@ - + @@ -8344,7 +8112,7 @@ - When set to <code>true</code>, the file is copied before calling the XFB script. + When set to <code>true</code>, the file is copied before calling the XFB script. Reasons to copy the file: - XFB will rename the file (prefix it with FXB_) and delete it. - On Linux the sticky bit (drwxrws--- wasadmin xfbgw) isn't honoured with a move (only with a copy) (on AIX the sticky bit works for both move and copy). @@ -8363,17 +8131,17 @@ - + - + - + @@ -8456,7 +8224,7 @@ - + @@ -8758,7 +8526,7 @@ Sender for the HTTP protocol using HttpMethod. By default, any response code outside the 2xx or 3xx range is considered an error and the <code>exception</code> forward of the SenderPipe is followed if present and if there is no forward for the specific HTTP status code. Forwards for specific HTTP codes (e.g. "200", "201", ...) - are returned by this sender so they are available to the SenderPipe. + are returned by this sender, so they are available to the SenderPipe. <p><b>Expected message format:</b></p> <p>GET methods expect a message looking like this: @@ -8815,7 +8583,7 @@ <li>Define a Receiver with a JavaListener</li> <li>Set the attribute <code>serviceName</code> to <i>yourExternalServiceName</i></li> </ul> - N.B. Please make sure that the IbisServiceDispatcher-1.1.jar is present on the class path of the server. + N.B. Please make sure that the IbisServiceDispatcher-1.4.jar or newer is present on the class path of the server. @@ -8828,13 +8596,13 @@ Posts a message to another IBIS-adapter in the same IBIS instance. If the callee exits with an &lt;<code>exit</code>&gt; - that has state nl.nn.adapterframework.core.PipeLine.ExitState#ERROR, an error is considered to happen + that has state PipeLine.ExitState#ERROR, an error is considered to happen in the caller which means that the <code>exception</code> forward is followed if it is present. <p/> <p/> Returns exit.code as forward name to SenderPipe provided that exit.code can be parsed as integer. For example, if the called adapter has an exit state with code - <code>2</code>, then the nl.nn.adapterframework.pipes.SenderPipe supports a forward with name <code>2</code> + <code>2</code>, then the SenderPipe supports a forward with name <code>2</code> that is followed when the called adapter exits with the mentioned exit. This does not work if the code is for example <code>c2</code>. <p/> <p/> @@ -8905,112 +8673,53 @@ - - - sender that sends a message to an IFSA service and, in case the MessageProtocol is RR (Request-Reply) - it waits for an reply-message. - + - + - + - Extension of JmsSender which only adds parameters to simulate IFSA. - - <p><b>Configuration </b><i>(where deviating from JmsSender)</i><b>:</b> - <table border="1"> - <tr><th>attributes</th><th>description</th><th>default</th></tr> - <tr><td>messageType</td><td>type of messages. Possible values: - <ul> - <li>rr_request</li> - <li>rr_reply</li> - <li>ff_request</li> - </ul> When messageType=rr_reply, the destination is retrieved from session key <code>replyTo</code></td><td>&nbsp;</td></tr> - </table></p> - <p><b>added parameters:</b> - <table border="1"> - <tr><th>name</th><th>type</th><th>sessionKey</th><th>defaultValue</th><th>pattern</th><th>value</th><th>minLength</th><th/></tr> - <tr><td>ifsa</td><td></td><td></td><td></td><td></td><td>_IFSA_HEADER_</td><td></td><td></td></tr> - <tr><td>ifsa_api</td><td></td><td></td><td></td><td></td><td>jms_wrapper</td><td></td><td></td></tr> - <tr><td>ifsa_api_version</td><td></td><td></td><td></td><td></td><td>22.30.020</td><td></td><td></td></tr> - <tr><td>ifsa_auth_flag</td><td></td><td></td><td></td><td></td><td>1</td><td></td><td></td></tr> - <tr><td>ifsa_bif_id</td><td></td><td><code>rr_reply: </code>ifsa_bif_id</td><td></td><td><code>rr_request/ff_request: </code>${IFSAApplicationID}#{ifsa_destination}#{uid}</td><td></td><td></td><td></td></tr> - <tr><td>ifsa_bif_type</td><td></td><td></td><td></td><td></td><td><code>rr_request/rr_reply: </code>0<br/><code>ff_request: </code>2</td><td></td><td></td></tr> - <tr><td>ifsa_bulk</td><td></td><td></td><td></td><td></td><td>0</td><td></td><td></td></tr> - <tr><td>ifsa_bulk_auth_flag</td><td></td><td></td><td></td><td></td><td>0</td><td></td><td></td></tr> - <tr><td>ifsa_cil_version</td><td></td><td></td><td></td><td></td><td>22.30.009</td><td></td><td></td></tr> - <tr><td>ifsa_comp_algo</td><td></td><td>null</td><td>""</td><td></td><td></td><td></td><td></td></tr> - <tr><td>ifsa_destination</td><td></td><td><code>rr_reply: </code>ifsa_source</td><td></td><td></td><td></td><td></td><td><code>rr_request/ff_request: </code>to be set in IBIS configuration</td></tr> - <tr><td>ifsa_expiry</td><td></td><td></td><td></td><td></td><td><code>rr_request/rr_reply: </code>${timeOutIFSARR}<br/><code>ff_request: </code>0</td><td></td><td></td></tr> - <tr><td>ifsa_header_version</td><td></td><td></td><td></td><td></td><td>02.02.000</td><td></td><td></td></tr> - <tr><td>ifsa_hop_count</td><td></td><td></td><td></td><td></td><td>000</td><td></td><td></td></tr> - <tr><td>ifsa_node_id</td><td></td><td></td><td></td><td></td><td>${ifsa_node_id}</td><td></td><td></td></tr> - <tr><td>ifsa_ori_area</td><td></td><td><code>ff_request: </code>null</td><td><code>ff_request: </code>""</td><td></td><td><code>rr_request/rr_reply: </code>${ifsa_ori_area}</td><td>60</td><td></td></tr> - <tr><td>ifsa_ori_format</td><td></td><td>null</td><td>""</td><td></td><td></td><td></td><td></td></tr> - <tr><td>ifsa_ori_length</td><td></td><td>null</td><td>""</td><td></td><td></td><td></td><td></td></tr> - <tr><td>ifsa_ori_rtq</td><td></td><td><code>rr_reply/ff_request: </code>null</td><td><code>rr_reply/ff_request: </code>""</td><td></td><td><code>rr_request: </code>${ifsa_ori_rtq}</td><td>48</td><td></td></tr> - <tr><td>ifsa_ori_rtqm</td><td></td><td><code>rr_reply/ff_request: </code>null</td><td><code>rr_reply/ff_request: </code>""</td><td></td><td><code>rr_request: </code>${ifsa_ori_rtqm}</td><td>48</td><td></td></tr> - <tr><td>ifsa_priority</td><td></td><td></td><td></td><td></td><td><code>rr_request/rr_reply: </code>3<br/><code>ff_request: </code>2</td><td></td><td></td></tr> - <tr><td>ifsa_source</td><td></td><td></td><td></td><td><code>rr_reply: </code>${IFSAApplicationID}#{ifsa_destination}</td><td><code>rr_request/ff_request: </code>${IFSAApplicationID}</td><td></td><td></td></tr> - <tr><td>ifsa_unique_id</td><td></td><td></td><td></td><td>{uid}</td><td></td><td></td><td></td></tr> - <tr><td>JMS_IBM_MsgType</td><td>integer</td><td></td><td></td><td></td><td><code>rr_request: </code>1<br/><code>rr_reply: </code>2<br/><code>ff_request: </code>8</td><td></td><td></td></tr> - </table> + Sender used to run JavaScript code using J2V8 + <p> + This sender can execute a function of a given javascript file, the result of the function will be the output of the sender. + The parameters of the javascript function to run are given as parameters by the adapter configuration + The sender doesn't accept nor uses the given input, instead for each argument for the #jsFunctionName method, + you will need to create a parameter on the sender. + </p> + <p> + The result of the javascript function should be of type String, or directly convertible to String from a primitive type + or an array of primitive types / strings, as the output of the sender will be of type String. + </p> + <p> + Failure to ensure the output is a string may mean the result will look like {@code [Object object]}. </p> - + - + + + This class sends messages with JMS. + - + - - - Sender used to run javascript code using J2V8 or Rhino - - This sender can execute a function of a given javascript file, the result of the function will be the output of the sender. - The parameters of the javascript function to run are given as parameters by the adapter configuration - The sender doesn't accept nor uses the given input, instead for each argument for the #jsFunctionName method, - you will need to create a parameter on the sender. - It is recommended to have the result of the javascript function be of type String, as the output of the sender will be - of type String. - - - - - - - - - - - - This class sends messages with JMS. - - - - - - - - - - + Perform an XSLT transformation with a specified stylesheet on a JSON input, yielding JSON, yielding JSON, XML or text. JSON input is transformed into XML map, array, string, integer and boolean elements, in the namespace http://www.w3.org/2013/XSL/json. @@ -9034,7 +8743,7 @@ <code> <pre> &lt;sender - className="nl.nn.adapterframework.ldap.LdapSender" + className="org.frankframework.ldap.LdapSender" ldapProviderURL="ldap://servername:389/o=ing" operation="read" attributesToReturn="givenName,sn,telephoneNumber" &gt; @@ -9304,6 +9013,29 @@ + + + Wrapper for senders, that opens the wrapped sender at runtime before each sender action, and closes it afterwards. + This prevents (long) open connections inside Senders and possible connection failures. + + <b>Example:</b> + <pre><code> + &lt;SenderPipe&gt; + &lt;ReconnectSenderWrapper&gt; + &lt;EchoSender myAttribute="myValue" /&gt; + &lt;/ReconnectSenderWrapper&gt; + &lt;/SenderPipe&gt; + </code></pre> + </p> + + + + + + + + + Performs a reload on database configuration. @@ -9332,6 +9064,11 @@ + + Uses the (old) SMB 1 protocol. + <br/> + Only supports NTLM authentication. + @@ -9341,6 +9078,14 @@ + + Uses the (newer) SMB 2 and 3 protocol. + + Possible error codes: + <br/> + Pre-authentication information was invalid (24) or Identifier doesn't match expected value (906): login information is incorrect + Server not found in Kerberos database (7): Verify that the hostname is the FQDN and the server is using a valid SPN. + @@ -9349,15 +9094,6 @@ - - - - - - - - - @@ -9447,13 +9183,18 @@ StoredProcedureQuerySender is used to send stored procedure queries and retrieve the result. <p> + <h3>QueryType settings and OUTPUT parameters</h3> The StoredProcedureQuerySender class has the following features: <ul> <li>It supports setting the output parameters of the stored procedure by setting 'mode' attribute of the corresponding 'Param' to 'OUTPUT' or 'INOUT'.</li> - <li>The queryType can only be 'SELECT' or 'OTHER'. Use 'SELECT' when the stored procedure - returns a set of rows, use 'OTHER' if the stored procedure has one or more output parameters. - </li> + <li>The queryType can only be 'SELECT' or 'OTHER'.</li> + <li>Use queryType 'SELECT' when the stored procedure only returns a set of rows, and you need + the output to be the format as FixedQuerySender (see DB2XMLWriter).</li> + <li>Use queryType 'OTHER' if the stored procedure has one or more output parameters. With this query type, + the stored procedure can return a result-set along with returning some values in output parameters. + Depending on the database, the stored procedure can even returning multiple result sets or a combination + of result sets as return values, and result sets as REF_CURSOR OUT parameters. </li> </ul> </p> <p> @@ -9461,7 +9202,78 @@ have a corresponding Parameter entry. Output parameters should have {@code mode="OUTPUT"}, or {@code mode="INOUT"} depending on how the stored procedure is defined. </p> - <p><b>NOTE:</b> See DB2XMLWriter for ResultSet!</p> + <p> + <h3>Sample Output for queryType=OTHER</h3> + <h4>Basic Example with Only Simple Output Parameters</h4> + <code><pre> + &lt;resultset&gt; + &lt;result param="r1" type="STRING"&gt;MESSAGE-CONTENTS&lt;/result&gt; + &lt;result param="r2" type="STRING"&gt;E&lt;/result&gt; + &lt;/resultset&gt; + </pre></code> + + <h4>Example with Resultset and Simple Output Parameters</h4> + <code><pre> + &lt;resultset&gt; + &lt;result resultNr="1"&gt; + &lt;fielddefinition&gt; + &lt;field name="FIELDNAME" + type="columnType" + columnDisplaySize="" + precision="" + scale="" + isCurrency="" + columnTypeName="" + columnClassName=""/&gt; + &lt;field ...../&gt; + &lt;/fielddefinition&gt; + &lt;rowset&gt; + &lt;row number="0"&gt; + &lt;field name="TKEY"&gt;MSG-ID&lt;/field&gt; + &lt;field name="TCHAR"&gt;E&lt;/field&gt; + &lt;field name="TMESSAGE"&gt;MESSAGE-CONTENTS&lt;/field&gt; + &lt;field name="TCLOB" null="true"/&gt; + &lt;field name="TBLOB" null="true"/&gt; + &lt;/row&gt; + &lt;row number="1" ...../&gt; + &lt;/rowset&gt; + &lt;/result&gt; + &lt;result param="count" type="INTEGER"&gt;5&lt;/result&gt; + &lt;/resultset&gt; + </pre></code> + + <h4>Example with Simple and Cursor Output Parameters</h4> + <code><pre> + &lt;resultset&gt; + &lt;result param="count" type="INTEGER"&gt;5&lt;/result&gt; + &lt;result param="cursor1" type="LIST"&gt; + &lt;fielddefinition&gt; + &lt;field name="FIELDNAME" + type="columnType" + columnDisplaySize="" + precision="" + scale="" + isCurrency="" + columnTypeName="" + columnClassName=""/&gt; + &lt;field ...../&gt; + &lt;/fielddefinition&gt; + &lt;rowset&gt; + &lt;row number="0"&gt; + &lt;field name="TKEY"&gt;MSG-ID&lt;/field&gt; + &lt;field name="TCHAR"&gt;E&lt;/field&gt; + &lt;field name="TMESSAGE"&gt;MESSAGE-CONTENTS&lt;/field&gt; + &lt;field name="TCLOB" null="true"/&gt; + &lt;field name="TBLOB" null="true"/&gt; + &lt;/row&gt; + &lt;row number="1" ..... /&gt; + &lt;/rowset&gt; + &lt;/result&gt; + &lt;/resultset&gt; + </pre></code> + </p> + <p><em>NOTE:</em> Support for stored procedures is currently experimental and changes in the currently produced output-format + are expected.</p> @@ -9471,30 +9283,6 @@ - - - Dedicated sender on Tibco Destinations. - - - - - - - - - - - - Sender that sends a message via a WebService based on NTLM authentication. - - - - - - - - - Sender that sends a message via a WebService. @@ -9539,7 +9327,7 @@ <br/> - Folder should have SGID bit set so that all files what is copied to this folder get group ownership xfbgw <br/> - - send file must have rights 660 after putting the file in the send directory. + - send file must have rights 660 after putting the file in the send directory. <br/> <br/> RECEIVING CFT: @@ -9828,11 +9616,11 @@ - + - + @@ -9853,7 +9641,7 @@ - + Timeout <i>in milliseconds</i> for receiving a message from the queue Default: 3000 @@ -10008,7 +9796,7 @@ - + @@ -10061,7 +9849,7 @@ - + @@ -10071,7 +9859,7 @@ - name of the file containing the resultmessage + name of the file containing the result message @@ -10081,14 +9869,14 @@ - + - + @@ -10156,7 +9944,7 @@ XmlValidator that will automatically add the SOAP envelope XSD and the ESB XSD (e.g. a CommonMessageHeader.xsd) - to the set of XSD's used for validation. + to the set of XSDs used for validation. @@ -10244,7 +10032,7 @@ - Pipe that validates the input message against a XML Schema. + Pipe that validates the input message against an XML Schema. @@ -10272,7 +10060,7 @@ - + @@ -10323,7 +10111,7 @@ - + @@ -10334,7 +10122,7 @@ - + @@ -10419,7 +10207,7 @@ - + @@ -10489,7 +10277,7 @@ - + @@ -10578,7 +10366,7 @@ - + @@ -10735,7 +10523,7 @@ - + @@ -10761,7 +10549,7 @@ - + @@ -10782,7 +10570,7 @@ - + @@ -10808,7 +10596,7 @@ - + @@ -10892,7 +10680,7 @@ XmlValidator that will automatically add the SOAP envelope XSD and the ESB XSD (e.g. a CommonMessageHeader.xsd) - to the set of XSD's used for validation. + to the set of XSDs used for validation. @@ -10980,7 +10768,7 @@ - Pipe that validates the input message against a XML Schema. + Pipe that validates the input message against an XML Schema. @@ -11311,12 +11099,12 @@ - + - + @@ -11342,7 +11130,7 @@ - Key of session variable to store auto detected soapNamespace Default: If configured as Pipeline Input Wrapper or PipeLine Output Wrapper: soapNamespace + Key of session variable to store auto-detected soapNamespace Default: If configured as Pipeline Input Wrapper or PipeLine Output Wrapper: soapNamespace @@ -11420,6 +11208,11 @@ If true, the password is sent digested; Otherwise it is sent in clear text Default: true + + + For direction=<code>wrap</code> only: When false, adds an XML declaration to the output message. Default: true + + The functional name of this pipe. Can be referenced by the <code>path</code> attribute of a PipeForward. @@ -11452,7 +11245,7 @@ - + @@ -11506,7 +11299,7 @@ - + @@ -11865,20 +11658,16 @@ - - - - - + @@ -11900,10 +11689,10 @@ - + - + @@ -11955,805 +11744,130 @@ - - - - - - - - - - - - - - - - - - - + - + - Manager that decides the handlers based on the content of a field in the specified - position in a record. The fields in the record are separated by a separator. - The value of the specified field is taken as key in the flow-table. + Transforms between ascii-ADIOS and an XML representation of ADIOS. + + <p> + Sample xml:<br/> + <pre><code> + &lt;adios rekenbox="L76HB150"&gt; + &lt;rubriek naam="BER_VERZ_CD" waarde="COMBIFLEX_BELEGGING" /&gt; + &lt;rubriek naam="INBR_CD" waarde="NIEUWE_VERZEKERING" /&gt; + &lt;rubriek naam="PENS_DT_BEP_CD" waarde="DT_UIT_PENS_LFT" /&gt; + &lt;rubriek nummer="313" naam="AS_OPSL_PRD_TRM_PRM" index="3" recordnr="74" record="VUT_VERZEKERING" waarde="52.34" /&gt; + ... + &lt;/adios&gt; + </code></pre> + <br/> + For input, a 'naam' or a 'nummer'-attribute must be specified. If both are specified, their match is checked. + On output, 'nummer', 'naam' and 'waarde'-attributes are always present in each rubriek-element. + Where applicable 'index', 'recordnr', 'record' and 'recordindex' are present, too. + If sub-records exist, they are present with a 'sub' prefix to all attributes. + </p> - - + + - + - Manager that decides the handlers based on the content of a field in the specified - position in a record. The fields in the record are of a fixed length. - The data beween the start position and end position is taken as key in the flow-table. + Returns the amount of pages of a PDF file. - - + + - - - - - - - - - - - position of field that identifies the recordtype (position of first field is 1) - - - - - separator that separates the fields in the record - - - - - - - - - - - - - - - - - - - - - Name of the manager - - - - - This manager is the initial manager, i.e. to be used for the first record Default: false - - - - - - - - - - - - - - Start position of the field in the record that identifies the recordtype (first character is 0) Default: 0 - - - - - If endposition &gt;= 0 then this field contains the endPosition of the recordtype field in the record; All characters beyond this position are ignored. Else, if endPosition &lt; 0 then it depends on the length of the recordkey in the flow Default: -1 - - - - - - - - - - - - - - - - - - - - - - - + - IReaderFactory that provides a reader that reads Delphi records containing Strings. + Pipe to manage the ApiPrincipal handling - - + + - + - Basic InputStreamReaderFactory. + Extension to SoapWrapperPipe for API Management. + <p> + <b>Configuration </b><i>(where deviating from SoapWrapperPipe)</i><b>:</b> + <table border="1"> + <tr><th>attributes</th><th>description</th><th>default</th></tr> + <tr><td>soapHeaderSessionKey</td><td>if direction=<code>wrap</code>: </td><td>soapHeader</td></tr> + <tr><td>soapHeaderStyleSheet</td><td>if direction=<code>wrap</code>: </td><td>/xml/xsl/api/soapHeader.xsl</td></tr> + </table> + </p><p> + <b>/xml/xsl/api/soapHeader.xsl:</b> + <table border="1"> + <tr><th>element</th><th>level</th><th>value</th></tr> + <tr><td>MessageHeader</td><td>0</td><td><code>MessageHeader</code> is only created when $conversationId is filled (otherwise skipped)</td></tr> + <tr><td>&nbsp;</td><td>&nbsp;</td><td>xmlns=$namespace</td></tr> + <tr><td>From</td><td>1</td><td><code>From</code> is only created when $from_in is filled (otherwise skipped) and it's created with the value of $from_out</td></tr> + <tr><td>HeaderFields</td><td>1</td><td>&nbsp;</td></tr> + <tr><td>ConversationId</td><td>2</td><td>$conversationId</td></tr> + </table> + <b>Parameters:</b> + <table border="1"> + <tr><th>name</th><th>default</th></tr> + <tr><td>namespace</td><td>"http://api.nn.nl/MessageHeader"</td></tr> + <tr><td>from_in</td><td>if applicable, copied from the original (received) SOAP Header</td></tr> + <tr><td>from_out</td><td>property 'instance.name'</td></tr> + <tr><td>conversationId</td><td>if applicable, copied from the original (received) SOAP Header</td></tr> + </table> + </p> - - + + - - - - - - - - - - separator placed between each string read Default: | - - - - - the maximum length of each string. each string is preceded by a one byte length indication. Default: 50 - - - - - the number of strings read for each record. 0 means file consists of one logical record Default: 0 - - - - - replacement character, used when separator is found in string read Default: _ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - Translate a record using an outputFields description. - - - The outputFields description can contain the following functions: + Extension to WsdlXmlValidator for API Management. + The SOAP header can only contain the following schema (or it's empty): <table border="1"> - <tr><td>string(value)</td><td>inserts the value between the braces</td><td>string( Dit wordt geinsert inclusief spaties ervoor en erna. )</td></tr> - <tr><td>align(value,size,align,fillchar)</td><td>inserts the value aligned</td><td>align(test~10~left~ )</td></tr> - <tr><td>fill(size,fillchar)</td><td>insert size fillchars</td><td>fill(2,0)</td></tr> - <tr><td>now(outformat)</td><td>inserts the current date</td><td>now(dd MMM yyyy)</td></tr> - <tr><td>incopy(fieldnr)</td><td>simply inserts the value of the field</td><td>incopy(2)</td></tr> - <tr><td>substr(fieldnr,startindex,endindex)</td><td>insert part of the value of the field</td><td>substr(2,0,8)</td></tr> - <tr><td>lookup(fieldnr,orgvval=newval,...)</td><td>replace original value using lookup table</td><td>lookup(3,Debit=+,Credit=-)</td></tr> - <tr><td>indate(fieldnr,informat,outformat)</td><td>inserts an input datefield using a different format</td><td>indate(2~MMddYY~dd MMM yyyy)</td></tr> - <tr><td>inalign(fieldnr,size,align,fillchar)</td><td>inserts an input field</td><td>inalign(3~5~left~0)</td></tr> - <tr><td>if(fieldnr,comparator,compareval)</td><td>only output the next fields if condition is true. Comparator is EQ (is equal to), NE (is not equal to), SW (starts with) or NS (not starts with). Use "{..|..|..}" for multiple compareValues</td><td>if(1,eq,3)</td></tr> - <tr><td>elseif(fieldnr,comparator,compareval)</td><td>only output the next fields if condition is true. Comparator is EQ, NE, SW or NS</td><td>elseif(1,ne,4)</td></tr> - <tr><td>endif()</td><td>endmarker for if</td><td>endif()</td></tr> + <tr><th>element</th><th>level</th><th>mandatory</th></tr> + <tr><td>MessageHeader</td><td>0</td><td>yes</td></tr> + <tr><td>xmlns="http://api.nn.nl/MessageHeader"</td><td>&nbsp;</td><td>yes</td></tr> + <tr><td>From</td><td>1</td><td>no</td></tr> + <tr><td>HeaderFields</td><td>1</td><td>yes</td></tr> + <tr><td>ConversationId</td><td>2</td><td>yes</td></tr> </table> - - + + - + - Translate a record into XML, then send it using a sender. + Pipe that performs base64 encoding and decoding. - - - - - - - - - Encapsulates a record in XML, optionally translates it using XSLT or XPath. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - semicolon separated list of output record field specifications (see table below) - - - - - optional separator to add between the fields - - - - - - - - - - - - - - - - - comma separated list of numbers of those fields that are compared with the previous record to determine if a prefix must be written. if any of these fields is not equal in both records, the record types are assumed to be different - - - - - Name of the recordhandler - - - - - Comma separated specification of field lengths. if neither this attribute nor <code>inputSeparator</code> is specified then the entire record is parsed - - - - - Separator that separates the fields in the input record. If neither this attribute nor <code>inputFields</code> is specified then the entire record is parsed - - - - - If set <code>true</code>, trailing spaces are removed from each field Default: false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - comma separated string with tagnames for the individual input fields (related using there positions). if you leave a tagname empty, the field is not xml-ized - - - - - Root tag for the generated xml document that will be send to the Sender Default: record - - - - - Name of stylesheet to transform an individual record - - - - - Alternatively: xpath-expression to create stylesheet from - - - - - Namespace defintions for xpathExpression. Must be in the form of a comma or space separated list of <code>prefix=namespaceuri</code>-definitions. One entry can be without a prefix, that will define the default namespace. - - - - - Only valid for <code>xpathExpression</code> Default: text - - - - - - - - Force the transformer generated from the xpath-expression to omit the xml declaration Default: true - - - - - String which ends the record and must be ignored - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ResultHandler that writes the transformed record to a BLOB. - - - - - - - - - - - - ResultHandler that writes the transformed record to a CLOB. - - - - - - - - - - - - Resulthandler that writes the transformed record to a file. - - - - - - - - - - - - Resulthandler that writes the transformed record to a String, that is passed to the next Pipe literally. - - - - - - - - - - - - ResultHandler that collects a number of records and sends them together to a sender. - - - - - - - - - - - - - - - - - - - - Column that contains the BLOB to be updated Default: 1 - - - - - controls whether blobdata is stored compressed in the database Default: true - - - - - Charset that is used to read and write BLOBs. This assumes the blob contains character data. - If blobCharset and blobSmartGet are not set, BLOBs are returned as bytes. Before version 7.6, blobs were base64 encoded after being read to accommodate for the fact that senders need to return a String. This is no longer the case - - - - - - - - - - - - - - - - The functional name of the object. - - - - - if set <code>true</code>, this resulthandler is the default for all flows that do not have a handler specified Default: false - - - - - When set <code>true</code>(default), every group of records, as indicated by RecordHandler.newRecordType is handled as a block. Default: true - - - - - - - - - The SQL query text - - - - - JNDI name of datasource to be used, can be configured via jmsRealm, too Default: jdbc.datasource.default - - - - - loads JNDI (and other) properties from a JmsRealm - - - - - - - - - - - string that is written before any data of results is written Default: &lt;document name=&quot;#name#&quot;&gt; - - - - - string that is written after all data of results is written Default: &lt;/document&gt; - - - - - string that is written before the start of each logical block, as defined in the flow Default: &lt;#name#&gt; - - - - - string that is written after the end of each logical block, as defined in the flow Default: &lt;/#name#&gt; - - - - - string that is replaced by name of block or name of stream in above strings Default: #name# - - - - - - - - - - - - - - - - Column that contains the CLOB to be updated Default: 1 - - - - - - - - - - - - - - - - Directory in which the resultfile must be stored - - - - - Directory to which the created file must be moved after finalization (is optional) - - - - - Name of the file is created using the messageformat. Params: 1=inputfilename, 2=extension of file, 3=current date - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Transforms between ascii-ADIOS and an XML representation of ADIOS. - - <p> - Sample xml:<br/> - <pre><code> - &lt;adios rekenbox="L76HB150"&gt; - &lt;rubriek naam="BER_VERZ_CD" waarde="COMBIFLEX_BELEGGING" /&gt; - &lt;rubriek naam="INBR_CD" waarde="NIEUWE_VERZEKERING" /&gt; - &lt;rubriek naam="PENS_DT_BEP_CD" waarde="DT_UIT_PENS_LFT" /&gt; - &lt;rubriek nummer="313" naam="AS_OPSL_PRD_TRM_PRM" index="3" recordnr="74" record="VUT_VERZEKERING" waarde="52.34" /&gt; - ... - &lt;/adios&gt; - </code></pre> - <br/> - For input, a 'naam' or a 'nummer'-attribute must be specified. If both are specified, their match is checked. - On output, 'nummer', 'naam' and 'waarde'-attributes are always present in each rubriek-element. - Where applicable 'index', 'recordnr', 'record' and 'recordindex' are present, too. - If sub-records exist, they are present with a 'sub' prefix to all attributes. - </p> - - - - - - - - - - - - Returns the amount of pages of a PDF file. - - - - - - - - - - - - Pipe to manage the ApiPrincipal handling - - - - - - - - - - - - Extension to SoapWrapperPipe for API Management. - <p> - <b>Configuration </b><i>(where deviating from SoapWrapperPipe)</i><b>:</b> - <table border="1"> - <tr><th>attributes</th><th>description</th><th>default</th></tr> - <tr><td>soapHeaderSessionKey</td><td>if direction=<code>wrap</code>: </td><td>soapHeader</td></tr> - <tr><td>soapHeaderStyleSheet</td><td>if direction=<code>wrap</code>: </td><td>/xml/xsl/api/soapHeader.xsl</td></tr> - </table> - </p><p> - <b>/xml/xsl/api/soapHeader.xsl:</b> - <table border="1"> - <tr><th>element</th><th>level</th><th>value</th></tr> - <tr><td>MessageHeader</td><td>0</td><td><code>MessageHeader</code> is only created when $conversationId is filled (otherwise skipped)</td></tr> - <tr><td>&nbsp;</td><td>&nbsp;</td><td>xmlns=$namespace</td></tr> - <tr><td>From</td><td>1</td><td><code>From</code> is only created when $from_in is filled (otherwise skipped) and it's created with the value of $from_out</td></tr> - <tr><td>HeaderFields</td><td>1</td><td>&nbsp;</td></tr> - <tr><td>ConversationId</td><td>2</td><td>$conversationId</td></tr> - </table> - <b>Parameters:</b> - <table border="1"> - <tr><th>name</th><th>default</th></tr> - <tr><td>namespace</td><td>"http://api.nn.nl/MessageHeader"</td></tr> - <tr><td>from_in</td><td>if applicable, copied from the original (received) SOAP Header</td></tr> - <tr><td>from_out</td><td>property 'instance.name'</td></tr> - <tr><td>conversationId</td><td>if applicable, copied from the original (received) SOAP Header</td></tr> - </table> - </p> - - - - - - - - - - - - Extension to WsdlXmlValidator for API Management. - - The SOAP header can only contain the following schema (or it's empty): - <table border="1"> - <tr><th>element</th><th>level</th><th>mandatory</th></tr> - <tr><td>MessageHeader</td><td>0</td><td>yes</td></tr> - <tr><td>xmlns="http://api.nn.nl/MessageHeader"</td><td>&nbsp;</td><td>yes</td></tr> - <tr><td>From</td><td>1</td><td>no</td></tr> - <tr><td>HeaderFields</td><td>1</td><td>yes</td></tr> - <tr><td>ConversationId</td><td>2</td><td>yes</td></tr> - </table> - - - - - - - - - - - - Pipe that performs base64 encoding and decoding. - - - - - - - - - - - - Pipe for transforming a (batch)file with records. Records in the file must be separated - with new line characters. - You can use the &lt;child&gt; tag to register RecordHandlers, RecordHandlerManagers, ResultHandlers - and RecordHandlingFlow elements. This is deprecated, however. Since 4.7 one should use &lt;manager&gt;, - &lt;recordHandler&gt;, &lt;resultHandler&gt; and &lt;flow&gt; - - For files containing only a single type of lines, a simpler configuration without managers and flows - can be specified. A single recordHandler with key="*" and (optional) a single resultHandler need to be specified. - Each line will be handled by this recordHandler and resultHandler. - - - - - + + @@ -12772,40 +11886,39 @@ - Output bytes as specified by the input XML. - + Output bytes as specified by the input XML. + Actions are taken on every field tag found in the input XML. Every field tag should have a type attribute that specifies the type of conversion that needs to be done on the string specified by the value attribute. A value attribute also needs to be present - for every field tag. Currently two types of conversion are supported: - + for every field tag. Currently, two types of conversion are supported: + <ul> <li><code>GetBytesFromString</code>, a conversion from string to bytes as specified by java.lang.String.getBytes(String charsetName)</li> <li><code>PackedDecimal</code>, a conversion from string to Packed-decimal</li> </ul> - + An additional charset attribute is needed for a GetBytesFromString conversion. An input XML that would encode the string &quot; TEST 1234 &quot; into EBCDIC format would look like: - + <pre> &lt;fields&gt; &lt;field type=&quot;GetBytesFromString&quot; value=&quot; TEST 1234 &quot; charset=&quot;Cp037&quot;/&gt; &lt;/fields&gt; </pre> - + The Packed-decimal conversion has been implemented according to information found in the following resources: - + <ul> <li>A description as found at <a href="http://www.simotime.com/datapk01.htm">http://www.simotime.com/datapk01.htm</a></li> <li>AS400PackedDecimal.java from jtopen_6_1_source.zip downloaded at <a href="http://jt400.sourceforge.net/">http://jt400.sourceforge.net/</a></li> - <li>The WebSphere Studio COBOL for Windows Programming Guide from <a href="http://www-1.ibm.com/support/docview.wss?uid=swg27005151">http://www-1.ibm.com/support/docview.wss?uid=swg27005151</a></li> </ul> - + Some examples: - + <ul> <li>The string +12345 will be translated to three bytes with the following hexadecimal representation: 12 34 5C</li> <li>The string -12345 will be translated to three bytes with the following hexadecimal representation: 12 34 5D</li> @@ -12813,12 +11926,12 @@ <li>The string 1234 will be translated to three bytes with the following hexadecimal representation: 01 23 4F</li> </ul> - The Packed-decimal is prefixed with zero's when the specified size is bigger + The Packed-decimal is prefixed with zeroes when the specified size is bigger than the number of decimals. An exception is thrown when the specified size is smaller than the number of decimals. An input XML that would generate a number of Packed-decimals could look like: - + <pre> &lt;fields&gt; &lt;field type=&quot;PackedDecimal&quot; value=&quot;+12345&quot; size=&quot;16&quot;/&gt; @@ -12869,18 +11982,6 @@ - - - Pipe for deleting files. - - - - - - - - - Pipe that iterates over the lines in a CLOB. @@ -12909,7 +12010,7 @@ - Pipe that compares lexicographically two strings. + Pipe that lexicographically compares two strings, that must NOT be empty. @@ -12931,22 +12032,10 @@ - - - Perform the call to a CoolGen proxy with pre- and post transformations. - - - - - - - - - Selects an exitState, based on the number of received messages by this pipe. - + The exitState is the difference (subtraction) between the <code>divisor</code> and the remainder of [number of received messages] modulus <code>divisor</code>. This will always be an integer between 1 and <code>divisor</code>, inclusive. @@ -12980,7 +12069,7 @@ <pre><code> &lt;pipe name="Read issuer" - className="nl.nn.adapterframework.pipes.FilePipe" + className="org.frankframework.pipes.FilePipe" actions="read" fileName="dir/issuer.cer" preserveInput="true" @@ -12991,7 +12080,7 @@ &lt;/pipe&gt; &lt;pipe name="Read CRL" - className="nl.nn.adapterframework.pipes.FilePipe" + className="org.frankframework.pipes.FilePipe" actions="read" fileName="dir/CRL.crl" outputType="stream" @@ -13000,7 +12089,7 @@ &lt;/pipe&gt; &lt;pipe name="Transform CRL" - className="nl.nn.adapterframework.pipes.CrlPipe" + className="org.frankframework.pipes.CrlPipe" issuerSessionKey="issuer" &gt; &lt;forward name="success" path="EXIT" /&gt; @@ -13056,10 +12145,10 @@ Pipe that performs domain transforming on the basis of a database table. - Every string which equals "%![DT{<code>label</code>,<code>valueIn</code>,<code>type</code>}]" will be replaced by <code>valueOut</code>. - + Every string which equals "%![DT{<code>label</code>,<code>valueIn</code>,<code>type</code>}]" will be replaced by <code>valueOut</code>. + The field <code>type</code>, which is optional, indicates the format of <code>valueIn</code>. Currently the following types are supported: - + <ul> <li><code>string</code> (default): the methode setString() is used</li> <li><code>number</code>: the method setDouble() is used </li> @@ -13088,7 +12177,7 @@ XmlValidator that will automatically add the SOAP envelope XSD and the ESB XSD (e.g. a CommonMessageHeader.xsd) - to the set of XSD's used for validation. + to the set of XSDs used for validation. @@ -13438,18 +12527,6 @@ - - - Returns the LTPA token associated with the session. - - - - - - - - - Returns the name of the user executing the request. @@ -13540,8 +12617,7 @@ Selects an exitState, based on if the input is a XML string. - - The input is a XML string if it, after removing leading white-space characters, starts with '&lt;'. + The input is an XML string if it, after removing leading white-space characters, starts with '&lt;'. @@ -13614,6 +12690,18 @@ + + + Creates a JWT with a shared secret using the HmacSHA256 algorithm. + + + + + + + + + Transforms between ascii and an XML representation. @@ -13782,6 +12870,18 @@ + + + Pipe that performs obfuscation on a message, using the tibcrypt library. + + + + + + + + + <p>Performs various PGP (Pretty Good Privacy) actions such as Encrypt, Sign, Decrypt, Verify.</p> @@ -13924,7 +13024,8 @@ - Replaces all occurrences of one string with another. + Replaces all occurrences of one string with another. + Optionally strips or replaces XML non-printable characters. @@ -13949,6 +13050,11 @@ + + Uses the (old) SMB 1 protocol. + <br/> + Only supports NTLM authentication. + @@ -14106,47 +13212,19 @@ - - - - - - - - - Stream an input stream to an output stream. - - - - - - - - - - - - Pipe for transforming a stream with records. Records in the stream must be separated with new line characters. - - For file containing only a single type of lines, a simpler configuration without managers and flows - can be specified. A single recordHandler with key="*" and (optional) a single resultHandler need to be specified. - Each line will be handled by this recordHandler and resultHandler. - - - - + - + - IteratingPipe that has Strings as items. + Stream an input stream to an output stream. - + @@ -14166,8 +13244,8 @@ - Breaks up the text input in blocks of a maximum length. - By default the maximum block length is 160 characters, to enable them to be send as SMS messages. + Breaks up the text input in blocks of a maximum length. + By default, the maximum block length is 160 characters, to enable them to be sent as SMS messages. @@ -14309,7 +13387,7 @@ - Pipe that validates the input message against a XML Schema. + Pipe that validates the input message against an XML Schema. @@ -14386,7 +13464,7 @@ - + @@ -14425,7 +13503,7 @@ - + @@ -14441,7 +13519,7 @@ - + @@ -14454,7 +13532,7 @@ - + @@ -14483,99 +13561,12 @@ - - - - - - If true, then this pipe can provide an OutputStream to the previous pipe, to write its output to. Can be used to switch this streaming off for debugging purposes Default: set by appconstant streaming.auto - - - - - - - - - - - - - - - - Directory in which the transformed file(s) is stored - - - - - Directory to which the inputfile is moved in case an error occurs - - - - - Number of copies held of a file with the same name. Backup files have a dot and a number suffixed to their name. If set to 0, no backups will be kept. Default: 5 - - - - - If set <code>true</code>, the destination file will be deleted if it already exists Default: false - - - - - If set <code>true</code>, the file processed will deleted after being processed, and not stored Default: false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - If set <code>true</code> the original block is stored under the session key <code>originalBlock</code>. Default: false - - - - - If set to <code>false</code>, the inputstream is not closed after it has been used. Default: true - - - - - Characterset used for reading file or inputstream" Default: UTF-8 - - - - - - + @@ -14636,7 +13627,7 @@ - + @@ -14782,7 +13773,7 @@ If set, the pipe returns a message from a file, instead of doing the regular process - + If not empty, a TimeoutException is thrown when the result equals this value (for testing purposes only) @@ -14795,7 +13786,6 @@ - @@ -14834,7 +13824,7 @@ - Named parameters will be auto detected by default. Every string in the query which equals <code>?{paramname}</code> will be replaced by the value of the corresponding parameter. The parameters don't need to be in the correct order and unused parameters are skipped. + Named parameters will be auto-detected by default. Every string in the query which equals <code>?{paramname}</code> will be replaced by the value of the corresponding parameter. The parameters don't need to be in the correct order and unused parameters are skipped. @@ -14877,11 +13867,6 @@ - - - - - @@ -14971,12 +13956,12 @@ - + - + @@ -14995,77 +13980,22 @@ - - - - - - - - - - - files that match this pattern will be deleted. parameters of the pipe are applied to this pattern. if this attribute is not set, the input of the pipe is interpreted as the file to be removed - - - - - session key that contains the pattern of files to be deleted, only used if filePattern is not set - - - - - time in milliseconds after last modification that must have passed at least before a file will be deleted (set to negative value to disable) Default: 0 - - - - - when <code>true</code>, files in subdirectories will be deleted, too Default: false - - - - - when <code>true</code>, empty subdirectories will be deleted, too Default: false - - - - - filter of files to delete. if not set and a directory is specified, all files in the directory are interpreted to be deleted - - - - - filter of files to be excluded for deletion - - - - - Minimal age of file <i>in milliseconds</i>, to avoid deleting a file while it is still being written (only used when wildcard is set) (set to 0 to disable) Default: 1000 - - - - - - + - - - - - - + + - + @@ -15081,7 +14011,7 @@ - + @@ -15122,49 +14052,12 @@ - - - - - - - - - - - CICS userId of account perform operation - - - - - Password corresponding with userId - - - - - Optional URL of XSLT-stylesheet to apply to message before calling proxy - - - - - Optional URL of XSLT-stylesheet to apply to result of proxy - - - - - Optional URL of XML-Schema of proxy input message. If specified it is used to validate the input message - - - - - - - + @@ -15180,7 +14073,7 @@ - + @@ -15196,12 +14089,12 @@ - + - name of the sessionkey that holds a stream to the certificate of the issuer who signed the crl. the steam is closed after reading + Name of the sessionKey that holds the certificate of the issuer who signed the CRL. @@ -15212,7 +14105,7 @@ - + @@ -15246,12 +14139,12 @@ - + - + @@ -15267,7 +14160,7 @@ - + @@ -15288,7 +14181,7 @@ - + @@ -15319,13 +14212,13 @@ - - + + - + @@ -15340,7 +14233,7 @@ - + @@ -15356,12 +14249,12 @@ - + - when <code>true</code>, a piperunexception is thrown. otherwise the output is only logged as an error (and no rollback is performed). Default: true + When <code>true</code>, a PipeRunException is thrown. Otherwise, the output is only logged as an error (and no rollback is performed). Default: true @@ -15372,7 +14265,7 @@ - + @@ -15424,7 +14317,7 @@ - + @@ -15445,7 +14338,7 @@ - + @@ -15484,7 +14377,7 @@ - + @@ -15505,20 +14398,26 @@ - - - - - - - + + + + + + name of forward returned if principal has not been found + + + + + + + - + @@ -15560,7 +14459,7 @@ - + @@ -15602,7 +14501,7 @@ - + @@ -15615,7 +14514,7 @@ - + @@ -15636,12 +14535,12 @@ - + - the j2ee role to check. + the j2ee role(s) to check, if the user in multiple roles, the first specified role will be matched. @@ -15652,7 +14551,7 @@ - + @@ -15678,7 +14577,7 @@ - + @@ -15686,12 +14585,12 @@ Direction of the transformation. Default: JSON2XML - + - When direction is JSON2XML, it wraps a root element around the converted message. + When direction is JSON2XML, it wraps a root element around the converted message. When direction is XML2JSON, it includes the name of the root element as a key in the converted message. Default: TRUE when JSON2XML and FALSE when XML2JSON @@ -15708,12 +14607,12 @@ - + - + @@ -15723,7 +14622,7 @@ - Namespace defintions for xpathExpression. Must be in the form of a comma or space separated list of <code>prefix=namespaceuri</code>-definitions Default: j=http://www.w3.org/2013/XSL/json + Namespace definitions for xpathExpression. Must be in the form of a comma or space separated list of <code>prefix=namespaceuri</code>-definitions Default: j=http://www.w3.org/2013/XSL/json @@ -15795,15 +14694,15 @@ - 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 + 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 - + - + @@ -15878,18 +14777,44 @@ - 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 + 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 - + + + + + + + + + + + Auth Alias for the SharedSecret to be used when signing the JWT (using the HmacSHA256 algorithm) + + + + + Shared secret to be used when signing the JWT (using the HmacSHA256 algorithm) + + + + + JWT expirationTime in seconds, 0 to disable Default: 600 + + + + + + - + @@ -15910,7 +14835,7 @@ - + @@ -15949,7 +14874,7 @@ - + @@ -15979,7 +14904,7 @@ - the larva timeout Default: 10000 + the larva timeout in milliseconds Default: 10000 @@ -15990,7 +14915,7 @@ - + @@ -16069,7 +14994,7 @@ - + @@ -16095,7 +15020,7 @@ - + @@ -16139,7 +15064,7 @@ - If set <code>true</code>, for actions create, move, copy or rename, the destination file is overwritten if it already exists Default: false + If set <code>true</code>, for actions create, write, move, copy or rename, the destination file is overwritten if it already exists Default: false @@ -16198,17 +15123,22 @@ - + - + - If set <code>true</code> the ThreadContext parameters will be exported from the current PipeLine up in the call tree. Default: false + If set to <code>true</code> the ThreadContext parameters will be exported from the current PipeLine up in the call tree. Default: false + + + + + If set {@code true} the pipe will never forward to the {@code ExceptionForward} even if an error occurred during execution. Default: false @@ -16219,12 +15149,31 @@ - + + + + + + + + + + Default: OBFUSCATE + + + + + + + + + + - + @@ -16266,12 +15215,12 @@ - + - + @@ -16327,7 +15276,7 @@ - + @@ -16345,7 +15294,7 @@ - + @@ -16358,6 +15307,34 @@ session key that contains the document that the attachments will be attached to. Only used when action is set to 'combine' Default: defaultMainDocumentSessionKey + + + The session key used to store the main conversion result document. Only to be used when action is set to 'convert'. Default: documents + + + + + The session-key in which result files are stored when documents are converted to PDF. + + <p> + Conversion result files are stored as messages in the session, under keys numbered based + on the value set here. If #isSaveSeparate() is {@code false} then only the main + document is stored in the session, if it is {@code true} then each attachment is stored + separately. + </p> + <p> + For example, if a file is converted that has 2 attachments and #setSaveSeparate(boolean) + is set to {@code true} then there will be the following 3 session keys (assuming the default value + is unchanged): + <ol> + <li>{@code pdfConversionResultFiles1}</li> + <li>{@code pdfConversionResultFiles2}</li> + <li>{@code pdfConversionResultFiles3}</li> + </ol> + Each session key will contain a FileMessage referencing the contents of that PDF. + </p> Default: pdfConversionResultFiles + + session key that contains the filename to be attached. Only used when the action is set to 'combine' Default: defaultFileNameToAttachSessionKey @@ -16402,7 +15379,7 @@ - + @@ -16423,7 +15400,7 @@ - + @@ -16468,7 +15445,7 @@ - + @@ -16532,7 +15509,7 @@ - + @@ -16576,7 +15553,7 @@ - + @@ -16592,27 +15569,42 @@ - + - Sets the string that is searched for. + Sets the string that is searched for. Newlines can be represented + by the #setLineSeparatorSymbol(String). - Sets the string that will replace each of the occurrences of the find-string. + Sets the string that will replace each of the occurrences of the find-string. Newlines can be represented + * by the #setLineSeparatorSymbol(String). - sets the string the representation in find and replace of the line separator + sets the string that will represent the line-separator in the #setFind(String) and #setReplace(String) strings. - Replace all non XML chars (not in the <a href="http://www.w3.org/TR/2006/REC-xml-20060816/#NT-Char">character range as specified by the XML specification</a>) with replaceNonValidXmlCharacters Default: false + Replace all characters that are non-printable according to the XML specification with + the value specified in #setReplaceNonXmlChar(String). + <p> + <b>NB:</b> This will only replace or remove characters considered non-printable. This + will not check if a given character is valid in the particular way it is used. Thus it will + not remove or replace, for instance, a single {@code '&'} character. + </p> + <p> + See also: + <ul> + <li>XmlEncodingUtils replaceNonValidXmlCharacters</li> + <li><a href="https://www.w3.org/TR/xml/#charsets">Character ranges specified in the XML Specification</a></li> + </ul> + </p> Default: false @@ -16633,40 +15625,45 @@ - + - + - Shared folder name in the samba server + The destination, aka smb://xxx/yyy share - the smb share username + The SMB share username - the smb share password + The SMB share password - alias used to obtain credentials for the smb share + Alias used to obtain credentials for the SMB share - + - in case the user account is bound to a domain + 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 @@ -16679,11 +15676,19 @@ - + - - + + + Hostname of the SMB share. + + + + + Port to connect to. Default: 445 + + Type of the authentication either 'NTLM' or 'SPNEGO'. @@ -16710,19 +15715,25 @@ - domain, in case the user account is bound to a domain + NTLM only: logon/authentication domain, in case the user account is bound to a domain such as Active Directory. + + + + + May not contain '\\' characters. The destination share, aka smb://xxx/yyy share. - - Key Distribution Center, typically hosted on a domain controller. + SPNEGO only: + Key Distribution Center, typically hosted on a domain controller. Stored in <code>java.security.krb5.kdc</code> - Kerberos Realm, case sensitive. Typically upper case and the same as the domain name. + SPNEGO only: + Kerberos Realm, case sensitive. Typically upper case and the same as the domain name. An Active Directory domain acts as a Kerberos Realm. Stored in <code>java.security.krb5.realm</code> @@ -16735,12 +15746,12 @@ - + - + @@ -16766,7 +15777,7 @@ - + @@ -16779,7 +15790,7 @@ - + @@ -16833,7 +15844,7 @@ - + @@ -16855,7 +15866,7 @@ - + @@ -16932,12 +15943,12 @@ - + - + @@ -16958,7 +15969,7 @@ - + @@ -16984,7 +15995,7 @@ - + @@ -17035,7 +16046,7 @@ - + @@ -17062,12 +16073,12 @@ - + - + @@ -17083,12 +16094,12 @@ - + - + @@ -17107,7 +16118,7 @@ - + @@ -17158,7 +16169,7 @@ - + @@ -17174,7 +16185,7 @@ - + @@ -17195,7 +16206,7 @@ - + @@ -17246,7 +16257,7 @@ - + @@ -17276,7 +16287,7 @@ - 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 + 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 @@ -17302,7 +16313,7 @@ - + @@ -17338,7 +16349,7 @@ - + @@ -17382,7 +16393,7 @@ - + @@ -17418,24 +16429,6 @@ - - - - - - - - - - - - - - - - - - @@ -17458,7 +16451,7 @@ 1. This method first stores all database jobs that can are found in the Quartz Scheduler in a Map. 2. It then loops through all records found in the database. - 3. If the job is found, remove it from the Map and compares it with the already existing scheduled job. + 3. If the job is found, remove it from the Map and compares it with the already existing scheduled job. Only if they differ, it overwrites the current job. 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. @@ -17495,7 +16488,7 @@ - + @@ -17545,7 +16538,7 @@ - + @@ -17561,7 +16554,7 @@ - + @@ -17574,20 +16567,10 @@ - - - - - - - - - - - + @@ -17613,7 +16596,7 @@ - + @@ -17644,17 +16627,17 @@ - + - + - + @@ -17664,7 +16647,7 @@ - message to be send into the pipeline + message to be sent into the pipeline @@ -17678,7 +16661,7 @@ - + @@ -17725,7 +16708,7 @@ - + @@ -17753,7 +16736,7 @@ - + @@ -17791,12 +16774,12 @@ - + - + @@ -17829,7 +16812,7 @@ - + @@ -17862,7 +16845,7 @@ - + @@ -17933,6 +16916,7 @@ + @@ -18039,6 +17023,14 @@ When applied as a JDBC parameter, the method setCharacterStream() or setString() is used + + + Used for StoredProcedure OUT parameters when the database type is a {@code CURSOR} or java.sql.JDBCType#REF_CURSOR. + See also org.frankframework.jdbc.StoredProcedureQuerySender. + <br/> + DEPRECATED: Type LIST can also be used in larva test to Convert a List to an xml-string (&lt;items&gt;&lt;item&gt;...&lt;/item&gt;&lt;item&gt;...&lt;/item&gt;&lt;/items&gt;) + + @@ -18055,6 +17047,7 @@ + @@ -18112,6 +17105,26 @@ + + + + + Automatically determine the type of the outgoing javax.jms.Message based + on the value of Message#isBinary(). + + + + + Create the outgoing message as TextMessage. + + + + + Create the outgoing message as BytesMessage. + + + + @@ -18211,12 +17224,6 @@ - - - - - - @@ -18489,8 +17496,6 @@ - - @@ -18693,8 +17698,8 @@ - If an error occurs (eg. connection is lost) the receiver will be stopped and marked as ERROR - Once every <code>recover.adapters.interval</code> it will be attempted to (re-) start the receiver. + If an error occurs (e.g. connection is lost) the receiver will be stopped and marked as ERROR + Once every <code>recover.adapters.interval</code> it attempts to (re-) start the receiver. @@ -18870,7 +17875,7 @@ - + @@ -18892,12 +17897,18 @@ - + + + + + + + @@ -19172,6 +18183,20 @@ sessionKey to store the SOAP header of the incoming message Default: soapHeader + + + The JMS javax.jms.Message class for the outgoing message. + Currently supported are MessageClass#TEXT for JMS TextMessage, + MessageClass#BYTES for JMS BytesMessage, or MessageClass#AUTO for auto-determination + based on whether the input Message is binary or character. + <p> + Defaults to MessageClass#AUTO, unless the default is overridden in AppConstants with property {@code jms.messageClass.default} + </p> + + + + + Type of the messageing destination. @@ -19393,7 +18418,7 @@ - Named parameters will be auto detected by default. Every string in the query which equals <code>?{paramname}</code> will be replaced by the value of the corresponding parameter. The parameters don't need to be in the correct order and unused parameters are skipped. + Named parameters will be auto-detected by default. Every string in the query which equals <code>?{paramname}</code> will be replaced by the value of the corresponding parameter. The parameters don't need to be in the correct order and unused parameters are skipped. @@ -19484,6 +18509,11 @@ When set larger than 0 and used as a child of an IteratingPipe, then the database calls are made in batches of this size. Only for queryType=other. Default: 0 + + + URL or base of URL to be used + + Parameter that is used to obtain URL; overrides url-attribute. Default: url @@ -19738,7 +18768,13 @@ - Secure socket protocol (such as 'SSL' and 'TLS') to use when a SSLContext object is generated. Default: SSL + Secure socket protocol (such as 'TLSv1.2') to use when a SSLContext object is generated. Default: TLSv1.2 + + + + + Allows you to choose which CipherSuites are used when connecting to an endpoint. Works in tandem with {@code protocol} as the provided Suite may not be valid for the provided Protocol + See the Java Security Standard Algorithm Names Specification for all available options. Note that these may differ depending on the JRE you're using. @@ -19753,12 +18789,12 @@ - value of the subject: header if not specified in message itself + Set the default value of the subject: header, if not specified in message itself - value of the from: header if not specified in message itself + Set the default from: header, if not specified in message itself @@ -19928,7 +18964,7 @@ - If set, the character data in this element is stored under a session key and in the message replaced by a reference to this session key: {sessionkey: + <code>elementToMoveSessionKey</code> + } + If set, the character data in this element is stored under a session key and in the message replaced by a reference to this session key: {sessionKey: + <code>elementToMoveSessionKey</code> + } @@ -19952,7 +18988,11 @@ If set <code>true</code>, compacted messages in the result are restored to their original format (see also #setElementToMove(java.lang.String)) - + + + Collect and aggregate Message size statistics + + when set to <code>true</code> a record is written to the security log when the pipe has finished successfully @@ -20005,7 +19045,7 @@ - Ignore namespaces in the input message which are unknown. If the XSD used has elementFormDefault=unqualified, it is necessary to set this to true. Be aware, however, that + Ignore namespaces in the input message which are unknown. If the XSD used has elementFormDefault=unqualified, it is necessary to set this to true. Be aware, however, that this will inhibit the validator to detect validation failures of namespaceless subelements of the SoapBody. Default: true when <code>schema</code> or <code>noNamespaceSchemaLocation</code> is used, false otherwise diff --git a/src/main/java/org/frankframework/parameters/Parameter.java b/src/main/java/org/frankframework/parameters/Parameter.java index 10c3347..cd86d18 100644 --- a/src/main/java/org/frankframework/parameters/Parameter.java +++ b/src/main/java/org/frankframework/parameters/Parameter.java @@ -120,7 +120,6 @@ public class Parameter implements IConfigurable, IWithParameters { public static final String TYPE_DATE_PATTERN="yyyy-MM-dd"; public static final String TYPE_TIME_PATTERN="HH:mm:ss"; public static final String TYPE_DATETIME_PATTERN="yyyy-MM-dd HH:mm:ss"; - public static final String TYPE_TIMESTAMP_PATTERN= DateFormatUtils.FORMAT_FULL_GENERIC; public static final String FIXEDUID ="0a1b234c--56de7fa8_9012345678b_-9cd0"; @@ -581,7 +580,7 @@ public Object getValue(ParameterValueList alreadyResolvedParameters, Message mes authType = appConstants.getProperty("openforms2bpel.objects-api.auth-type", ""); // "jwt", "basic", "value" authAlias = appConstants.getProperty("openforms2bpel.objects-api.auth-alias", ""); } else { - throw new ParameterException("Parameter ["+getName()+"] unable to resolve ["+strResult+"] to a known api type"); + throw new ParameterException(getName(), "unable to resolve ["+strResult+"] to a known api type"); } CredentialFactory credentialFactory = new CredentialFactory(authAlias); @@ -601,7 +600,7 @@ public Object getValue(ParameterValueList alreadyResolvedParameters, Message mes } else if ("value".equalsIgnoreCase(authType)){ result = secret; } else { - throw new ParameterException("Parameter ["+getName()+"] unknown auth-type ["+authType+"], must be 'jwt', 'basic' or 'value'"); + throw new ParameterException(getName(), "unknown auth-type ["+authType+"], must be 'jwt', 'basic' or 'value'"); } } } else { @@ -622,10 +621,15 @@ public Object getValue(ParameterValueList alreadyResolvedParameters, Message mes } if (result instanceof Message) { //we just need to check if the message is null or not! - if (Message.isNull((Message)result)) { + Message resultMessage = (Message) result; + if (Message.isNull(resultMessage)) { result = null; - } else if (((Message)result).asObject() instanceof String) { //Used by getMinLength and getMaxLength - result = ((Message) result).asObject(); + } else if (resultMessage.isRequestOfType(String.class)) { //Used by getMinLength and getMaxLength + try { + result = resultMessage.asString(); + } catch (IOException ignored) { + // Already checked for String, so this should never happen + } } } if (result != null && !"".equals(result)) { @@ -709,18 +713,17 @@ private Object getValueAsType(Object request, boolean namespaceAware) throws Par Message requestMessage = Message.asMessage(request); Object result = request; try { - Object requestObject = requestMessage.asObject(); switch(getType()) { case NODE: try { if (isRemoveNamespaces()) { requestMessage = XmlUtils.removeNamespaces(requestMessage); } - if(requestObject instanceof Document) { - return ((Document)requestObject).getDocumentElement(); + if(request instanceof Document) { + return ((Document)request).getDocumentElement(); } - if(requestObject instanceof Node) { - return requestObject; + if(request instanceof Node) { + return request; } result = XmlUtils.buildDomDocument(requestMessage.asInputSource(), namespaceAware).getDocumentElement(); final Object finalResult = result; @@ -734,8 +737,8 @@ private Object getValueAsType(Object request, boolean namespaceAware) throws Par if (isRemoveNamespaces()) { requestMessage = XmlUtils.removeNamespaces(requestMessage); } - if(requestObject instanceof Document) { - return requestObject; + if(request instanceof Document) { + return request; } result = XmlUtils.buildDomDocument(requestMessage.asInputSource(), namespaceAware); final Object finalResult = result; @@ -748,8 +751,8 @@ private Object getValueAsType(Object request, boolean namespaceAware) throws Par case DATETIME: case TIMESTAMP: case TIME: { - if (requestObject instanceof Date) { - return requestObject; + if (request instanceof Date) { + return request; } Message finalRequestMessage = requestMessage; LOG.debug("Parameter [{}] converting result [{}] to Date using formatString [{}]", this::getName, () -> finalRequestMessage, this::getFormatString); @@ -762,8 +765,8 @@ private Object getValueAsType(Object request, boolean namespaceAware) throws Par break; } case XMLDATETIME: { - if (requestObject instanceof Date) { - return requestObject; + if (request instanceof Date) { + return request; } Message finalRequestMessage = requestMessage; LOG.debug("Parameter [{}] converting result [{}] from XML dateTime to Date", this::getName, () -> finalRequestMessage); @@ -771,8 +774,8 @@ private Object getValueAsType(Object request, boolean namespaceAware) throws Par break; } case NUMBER: { - if (requestObject instanceof Number) { - return requestObject; + if (request instanceof Number) { + return request; } Message finalRequestMessage = requestMessage; LOG.debug("Parameter [{}] converting result [{}] to number decimalSeparator [{}] groupingSeparator [{}]", this::getName, ()->finalRequestMessage, decimalFormatSymbols::getDecimalSeparator, decimalFormatSymbols::getGroupingSeparator); @@ -786,8 +789,8 @@ private Object getValueAsType(Object request, boolean namespaceAware) throws Par break; } case INTEGER: { - if (requestObject instanceof Integer) { - return requestObject; + if (request instanceof Integer) { + return request; } Message finalRequestMessage = requestMessage; LOG.debug("Parameter [{}] converting result [{}] to integer", this::getName, ()->finalRequestMessage); @@ -799,8 +802,8 @@ private Object getValueAsType(Object request, boolean namespaceAware) throws Par break; } case BOOLEAN: { - if (requestObject instanceof Boolean) { - return requestObject; + if (request instanceof Boolean) { + return request; } Message finalRequestMessage = requestMessage; LOG.debug("Parameter [{}] converting result [{}] to boolean", this::getName, ()->finalRequestMessage); @@ -858,7 +861,7 @@ private String formatPattern(ParameterValueList alreadyResolvedParameters, PipeL } private Object preFormatDateType(Object rawValue, String formatType, String patternFormatString) throws ParameterException { - if (formatType!=null && (formatType.equalsIgnoreCase("date") || formatType.equalsIgnoreCase("time"))) { + if (formatType!=null && ("date".equalsIgnoreCase(formatType) || "time".equalsIgnoreCase(formatType))) { if (rawValue instanceof Date) { return rawValue; } @@ -891,16 +894,22 @@ private Object getValueForFormatting(ParameterValueList alreadyResolvedParameter Object substitutionValue = paramValue == null ? null : paramValue.getValue(); if (substitutionValue == null) { - Message substitutionValueMessage = session.getMessage(name); - if (!substitutionValueMessage.isEmpty()) { - if (substitutionValueMessage.asObject() instanceof Date) { - substitutionValue = preFormatDateType(substitutionValueMessage.asObject(), formatType, formatString); + Object substitutionValueMessage = session.get(name); + if (substitutionValueMessage != null) { + if (substitutionValueMessage instanceof Date) { + substitutionValue = preFormatDateType(substitutionValueMessage, formatType, formatString); } else { - try { - substitutionValue = substitutionValueMessage.asString(); - } catch (IOException e) { - throw new ParameterException(getName(), "Cannot get substitution value", e); + if (substitutionValueMessage instanceof String) { + substitutionValue = substitutionValueMessage; + } else { + try { + Message message = Message.asMessage(substitutionValueMessage); // Do not close object from session here; might be reused later + substitutionValue = message.asString(); + } catch (IOException e) { + throw new ParameterException(getName(), "Cannot get substitution value from session key: " + name, e); + } } + if (substitutionValue == null) throw new ParameterException(getName(), "Cannot get substitution value from session key: " + name); } } } diff --git a/src/main/java/org/frankframework/parameters/Parameter.java-orig b/src/main/java/org/frankframework/parameters/Parameter.java-orig index 7fd783b..56f587d 100644 --- a/src/main/java/org/frankframework/parameters/Parameter.java-orig +++ b/src/main/java/org/frankframework/parameters/Parameter.java-orig @@ -563,10 +563,15 @@ public class Parameter implements IConfigurable, IWithParameters { } if (result instanceof Message) { //we just need to check if the message is null or not! - if (Message.isNull((Message)result)) { + Message resultMessage = (Message) result; + if (Message.isNull(resultMessage)) { result = null; - } else if (((Message)result).asObject() instanceof String) { //Used by getMinLength and getMaxLength - result = ((Message) result).asObject(); + } else if (resultMessage.isRequestOfType(String.class)) { //Used by getMinLength and getMaxLength + try { + result = resultMessage.asString(); + } catch (IOException ignored) { + // Already checked for String, so this should never happen + } } } if (result != null && !"".equals(result)) { @@ -650,18 +655,17 @@ public class Parameter implements IConfigurable, IWithParameters { Message requestMessage = Message.asMessage(request); Object result = request; try { - Object requestObject = requestMessage.asObject(); switch(getType()) { case NODE: try { if (isRemoveNamespaces()) { requestMessage = XmlUtils.removeNamespaces(requestMessage); } - if(requestObject instanceof Document) { - return ((Document)requestObject).getDocumentElement(); + if(request instanceof Document) { + return ((Document)request).getDocumentElement(); } - if(requestObject instanceof Node) { - return requestObject; + if(request instanceof Node) { + return request; } result = XmlUtils.buildDomDocument(requestMessage.asInputSource(), namespaceAware).getDocumentElement(); final Object finalResult = result; @@ -675,8 +679,8 @@ public class Parameter implements IConfigurable, IWithParameters { if (isRemoveNamespaces()) { requestMessage = XmlUtils.removeNamespaces(requestMessage); } - if(requestObject instanceof Document) { - return requestObject; + if(request instanceof Document) { + return request; } result = XmlUtils.buildDomDocument(requestMessage.asInputSource(), namespaceAware); final Object finalResult = result; @@ -689,8 +693,8 @@ public class Parameter implements IConfigurable, IWithParameters { case DATETIME: case TIMESTAMP: case TIME: { - if (requestObject instanceof Date) { - return requestObject; + if (request instanceof Date) { + return request; } Message finalRequestMessage = requestMessage; LOG.debug("Parameter [{}] converting result [{}] to Date using formatString [{}]", this::getName, () -> finalRequestMessage, this::getFormatString); @@ -703,8 +707,8 @@ public class Parameter implements IConfigurable, IWithParameters { break; } case XMLDATETIME: { - if (requestObject instanceof Date) { - return requestObject; + if (request instanceof Date) { + return request; } Message finalRequestMessage = requestMessage; LOG.debug("Parameter [{}] converting result [{}] from XML dateTime to Date", this::getName, () -> finalRequestMessage); @@ -712,8 +716,8 @@ public class Parameter implements IConfigurable, IWithParameters { break; } case NUMBER: { - if (requestObject instanceof Number) { - return requestObject; + if (request instanceof Number) { + return request; } Message finalRequestMessage = requestMessage; LOG.debug("Parameter [{}] converting result [{}] to number decimalSeparator [{}] groupingSeparator [{}]", this::getName, ()->finalRequestMessage, decimalFormatSymbols::getDecimalSeparator, decimalFormatSymbols::getGroupingSeparator); @@ -727,8 +731,8 @@ public class Parameter implements IConfigurable, IWithParameters { break; } case INTEGER: { - if (requestObject instanceof Integer) { - return requestObject; + if (request instanceof Integer) { + return request; } Message finalRequestMessage = requestMessage; LOG.debug("Parameter [{}] converting result [{}] to integer", this::getName, ()->finalRequestMessage); @@ -740,8 +744,8 @@ public class Parameter implements IConfigurable, IWithParameters { break; } case BOOLEAN: { - if (requestObject instanceof Boolean) { - return requestObject; + if (request instanceof Boolean) { + return request; } Message finalRequestMessage = requestMessage; LOG.debug("Parameter [{}] converting result [{}] to boolean", this::getName, ()->finalRequestMessage); @@ -799,7 +803,7 @@ public class Parameter implements IConfigurable, IWithParameters { } private Object preFormatDateType(Object rawValue, String formatType, String patternFormatString) throws ParameterException { - if (formatType!=null && (formatType.equalsIgnoreCase("date") || formatType.equalsIgnoreCase("time"))) { + if (formatType!=null && ("date".equalsIgnoreCase(formatType) || "time".equalsIgnoreCase(formatType))) { if (rawValue instanceof Date) { return rawValue; } @@ -832,16 +836,22 @@ public class Parameter implements IConfigurable, IWithParameters { Object substitutionValue = paramValue == null ? null : paramValue.getValue(); if (substitutionValue == null) { - Message substitutionValueMessage = session.getMessage(name); - if (!substitutionValueMessage.isEmpty()) { - if (substitutionValueMessage.asObject() instanceof Date) { - substitutionValue = preFormatDateType(substitutionValueMessage.asObject(), formatType, formatString); + Object substitutionValueMessage = session.get(name); + if (substitutionValueMessage != null) { + if (substitutionValueMessage instanceof Date) { + substitutionValue = preFormatDateType(substitutionValueMessage, formatType, formatString); } else { - try { - substitutionValue = substitutionValueMessage.asString(); - } catch (IOException e) { - throw new ParameterException(getName(), "Cannot get substitution value", e); + if (substitutionValueMessage instanceof String) { + substitutionValue = substitutionValueMessage; + } else { + try { + Message message = Message.asMessage(substitutionValueMessage); // Do not close object from session here; might be reused later + substitutionValue = message.asString(); + } catch (IOException e) { + throw new ParameterException(getName(), "Cannot get substitution value from session key: " + name, e); + } } + if (substitutionValue == null) throw new ParameterException(getName(), "Cannot get substitution value from session key: " + name); } } } @@ -1124,4 +1134,4 @@ public class Parameter implements IConfigurable, IWithParameters { public void setMode(ParameterMode mode) { this.mode = mode; } -} \ No newline at end of file +} diff --git a/src/main/resources/DeploymentSpecifics.properties b/src/main/resources/DeploymentSpecifics.properties index 2182abd..bd4633b 100644 --- a/src/main/resources/DeploymentSpecifics.properties +++ b/src/main/resources/DeploymentSpecifics.properties @@ -18,6 +18,7 @@ configurations.names=bpel,Objects API,Notifications API classloader.type=DirectoryClassLoader ibistesttool.custom=Custom ibistesttool.directory=/opt/frank/ladybug +ladybug.jdbc.datasource= zaakbrug.zgw.zaken-api.root-url=http://localhost:8000/zaken/api/v1/ zaakbrug.zgw.zaken-api.timeout=20000 diff --git a/src/main/resources/ladybug/DatabaseChangelog_Custom.xml b/src/main/resources/ladybug/DatabaseChangelog_Custom.xml new file mode 100644 index 0000000..ad4c30e --- /dev/null +++ b/src/main/resources/ladybug/DatabaseChangelog_Custom.xml @@ -0,0 +1,17 @@ + + + + + + + Add missing Zaakbrug related Columns + + + + + + \ No newline at end of file