This article explains one of the biggest mysteries in Peppol: how does the document exchange work and what roles does the SML (Service Metadata Locator) play in it.
To start a document exchange in Peppol, you need to have the following information before you can start submitting anything:
Lets start at the beginning. The first thing you need to do, is to find the SMP where the document receiver has registered its endpoints. Therefore the PPID and the SML information are required.
iso6523-actorid-upis
and value 9915:test
acc.edelivery.tech.ec.europa.eu.
First thing that happens, is that the dynamic URL is assembled. The algorithm that is used is the following:
"http://B-" + hexstring(md5(lowercase(ID-VALUE))) + "." + ID-SCHEME + "." + SML-ZONE-NAME
ID-SCHEME
and ID-VALUE
are taken from the PPID
and the SML-ZONE-NAME
is taken from the SML used.
That implies that a different identifier (as good as MD5 can do it) will create a different DNS name.
For the identifier iso6523-actorid-upis::9915:test
and the SMK
the created URL is
http://B-85008b8279e07ab0392da75fa55856a2.iso6523-actorid-upis.acc.edelivery.tech.ec.europa.eu
Note: Due to this way of URL creation, the usage of https
is not possible, because each SMP would need a TLS certificate for *.iso6523-actorid-upis.acc.edelivery.tech.ec.europa.eu
which renders the trust part useless.
This URL is resolved via the Domain Name System (DNS) to the IP address 85.158.225.152
which is the IP of the server http://test-infra.peppol.at
.
This is exactly the server name that was used when registering the SMP to the SMK.
See below for a link on what happens on SMP to SML registration.
So the B-8500....
URL is already the URL to the SMP and all that is left to do, is to append
the participant identifier to the URL to get all supported document types.
For the example the URL would be
http://B-85008b8279e07ab0392da75fa55856a2.iso6523-actorid-upis.acc.edelivery.tech.ec.europa.eu/iso6523-actorid-upis::9915:test
.
The reason why the participant identifier needs to be appended again is solely than an SMP can host multiple
participants on the same server.
To see that this is just a DNS forward you can compare the results of
http://B-85008b8279e07ab0392da75fa55856a2.iso6523-actorid-upis.acc.edelivery.tech.ec.europa.eu/iso6523-actorid-upis::9915:test
and
http://test-infra.peppol.at/iso6523-actorid-upis::9915:test
and see that there is no difference in the responses.
Now that the SMP URL is known, the SMP query with the document type
(following the schema http://smp.url/participantID/services/documentTypeID
)
can be performed).
The resulting signed document must be parsed so that the endpoint matching the desired process ID and transport protocol can be retrieved.
This is finally the URL to which the business document is to be send.
All the above mentioned steps are usually handled by the SMP client software, like my OpenSource SMP client or my OpenSource standalone SMP query application.
The last step is the transmission of the business document to the endpoint URL determined in the previous step. Additionally, components like special validation services etc. may be used depending on the effective setup but I wont cover them in this article.
This is the task of the AccessPoint client (or Sending AP).
And how was the SML involved in all of this? Not at all! Only the Domain Name System is queried upon a document exchange. And if the DNS fails, there are more severe issues than not being able to send documents via Peppol. And that is one of the intelligent parts of the Peppol network: No central single point of failure that can stop the document exchange for everybody.
A detailed description can now be found at SMP-SML interplay.