Online supplement

Online Supplement

This online supplement to the documentation for version 3.0 of the Open eGov MessageHandler  shows concrete configuration examples. Please refer to the documentation for details of the configurations options.

Common recommendations

  • Please consult the documentation prior to contacting your IT provider or any other supporting organisation. In particular, careful reading of the Open eGov MessageHandler v3.0 technical documentation is considered necessary.
  • Keep installation directories for sedex and MH apart from inboxes, outboxes and log directories.
  • A single sedex adapter can serve N application (N > 1) only, if each of the applications uses a different sedex message type or if the application can be addressed through different logical sedex IDs.
  • If you intend to let a single sedex adapter to serve N application (N > 1), it’s a good idea to allocate a logical sedex participant per application and to use the physical sedex participant ID to address the sedex adapter only.
    Common rule: 1 application = 1 logical sedex participant.
  • If you intend to let a single sedex adapter to serve N application (N > 1), which use the same sedex message type for communication, you will be force to use the rule above!

Case 1 – One eSchKG/e-LP/e-LEF application

Assumption

  • One single eSchKG/e-LP/e-LEF application has to be connected to the sedex network.
  • No further applications are to be served by the same sedex adapter.
  • One nativeApp -> Native Mode

Prerequisite

  • One physical sedex participant (=sedex ID) is needed for the sedex adapter (T7-4-1 in the example configuration).

Example configuration

 

 

Directory structure
/mh_examples/case1/
.
+-- application
¦   +-- inbox
¦   +-- outbox
+-- log
¦   +-- mh
¦   +-- sedex
+-- mh
¦   +-- install-dir
¦   ¦   +-- bin
¦   ¦   +-- conf
¦   ¦   ¦   +-- config.xml
¦   ¦   ¦   +-- config.xsd
¦   ¦   ¦   +-- log4j.properties
¦   ¦   ¦   +-- recipientIdResolver.groovy
¦   ¦   ¦   +-- wrapper.conf
¦   ¦   +-- lib
¦   +-- working-dir
¦       +-- corrupted
¦       +-- db
¦       +-- sent
¦       +-- tmp
¦       ¦   +-- preparing
¦       ¦   +-- receiving
¦       +-- unknown
+-- sedex
    +-- inbox
    +-- outbox
    +-- receipts
    +-- sent
config.xml
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://msghandler.suis.admin.ch/xmlns/config config.xsd"
        xmlns="http://msghandler.suis.admin.ch/xmlns/config"
        version="3.1">
    <sedexAdapter>
        <participantId>T7-4-1</participantId>
        <inboxDir>/mh_examples/case1/sedex/inbox</inboxDir>
        <outboxDir>/mh_examples/case1/sedex/outbox</outboxDir>
        <receiptDir>/mh_examples/case1/sedex/receipts</receiptDir>
        <sentDir>/mh_examples/case1/sedex/sent</sentDir>
    </sedexAdapter>
    <messageHandler>
        <!-- In diesem Pfad mssen die MH Basis-Verzeichnisse sein: 
        corrupted, tmp, unkown, etc. -->
        <workingDir dirPath="/mh_examples/case1/mh/working-dir"/>
        <!-- Wo starten relative Pfade -->
        <baseDir dirPath="/mh_examples/case1/application"/>
        <!--  wie oft wird die sedex inbox geprft -->
        <sedexInboxDirCheck cron="0/5 * * * * ?" />
        <!--  wie oft wird das sedex receipts directoty geprft -->
        <sedexReceiptDirCheck cron="0/5 * * * * ?" />
        <!-- jede *outbox kann Wert berschreiben -->
        <defaultOutboxCheck cron="0/5 * * * * ?" />
        <webserviceInterface host="localhost" port="18080"/>
        <statusDatabase dirPath="/mh_examples/case1/mh/working-dir/db" 
        dataHoldTimeInDays="2" resend="true"/>
        <protocol createPerMessageProtocols="false"/>
    </messageHandler>
    <nativeApp participantId="T7-4-1" > <!-- die lokale sedexId -->
        <outbox dirPath="outbox" msgType="10301"> 
            <recipientIdResolver filePath="/mh_examples/case1/mh/install-dir/conf/recipientIdResolver.groovy" method="resolve" />
        </outbox>
        <inbox dirPath="inbox" msgTypes="10301"/>
    </nativeApp>
