-
Notifications
You must be signed in to change notification settings - Fork 43
Configuration file
Philip Helger edited this page Feb 23, 2023
·
5 revisions
A special XML configuration file must be used to configure the AS2 handling. It contains:
- a reference to the keystore to be used (in element
certificates
) - a reference to a partnership factory (storing the exchange combinations) (in element
partnerships
) - a list of modules that are executed when a message is received (in elements
module
)
Note: Alternatively you can also use a code based configuration. See e.g. https://github.com/phax/as2-lib/blob/master/as2-servlet/src/test/java/com/helger/as2servlet/example/AS2ReceiveXServletHandlerCodeConfig.java for an example.
See page Architecture for the description of the different modules.
Within a configuration file, the macro %home%
is replaced with the parent directory of the configuration file. This replacement happens only when a value starts with %home%
.
Complete example configuration file:
<?xml version="1.0" encoding="utf-8"?>
<openas2>
<!-- [required] The keystore to be used (since v4) -->
<certificates classname="com.helger.as2lib.cert.CertificateFactory"
type="pkcs12"
filename="%home%/server-certs.p12"
password="mypassword" />
<!-- [required] The keystore to be used (prior to v4) -->
<!--
<certificates classname="com.helger.as2lib.cert.PKCS12CertificateFactory"
filename="%home%/server-certs.p12"
password="mypassword" />
-->
<!-- [required] The pro-forma partnership factory -->
<partnerships classname="com.helger.as2servlet.util.AS2ServletPartnershipFactory"
filename="%home%/server-partnerships.xml"
disablebackup="true" />
<!-- [required] the processing queue -->
<processor classname="com.helger.as2lib.processor.DefaultMessageProcessor"
pendingMDN="%home%/pendingMDN"
pendingMDNinfo="%home%/pendinginfoMDN">
<!-- [optional] Store sent MDNs to a file
Note: "charset" attribute was added in v4.1.0
-->
<module classname="com.helger.as2lib.processor.storage.MDNFileModule"
filename="%home%/mdn/$date.uuuu$/$date.MM$/$mdn.msg.sender.as2_id$-$mdn.msg.receiver.as2_id$-$mdn.msg.headers.message-id$"
protocol="as2"
tempdir="%home%/temp"
charset="utf-8" />
<!-- [optional] Store received messages and headers to a file
Note: "charset" attribute was added in v4.1.0
-->
<module classname="com.helger.as2lib.processor.storage.MessageFileModule"
filename="%home%/inbox/$date.uuuu$/$date.MM$/$msg.sender.as2_id$-$msg.receiver.as2_id$-$msg.headers.message-id$"
header="%home%/inbox/msgheaders/$date.uuuu$/$date.MM$/$msg.sender.as2_id$-$msg.receiver.as2_id$-$msg.headers.message-id$"
protocol="as2"
tempdir="%home%/temp"
charset="utf-8" />
<!-- [required] The main receiver module that performs the message parsing.
This module also sends synchronous MDNs back.
Note: the port attribute is required but can be ignored in our case!
Note: the 'errordir' attribute allows parameters since v3.0.4 only!
Note: the 'errorstorebody' attribute was added with v3.0.4!
-->
<module classname="com.helger.as2servlet.util.AS2ServletReceiverModule"
port="10080"
errordir="%home%/inbox/error/$date.uuuu$/$date.MM$"
errorformat="$msg.sender.as2_id$, $msg.receiver.as2_id$, $msg.headers.message-id$"
errorstorebody="false"/>
<!-- To process the documents further than just storing them to disk, implement
class AbstractProcessorModule and register the module here.
See the phax/as2-peppol-servlet project on how to handle e.g. SBDH documents
-->
</processor>
</openas2>
All the elements between $...$
is replaced with actual message content.
Each element is split by dots, and is explained below:
-
date
- date related parameters-
xxx
- contains the Java date time formatter string - see https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html for a detailed explanation
-
-
msg
- message related parameters-
sender
- contains sender parameters- Example:
msg.sender.as2_id
- access the parameteras2_id
of the message sender
- Example:
-
receiver
- contains receiver parameters- Example:
msg.receiver.as2_id
- access the parameteras2_id
of the message receiver
- Example:
-
attributes
- contains internal attributes. Key names are case sensitive.- Example:
msg.attributes.as2_url
- access the attributeas2_url
containing the target URL of a message
- Example:
-
headers
- contains HTTP headers. If a header occurs more than once, each value is printed delimited by,
. Header names are case-insensitive.- Example:
msg.headers.host
- access the HTTP headerhost
- Example:
-
content-disposition.filename
- special case that contains thefilename
attribute from theContent-Disposition
header.
-
-
mdn
- message MDN related parameters-
sender
- contains sender parameters- Example:
mdn.sender.as2_id
- access the parameteras2_id
of the MDN sender
- Example:
-
receiver
- contains receiver parameters- Example:
mdn.receiver.as2_id
- access the parameteras2_id
of the MDN receiver
- Example:
-
attributes
- contains internal attributes. Key names are case sensitive.- Example:
mdn.attributes.DISPOSITION
- access the attributeDISPOSITION
containing the disposition of an async MDN.
- Example:
-
headers
- contains HTTP headers. If a header occurs more than once, each value is printed delimited by,
. Header names are case-insensitive.- Example:
mdn.headers.host
- access the HTTP headerhost
- Example:
-
text
- contains the MDN payload as a string- Example:
mdn.text.anything
- access the MDN payload. Note theanything
value can really be anything but MUST be provided.
- Example:
-
msg
- contains the message related parameter (see above)- Example:
mdn.msg.sender.as2_id
- access the parameteras2_id
of the message sender
- Example:
-
-
rand
- random values-
xxx
- create a random number withn
digits (wheren
is the number ofx
in the value). For a example to create a random number between 00 and 99 usexx
whereas for a random number between 00000 and 99999 usexxxxx
. Leading zeroes are always kept.
-