</config>
recipientIdResolver.groovy
/**
 * This resolver works for eSchKG messages. The sedex ID will be extracted
 * from the filename.
 *
 * @param filename the name of the file to be sent including path
 * @return the resolved Sedex-ID or an empty string
*/
def String resolve(String filename) {
  // If the filename matches the eSchKG convention -> extract sedex ID
  def matcher = (filename =~ /^.*\/([1-9]-[0-9A-Z]+-[0-9]+)_.*/)
  if (matcher.matches()) {
    return matcher.group(1)
  }
 
  // If all else fails: return empty string
  return ''
}

Case 2 – Two eSchKG/e-LP/e-LEF applications

Assumption

  •   Two eSchKG/e-LP/e-LEF applications are to be connected to the sedex network over one single sedex adapter.
  • Two nativeApps -> Native Mode.

Prerequisite

  • One physical sedex participant for the sedex adapter (T7-4-1 in the example configuration).
  • Two logical sedex participants for the applications (T7-4-2 and T7-4-3 in the example configuration).
Both applications work with the same sedex message type (10301). Due to this each application requires its own logical sedex ID!

Example configuration

Directory structure
mh_examples/case2/
.
+-- applicationA
¦   +-- inbox
¦   +-- outbox
+-- applicationB
¦   +-- inbox
¦   +-- outbox
+-- log
¦   +-- mh
¦   +-- sedex
+-- mh
¦   +-- install-dir
¦   ¦   +-- bin
¦   ¦   +-- conf
¦   ¦   ¦   +-- config.xml
¦   ¦   ¦   +-- config.xsd
¦   ¦   ¦   +-- log4j.properties
¦   ¦   ¦   +-- recipientIdResolver.groovy
¦   ¦   +-- lib
¦   +-- working-dir
¦       +-- corrupted
¦       +-- db
¦       +-- sent
¦       +-- tmp
¦       ¦   +-- preparing
¦       ¦   +-- receiving
¦       +-- unknown
+-- sedex
    +-- inbox
    +-- outbox
    +-- receipts
    +-- sent
config.xml
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://msghandler.suis.admin.ch/xmlns/config config.xsd"
        xmlns="http://msghandler.suis.admin.ch/xmlns/config"
        version="3.1">
    <sedexAdapter>
        <participantId>T7-4-1</participantId>
        <inboxDir>/mh_examples/case2/sedex/inbox</inboxDir>
        <outboxDir>/mh_examples/case2/sedex/outbox</outboxDir>
        <receiptDir>/mh_examples/case2/sedex/receipts</receiptDir>
        <sentDir>/mh_examples/case2/sedex/sent</sentDir>
    </sedexAdapter>
    <messageHandler>
        <!-- In diesem Pfad mssen die MH Basis-Verzeichnisse sein: 
        corrupted, tmp, unkown, etc. -->
        <workingDir dirPath="/mh_examples/case2/mh/working-dir"/>
        <!-- Wo starten relative Pfade -->
        <baseDir dirPath="/mh_examples/case2"/>
        <!--  wie oft wird die sedex inbox geprft -->
        <sedexInboxDirCheck cron="0/30 * * * * ?" />
        <!--  wie oft wird das sedex receipts directoty geprft -->
        <sedexReceiptDirCheck cron="0/30 * * * * ?" />
        <!-- jede *outbox kann Wert berschreiben -->
        <defaultOutboxCheck cron="0/30 * * * * ?" />
        <webserviceInterface host="localhost" port="18080"/>
        <statusDatabase dirPath="/mh_examples/case2/mh/working-dir/db" 
        dataHoldTimeInDays="2" resend="true"/>
        <protocol createPerMessageProtocols="false"/>
    </messageHandler>
    <nativeApp participantId="T7-4-2" > <!-- die lokale sedexId -->
        <outbox dirPath="applicationA/outbox" msgType="10301"> 
            <recipientIdResolver filePath="/mh_examples/case2/mh/install-dir/conf/recipientIdResolver.groovy" method="resolve" />
        </outbox>
        <inbox dirPath="applicationA/inbox" msgTypes="10301"/>
    </nativeApp>
    <nativeApp participantId="T7-4-3" > <!-- die lokale sedexId -->
        <outbox dirPath="applicationB/outbox" msgType="10301"> 
            <recipientIdResolver filePath="/mh_examples/case2/mh/install-dir/conf/recipientIdResolver.groovy" method="resolve" />
        </outbox>
        <inbox dirPath="applicationB/inbox" msgTypes="10301"/>
    </nativeApp>
</config>

 

recipientIdResolver.groovy: same as in case 1.

Case 3 – One eSchKG eSchKG/e-LP/e-LEF and one sedex application

Assumption

  • One eSchKG/e-LP/e-LEF application (message type = 10301) is to be connected to the sedex network.
  • One plain sedex mode application (message type = 112) is to be connected to the sedex network
  • One nativeApp and one transparentApp -> Mixed Mode

Prerequisite

  • One physical sedex participant Id (sedex ID = T7-4-1).
Since the applications send and receive using different sedex message types they can share the same physical sedex participant. This kind of setup is not recommended, if you plan to serve additional applications which might use the same message types!

Example configuration

Directory structure
/mh_examples/case3/
.
+-- applicationA
¦   +-- inbox
¦   +-- outbox
+-- applicationB
¦   +-- inbox
¦   +-- outbox
¦   +-- receipts
+-- log
¦   +-- mh
¦   +-- sedex
+-- mh
¦   +-- install-dir
¦   ¦   +-- bin
¦   ¦   +-- conf
¦   ¦   ¦   +-- config.xml
¦   ¦   ¦   +-- config.xsd
¦   ¦   ¦   +-- log4j.properties
¦   ¦   ¦   +-- recipientIdResolver.groovy
¦   ¦   +-- lib
¦   +-- working-dir
¦       +-- corrupted
¦       +-- db
¦       +-- sent
¦       +-- tmp
¦       ¦   +-- preparing
¦       ¦   +-- receiving
¦       +-- unknown
+-- sedex
    +-- inbox
    +-- outbox
    +-- receipts
    +-- sent
config.xml
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://msghandler.suis.admin.ch/xmlns/config config.xsd"
        xmlns="http://msghandler.suis.admin.ch/xmlns/config"
        version="3.1">
    <sedexAdapter>
        <participantId>T7-4-1</participantId>
        <inboxDir>/mh_examples/case3/sedex/inbox</inboxDir>
        <outboxDir>/mh_examples/case3/sedex/outbox</outboxDir>
        <receiptDir>/mh_examples/case3/sedex/receipts</receiptDir>
        <sentDir>/mh_examples/case3/sedex/sent</sentDir>
    </sedexAdapter>
    <messageHandler>
        <!-- In diesem Pfad mssen die MH Basis-Verzeichnisse sein: 
        corrupted, tmp, unkown, etc. -->
        <workingDir dirPath="/mh_examples/case3/mh/working-dir"/>
        <!-- Wo starten relative Pfade -->
        <baseDir dirPath="/mh_examples/case3"/>
        <!--  wie oft wird die sedex inbox geprft -->
        <sedexInboxDirCheck cron="0/30 * * * * ?" />
        <!--  wie oft wird das sedex receipts directoty geprft -->
        <sedexReceiptDirCheck cron="0/30 * * * * ?" />
        <!-- jede *outbox kann Wert berschreiben -->
        <defaultOutboxCheck cron="0/30 * * * * ?" />
        <webserviceInterface host="localhost" port="18080"/>
        <statusDatabase dirPath="/mh_examples/case3/mh/working-dir/db" 
        dataHoldTimeInDays="2" resend="true"/>
        <protocol createPerMessageProtocols="false"/>
    </messageHandler>
    <nativeApp participantId="T7-4-1" > <!-- die lokale sedexId -->
        <outbox dirPath="applicationA/outbox" msgType="10301"> 
            <recipientIdResolver filePath="/mh_examples/case3/mh/install-dir/conf/recipientIdResolver.groovy" method="resolve" />
        </outbox>
        <inbox dirPath="applicationA/inbox" msgTypes="10301"/>
    </nativeApp>
    <transparentApp participantId="T7-4-1" > <!-- die lokale sedexId -->
        <outbox dirPath="applicationB/outbox" />
        <inbox dirPath="applicationB/inbox" msgTypes="112"/>
        <receipts dirPath="applicationB/receipts" msgTypes="112"/>
    </transparentApp>
</config>

 

recipientIdResolver.groovy: same as in case 1

Case 4 – Two applications in Transparent Mode

Assumption

  • Two plain sedex mode applications are connected to the sedex network over one single sedex adapter.
  • Both applications use the same message type (112).
  • Two transparentApps -> Transparent Mode.

Prerequisite

  • One physical sedex participant for the sedex adapter (T7-4-1 in the example configuration).
  • Two logical sedex participants for the applications (T7-4-2 and T7-4-3 in the example configuration). 
Both applications work with the same sedex message type (112). Due to this each application requires its own logical sedex ID.

 

Example configuration

Directory structure
/mh_examples/case4
.
+-- applicationA
¦   +-- inbox
¦   +-- outbox
¦   +-- receipts
+-- applicationB
¦   +-- inbox
¦   +-- outbox
¦   +-- receipts
+-- log
¦   +-- mh
¦   +-- sedex
+-- mh
¦   +-- install-dir
¦   ¦   +-- bin
¦   ¦   +-- conf
¦   ¦   ¦   +-- config.xml
¦   ¦   ¦   +-- config.xsd
¦   ¦   ¦   +-- log4j.properties
¦   ¦   +-- lib
¦   +-- working-dir
¦       +-- corrupted
¦       +-- db
¦       +-- sent
¦       +-- tmp
¦       ¦   +-- preparing
¦       ¦   +-- receiving
¦       +-- unknown
+-- sedex
    +-- inbox
    +-- outbox
    +-- receipts
    +-- sent
config.xml
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://msghandler.suis.admin.ch/xmlns/config config.xsd"
        xmlns="http://msghandler.suis.admin.ch/xmlns/config"
        version="3.1">
    <sedexAdapter>
        <participantId>T7-4-1</participantId>
        <inboxDir>/mh_examples/case4/sedex/inbox</inboxDir>
        <outboxDir>/mh_examples/case4/sedex/outbox</outboxDir>
        <receiptDir>/mh_examples/case4/sedex/receipts</receiptDir>
        <sentDir>/mh_examples/case4/sedex/sent</sentDir>
    </sedexAdapter>
    <messageHandler>
        <!-- In diesem Pfad mssen die MH Basis-Verzeichnisse sein: 
        corrupted, tmp, unkown, etc. -->
        <workingDir dirPath="/mh_examples/case4/mh/working-dir"/>
        <!-- Wo starten relative Pfade -->
        <baseDir dirPath="/mh_examples/case4"/>
        <!--  wie oft wird die sedex inbox geprft -->
        <sedexInboxDirCheck cron="0/30 * * * * ?" />
        <!--  wie oft wird das sedex receipts directoty geprft -->
        <sedexReceiptDirCheck cron="0/30 * * * * ?" />
        <!-- jede *outbox kann Wert berschreiben -->
        <defaultOutboxCheck cron="0/30 * * * * ?" />
        <webserviceInterface host="localhost" port="18080"/>
        <statusDatabase dirPath="/mh_examples/case4/mh/working-dir/db" 
        dataHoldTimeInDays="2" resend="true"/>
        <protocol createPerMessageProtocols="false"/>
    </messageHandler>
    <transparentApp participantId="T7-4-2" > <!-- die lokale sedexId -->
        <outbox dirPath="applicationA/outbox" /> 
        <inbox dirPath="applicationA/inbox" msgTypes="112"/>
        <receipts dirPath="applicationA/receipts" msgTypes="112"/>
    </transparentApp>
    <transparentApp participantId="T7-4-3" > <!-- die lokale sedexId -->
        <outbox dirPath="applicationB/outbox" />
        <inbox dirPath="applicationB/inbox" msgTypes="112"/>
        <receipts dirPath="applicationB/receipts" msgTypes="112"/>
    </transparentApp>
</config>

 

Case 5 – Two applications in Transparent Mode – local recipients

Assumption

  • Two plain sedex mode applications are to be connected to the sedex network over one single sedex adapter.
  • The applications also communicate directly with each other.
  • Both applications use the same sedex message type (112).

Prerequisite

  • One physical sedex participant for the sedex adapter (T7-4-1 in the example configuration).
  • Two logical sedex participants for the applications (T7-4-2 and T7-4-3 in the example configuration)
Both applications work with the same sedex message type (112). Due to this each application requires its own logical sedex ID.

Example configuration

Directory structure
mh_examples/case5
.
+-- applicationA
¦   +-- inbox
¦   +-- outbox
¦   +-- receipts
+-- applicationB
¦   +-- inbox
¦   +-- outbox
¦   +-- receipts
+-- log
¦   +-- mh
¦   +-- sedex
+-- mh
¦   +-- install-dir
¦   ¦   +-- bin
¦   ¦   +-- conf
¦   ¦   ¦   +-- config.xml
¦   ¦   ¦   +-- config.xsd
¦   ¦   ¦   +-- log4j.properties
¦   ¦   +-- lib
¦   +-- working-dir
¦       +-- corrupted
¦       +-- db
¦       +-- sent
¦       +-- tmp
¦       ¦   +-- preparing
¦       ¦   +-- receiving
¦       +-- unknown
+-- sedex
    +-- inbox
    +-- outbox
    +-- receipts
    +-- sent
config.xml
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://msghandler.suis.admin.ch/xmlns/config config.xsd"
    xmlns="http://msghandler.suis.admin.ch/xmlns/config"
    version="3.1">
    
    <sedexAdapter>
        <participantId>T7-4-1</participantId>
        <inboxDir>/mh_examples/case5/sedex/inbox</inboxDir>
        <outboxDir>/mh_examples/case5/sedex/outbox</outboxDir>
        <receiptDir>/mh_examples/case5/sedex/receipts</receiptDir>
        <sentDir>/mh_examples/case5/sedex/sent</sentDir>
    </sedexAdapter>
    
    <messageHandler>
        <!-- In diesem Pfad mssen die MH Basis-Verzeichnisse sein: 
            corrupted, tmp, unkown, etc. -->
        <workingDir dirPath="/mh_examples/case5/mh/working-dir"/>
        <!-- Wo starten relative Pfade -->
        <baseDir dirPath="/mh_examples/case5"/>
        <!--  wie oft wird die sedex inbox geprft -->
        <sedexInboxDirCheck cron="0/30 * * * * ?" />
        <!--  wie oft wird das sedex receipts directoty geprft -->
        <sedexReceiptDirCheck cron="0/30 * * * * ?" />
        <!-- jede *outbox kann Wert berschreiben -->
        <defaultOutboxCheck cron="0/30 * * * * ?" />
        <webserviceInterface host="localhost" port="18080"/>
        <statusDatabase dirPath="/mh_examples/case5/mh/working-dir/db" 
            dataHoldTimeInDays="2" resend="true"/>
        <localRecipients>
            <localRecipient recipientId="T7-4-2" msgTypes="112" />
            <localRecipient recipientId="T7-4-3" msgTypes="112" />
        </localRecipients>
        <protocol createPerMessageProtocols="false"/>
    </messageHandler>
    
    <transparentApp participantId="T7-4-2" > <!-- die lokale sedexId -->
        <outbox dirPath="applicationA/outbox" />
        <inbox dirPath="applicationA/inbox" msgTypes="112"/>
        <receipts dirPath="applicationA/receipts" msgTypes="112"/>
    </transparentApp>
    
    <transparentApp participantId="T7-4-3" > <!-- die lokale sedexId -->
        <outbox dirPath="applicationB/outbox" />
        <inbox dirPath="applicationB/inbox" msgTypes="112"/>
        <receipts dirPath="applicationB/receipts" msgTypes="112"/>
    </transparentApp>
</config>

 

Case 6 – One eSchKG/e-LP/e-LEF application with one signing outbox

Assumption

  • One eSchKG/e-LP/e-LEF application (message type = 10301) has to be connected to the sedex network.
  • The application uses a single signing outbox to sign PDF files by the MH. The configuration parameter for signing will be read from the sedex certificate configuration file (CertificateConfiguration.xml).
  • One nativeApp -> Native Mode.

Prerequisite

  • One physically sedex participant (=sedex ID) is needed for the sedex adapter (T7-4-1 in the example configuration).
  • A PKCS#12 file with the X.509 signing certificate (.p12 file)
  • Open eGov BatchSigner or LocalSigner “signature.properties” file
The signing process: The application adds the file “document.pdf” inside the signing-outbox directory. MH takes this file and adds a signature to it. The new file with the signature will be added to the outbox directory with the new filename “document-sig.pdf”. If this step is successfully executed the original file “document.pdf” will be moved to the processed directory.

Example configuration

Directory structure
/mh_examples/case6/
.
+-- application
¦   +-- inbox
¦   +-- outbox
¦   +-- processed
¦   +-- signing-outbox
+-- log
¦   +-- mh
¦   +-- sedex
+-- mh
¦   +-- install-dir
¦   ¦   +-- bin
¦   ¦   +-- conf
¦   ¦   ¦   +-- config.xml
¦   ¦   ¦   +-- config.xsd
¦   ¦   ¦   +-- log4j.properties
¦   ¦   ¦   +-- recipientIdResolver.groovy
¦   ¦   ¦   +-- signature.properties
¦   ¦   +-- lib
¦   +-- working-dir
¦       +-- corrupted
¦       +-- db
¦       +-- sent
¦       +-- tmp
¦       ¦   +-- preparing
¦       ¦   +-- receiving
¦       +-- unknown
+-- sedex
    +-- certificate
    ¦   +-- certificate1.p12
    +-- conf
    ¦   +-- certificateConfiguration.xml
    ¦   +-- CertificateConfiguration-1-0.xsd
    +-- inbox
    +-- outbox
    +-- receipts
    +-- sent
config.xml
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://msghandler.suis.admin.ch/xmlns/config config.xsd"
        xmlns="http://msghandler.suis.admin.ch/xmlns/config"
        version="3.1">
    <sedexAdapter>
        <participantId>T7-4-1</participantId>
        <inboxDir>/mh_examples/case6/sedex/inbox</inboxDir>
        <outboxDir>/mh_examples/case6/sedex/outbox</outboxDir>
        <receiptDir>/mh_examples/case6/sedex/receipts</receiptDir>
        <sentDir>/mh_examples/case6/sedex/sent</sentDir>
    </sedexAdapter>
    <messageHandler>
        <!-- In diesem Pfad mssen die MH Basis-Verzeichnisse sein: 
        corrupted, tmp, unkown, etc. -->
        <workingDir dirPath="/mh_examples/case6/mh/working-dir"/>
        <!-- Wo starten relative Pfade -->
        <baseDir dirPath="/mh_examples/case6/application"/>
        <!--  wie oft wird die sedex inbox geprft -->
        <sedexInboxDirCheck cron="0/30 * * * * ?" />
        <!--  wie oft wird das sedex receipts directoty geprft -->
        <sedexReceiptDirCheck cron="0/30 * * * * ?" />
        <!-- jede *outbox kann Wert berschreiben -->
        <defaultOutboxCheck cron="0/30 * * * * ?" />
        <webserviceInterface host="localhost" port="18080"/>
        <statusDatabase dirPath="/mh_examples/case6/mh/working-dir/db" 
        dataHoldTimeInDays="2" resend="true"/>
        <protocol createPerMessageProtocols="false"/>
    </messageHandler>
    <nativeApp participantId="T7-4-1" > <!-- die lokale sedexId -->
        <outbox dirPath="outbox" msgType="10301"> 
            <recipientIdResolver filePath="/mh_examples/case6/mh/install-dir/conf/recipientIdResolver.groovy" method="resolve" />
            <signingOutbox dirPath="signing-outbox" processedDir="processed" signingProfilePath="/mh_examples/case6/mh/install-dir/conf/signature.properties">
                <certificateConfigFile 
                   filePath="/mh_examples/case6/sedex/conf/certificateConfiguration.xml"/>
            </signingOutbox>
        </outbox>
        <inbox dirPath="inbox" msgTypes="10301"/>
    </nativeApp>
</config>

 

recipientIdResolver.groovy: same as in case 1.

signature.properties
typeOfSignature = signature
visibleSignature = true
location = Bern
reason = Genehmigt
contact = info@glue.ch
backgroundImage = 
leftPos = 100
topPos = 100
boxWidth = 80
boxHeight = 40
signOn = 0
enableTimestamping = false
tsaurl = http://tsa.swisssign.net, http://tsa-t01.admin.ch/rfc3161
tsauser =
tsapassword =

Case 7– One eSchKG/e-LP/e-LEF application with two signing outboxes

Assumption

  • One eSchKG/e-LP/e-LEF application (message type = 10301) has to be connected to the sedex network.
  • The application uses two signing outboxes to sign PDF files by the MH. One of these outboxes is configured with a p12 file and password, the other is configured with the sedex certificate configuration file (CertificateConfiguration.xml).
  • One nativeApp -> Native Mode.

Prerequisite

  • One physically sedex participant (=sedex ID) is needed for the sedex adapter (T7-4-1 in the example configuration).
  • Two PKCS#12 files with the X.509 signing certificates (.p12 files)
  • Two Open eGov BatchSigner or LocalSigner “signature.properties” file

 

  • Signing process: In this example there’s no processed directory configured for the signing process. See case 6 for an example with a processed directory. 
  • Signing process: The application adds the file “document.pdf” inside the signing-outbox directory. MH takes this file and adds a signature to it. The new file with the signature will be added to the outbox directory with the new filename “document-sig.pdf”. If this step is successfully executed the original file “document.pdf” will no longer exist.

 

Example configuration

Directory structure
/mh_examples/case7/
.
+-- application
¦   +-- inbox
¦   +-- outbox
¦   +-- signing-outbox1
¦   +-- signing-outbox2
+-- log
¦   +-- mh
¦   +-- sedex
+-- mh
¦   +-- install-dir
¦   ¦   +-- bin
¦   ¦   +-- conf
¦   ¦   ¦   +-- certificate1.p12
¦   ¦   ¦   +-- config.xml
¦   ¦   ¦   +-- config.xsd
¦   ¦   ¦   +-- log4j.properties
¦   ¦   ¦   +-- recipientIdResolver.groovy
¦   ¦   ¦   +-- signature1.properties
¦   ¦   ¦   +-- signature2.properties
¦   ¦   +-- lib
¦   +-- working-dir
¦       +-- corrupted
¦       +-- db
¦       +-- sent
¦       +-- tmp
¦       ¦   +-- preparing
¦       ¦   +-- receiving
¦       +-- unknown
+-- sedex
    +-- certificate
    ¦   +-- certificate2.p12
    +-- conf
    ¦   +-- certificateConfiguration.xml
    ¦   +-- CertificateConfiguration-1-0.xsd
    +-- inbox
    +-- outbox
    +-- receipts
    +-- sent
config.xml
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://msghandler.suis.admin.ch/xmlns/config config.xsd"
        xmlns="http://msghandler.suis.admin.ch/xmlns/config"
        version="3.1">
    <sedexAdapter>
        <participantId>T7-4-1</participantId>
        <inboxDir>/mh_examples/case7/sedex/inbox</inboxDir>
        <outboxDir>/mh_examples/case7/sedex/outbox</outboxDir>
        <receiptDir>/mh_examples/case7/sedex/receipts</receiptDir>
        <sentDir>/mh_examples/case7/sedex/sent</sentDir>
    </sedexAdapter>
    <messageHandler>
        <!-- In diesem Pfad mssen die MH Basis-Verzeichnisse sein: 
        corrupted, tmp, unkown, etc. -->
        <workingDir dirPath="/mh_examples/case7/mh/working-dir"/>
        <!-- Wo starten relative Pfade -->
        <baseDir dirPath="/mh_examples/case7/application"/>
        <!--  wie oft wird die sedex inbox geprft -->
        <sedexInboxDirCheck cron="0/30 * * * * ?" />
        <!--  wie oft wird das sedex receipts directoty geprft -->
        <sedexReceiptDirCheck cron="0/30 * * * * ?" />
        <!-- jede *outbox kann Wert berschreiben -->
        <defaultOutboxCheck cron="0/30 * * * * ?" />
        <webserviceInterface host="localhost" port="18080"/>
        <statusDatabase dirPath="/mh_examples/case7/mh/working-dir/db" 
        dataHoldTimeInDays="2" resend="true"/>
        <protocol createPerMessageProtocols="false"/>
    </messageHandler>
    <nativeApp participantId="T7-4-1" > <!-- die lokale sedexId -->
        <outbox dirPath="outbox" msgType="10301"> 
            <recipientIdResolver filePath="/mh_examples/case7/mh/install-dir/conf/recipientIdResolver.groovy" method="resolve" />
            <signingOutbox dirPath="signing-outbox1" signingProfilePath="/mh_examples/case7/mh/install-dir/conf/signature1.properties">
                <certificate filePath="/mh_examples/case7/mh/install-dir/conf/certificate1.p12" password="secret"/>
            </signingOutbox>
            <signingOutbox dirPath="signing-outbox2" signingProfilePath="/mh_examples/case7/mh/install-dir/conf/signature2.properties">
                <certificateConfigFile 
                    filePath="/mh_examples/case7/sedex/conf/certificateConfiguration.xml"/>
            </signingOutbox>
        </outbox>
        <inbox dirPath="inbox" msgTypes="10301"/>
    </nativeApp>
</config>

 recipientIdResolver.groovy: same as in case 1

signature1.properties and signature2.properties: See case 6