{"id":16416336,"url":"https://github.com/phax/peppol-commons","last_synced_at":"2026-04-29T17:01:13.733Z","repository":{"id":29245057,"uuid":"32777313","full_name":"phax/peppol-commons","owner":"phax","description":"Java library with shared Peppol components - identifier handling, codelists, SBDH handler, SMP Client, SML Client, MLR handler, MLS handler","archived":false,"fork":false,"pushed_at":"2026-02-13T19:32:54.000Z","size":53390,"stargazers_count":40,"open_issues_count":5,"forks_count":9,"subscribers_count":8,"default_branch":"master","last_synced_at":"2026-02-14T02:40:06.967Z","etag":null,"topics":["mls","openpeppol","peppol","peppol-bis","peppol-dev","peppol-sml-client","peppol-smp","sbdh","service-metadata-locator","service-metadata-publisher","sml","sml-client","smp","smp-client","ubl"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/phax.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2015-03-24T05:07:15.000Z","updated_at":"2026-02-13T19:32:58.000Z","dependencies_parsed_at":"2024-01-15T12:26:04.417Z","dependency_job_id":"8569687c-b82f-43c7-890c-f4763d1eb730","html_url":"https://github.com/phax/peppol-commons","commit_stats":{"total_commits":1986,"total_committers":4,"mean_commits":496.5,"dds":0.00654582074521648,"last_synced_commit":"b619b74490e11425c572662f7737fe6403803eac"},"previous_names":[],"tags_count":184,"template":false,"template_full_name":null,"purl":"pkg:github/phax/peppol-commons","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phax%2Fpeppol-commons","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phax%2Fpeppol-commons/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phax%2Fpeppol-commons/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phax%2Fpeppol-commons/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/phax","download_url":"https://codeload.github.com/phax/peppol-commons/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phax%2Fpeppol-commons/sbom","scorecard":{"id":730712,"data":{"date":"2025-08-11","repo":{"name":"github.com/phax/peppol-commons","commit":"9e8a00f78f8350e41ddc58c384db42f90c7f66f4"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.7,"checks":[{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":10,"reason":"30 commit(s) and 2 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/maven.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE.txt:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE.txt:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/maven.yml:29"],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/maven.yml:37: update your workflow using https://app.stepsecurity.io/secureworkflow/phax/peppol-commons/maven.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/maven.yml:39: update your workflow using https://app.stepsecurity.io/secureworkflow/phax/peppol-commons/maven.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/maven.yml:48: update your workflow using https://app.stepsecurity.io/secureworkflow/phax/peppol-commons/maven.yml/master?enable=pin","Info:   0 out of   3 GitHub-owned GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-22T14:20:11.201Z","repository_id":29245057,"created_at":"2025-08-22T14:20:11.201Z","updated_at":"2025-08-22T14:20:11.201Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29556448,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-17T18:16:07.221Z","status":"ssl_error","status_checked_at":"2026-02-17T18:16:04.782Z","response_time":100,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["mls","openpeppol","peppol","peppol-bis","peppol-dev","peppol-sml-client","peppol-smp","sbdh","service-metadata-locator","service-metadata-publisher","sml","sml-client","smp","smp-client","ubl"],"created_at":"2024-10-11T07:09:00.738Z","updated_at":"2026-04-29T17:01:13.722Z","avatar_url":"https://github.com/phax.png","language":"Java","funding_links":[],"categories":["Electronic Invoicing"],"sub_categories":[],"readme":"# Introduction\n\n\u003c!-- ph-badge-start --\u003e\n[![Sonatype Central](https://maven-badges.sml.io/sonatype-central/com.helger.peppol/peppol-commons-parent-pom/badge.svg)](https://maven-badges.sml.io/sonatype-central/com.helger.peppol/peppol-commons-parent-pom/)\n[![javadoc](https://javadoc.io/badge2/com.helger.peppol/peppol-id-datatypes/javadoc.svg)](https://javadoc.io/doc/com.helger.peppol/peppol-id-datatypes)\n\u003c!-- ph-badge-end --\u003e\n\nThis project contains different libraries that are commonly used in the Peppol/eDelivery area:\n* [`peppol-id-datatypes`](#peppol-id-datatypes) - the generated JAXB classes for ID handling (since v8.4.0)\n* [`peppol-id`](#peppol-id) - the ID data structures (since v7.0.0)\n* [`peppol-commons`](#peppol-commons) - the most basic data structures for use with Peppol and BDXR\n* [`peppol-testfiles`](#peppol-testfiles) - a set of UBL and SBDH test files\n* [`peppol-sbdh`](#peppol-sbdh) - Peppol specific SBDH handling\n* [`peppol-sml-client`](#peppol-sml-client) - the Peppol SML client\n* [`peppol-smp-datatypes`](#peppol-smp-datatypes) - the Peppol SMP generated JAXB classes (since v8.4.0)\n* [`peppol-smp-client`](#peppol-smp-client) - the Peppol SMP and BDXR SMP client\n* [`peppol-directory-businesscard`](#peppol-directory-businesscard) - the Peppol Directory Business Card data model (since v9.1.0)\n* [`peppol-mlr`](#peppol-mlr) - specific support for the Peppol Message Level Response (MLR) (since v9.1.2)\n* [`peppol-mls`](#peppol-mls) - specific support for the Peppol Message Level Status (MLS) (since v10.1.0)\n* [`dbnalliance-commons`](#dbnalliance-commons) - contains commons stuff for DBNAlliance support (since v10.2.0)\n* [`dbnalliance-xhe`](#dbnalliance-xhe) - specific support for DBNAlliance XHE header (since v9.5.0)\n* [`hredelivery-commons`](#hredelivery-commons) - contains commons stuff for HR eDelivery support (since v12.0.2)\n  \nThis project is part of my Peppol solution stack. See https://github.com/phax/peppol for other components and libraries in that area.\n\nThese project are used implicitly by e.g. the following projects:\n* [phase4](https://github.com/phax/phase4/) - an AS4 implementation that supports the Peppol Network\n* [phoss-smp](https://github.com/phax/phoss-smp/) - the phoss SMP server with a management GUI\n* [phoss-directory](https://github.com/phax/phoss-directory/) - the phoss Directory for Peppol and TOOP\n\nThis project is licensed under the Apache 2.0 license.\n\n## peppol-id-datatypes\n\nJava library with the JAXB generated elements for Peppol ID and Peppol Code List handling.\nFirst created in v8.4.0.\n\nMake sure to run `mvn process-sources` before using it in the IDE.\nThe additional code is created in `target/generated-sources/xjc`. \n\n## peppol-id\n\nJava library with shared IDs and predefined IDs.\nFirst created in v7.0.0.\n\n## peppol-commons\n\nJava library with shared Peppol components. It contains the basic algorithms. Since v7 this depends on the `peppol-id` submodule.\n\nThis project also contains the predefined Peppol Truststores. See https://github.com/phax/peppol-commons/tree/master/peppol-commons/src/main/resources/truststore for all details.\n\n## peppol-sbdh\n\nSimple SBDH handler for the use with Peppol.\nIt offers the possibility to extract all meta data from an SBDH document as well as \nset all meta data to an SBDH document.\n\nMake sure to run `mvn generate-sources` before using it in the IDE.\nThe additional code is created in `target/generated-sources/xjc`. \n\nThis projects implements the \"Envelope specification\" as listed on\nhttp://www.peppol.eu/ressource-library/technical-specifications/transport-infrastructure/infrastructure-resources.\nThe detail document this project refers to can be found at\nhttps://docs.peppol.eu/edelivery/envelope/PEPPOL-EDN-Business-Message-Envelope-1.2.1-2020-03-11.pdf\n\n## peppol-testfiles\n\nA Java library with a lot of UBL and SBDH test files suitable for different scenarios.  \n\nSimpleInvoicing test files are used from https://github.com/SimplerInvoicing/testset\n\n## peppol-sml-client\n\nThis project contains the SML client library used by the SMP's to interact with the SML.\nThis library is usually only used within SMP servers, to communicate the changes to the central SML.\n\nMake sure to run `mvn generate-sources` before using it in the IDE.\nThe additional code is created in `target/generated-sources/xjc`. \n\nThis project contains 2 main classes for talking to the Peppol SML:\n  * `ManageServiceMetadataServiceCaller` which is used to change SMP assignments in the SML. This must be called for a new SMP to register it once at the SML.\n  * `ManageParticipantIdentifierServiceCaller` which is used to manage the assignment of participants to SMPs. This must be invoked from the SMP server every time a new participant is registered (or an existing one is modified or deleted).\n  \nBoth classes offer the possibility to set an optional custom `SSLSocketFactory` as well as a custom optional `HostnameVerifier`. The implementation of this is in the base class `AbstractSMLClientCaller`.\n\nThis project is used by [peppol-smp-server](https://github.com/phax/peppol-smp-server/) the SMP server with a management GUI and flexible backends.\n\n## peppol-smp-datatypes\n\nJava library with the JAXB generated elements for Peppol SMP handling.\nFirst created in v8.4.0.\n\nMake sure to run `mvn process-sources` before using it in the IDE.\nThe additional code is created in `target/generated-sources/xjc`. \n\n## peppol-smp-client\n\nThis project holds the SMP client library used by the Access Points to retrieve service metadata. \nThis project supports the Peppol SMP specification, the OASIS BDXR SMP v1 and OASIS BDXR SMP v2 specification. \nThis project uses Apache HTTP client to perform the REST lookups on foreign SMPs.\n\nThe Peppol SMP specification 1.2.0, mandatory per 1.5.2022, is supported since v8.7.3.\nThe Peppol SMP specification 1.3.0 to be used per 1.12.2023 does not require any changes and is supported out of the box.\n\nI also provide an OSS [phoss SMP server](https://github.com/phax/phoss-smp) with a nice management GUI.\n\nIf you are looking for a standalone query tool, https://github.com/Helger-IT/smp-query-webapp is what you may have a look at.\n\n## peppol-directory-businesscard\n\nThis was introduced in v9.1.0\n\nThis project holds the different versions of the Peppol Directory Business Card data model, as well as one generic model.\n\n## peppol-mlr\n\nThis was introduced in v9.1.2\n\nThis project holds utility classes to read and write a Peppol Message Level Response (MLR) as defined in https://docs.peppol.eu/poacc/upgrade-3/profiles/36-mlr/\n\n* Class `PeppolMLRBuilder` can be used to build a Peppol MLR document - with or without line details. For each `LineResponse` the specialized builder class `PeppolMLRLineResponseBuilder` is available.\n* Class `PeppolMLRMarshaller` can be used to serialize MLR messages from and to XML. It is based on the [ph-ubl](https://github.com/phax/ph-ubl) marshaller.\n\nSee https://github.com/phax/peppol-commons/blob/master/peppol-mlr/src/test/java/com/helger/peppol/mlr/PeppolMLRBuilderTest.java for an example how to use the classes.\n\n## peppol-mls\n\nThis was introduced in v10.0.3\n\nThis project holds utility classes to read and write a [Peppol Message Level Status](https://docs.peppol.eu/edelivery/specs/mls/v1.0.0/) (MLS) as defined in the member review of the MLS specification.\nThis is not necessarily the final version of the Peppol MLS and subject to change when the final version is released.\n\n* Class `PeppolMLSBuilder` can be used to build a Peppol MLS document - with or without line details. For each `LineResponse` the specialized builder class `PeppolMLSLineResponseBuilder` is available.\n* Class `PeppolMLSMarshaller` can be used to serialize MLS messages from and to XML. It is based on the [ph-ubl](https://github.com/phax/ph-ubl) marshaller.\n* Class `PeppolMLSValidator` can be used to run Schematron validation on Peppol MLS messages.\n\nSee https://github.com/phax/peppol-commons/blob/master/peppol-mls/src/test/java/com/helger/peppol/mls/PeppolMLSBuilderTest.java for an example how to use the classes.\n\n## dbnalliance-commons\n\nThis was introduced in v10.2.0\n\nThis project contains shared components for DBNAlliance usage.\n\n## dbnalliance-xhe\n\nThis was introduced in v9.5.0\n\nThis project holds support for reading and writing DBNAlliance XHE header.\nThis is the DBNAlliance version of `peppol-sbdh` based on the [ph-xhe](https://github.com/phax/ph-xhe) library.\n\n## hredelivery-commons\n\nThis was introduced in v12.0.3\n\nThis project contains shared components for Croatian (HR) eDelivery usage in the area as eRacun.\n\n### Configuration\n\n**Configuration resolution (since v8.2.0)**\n\nThe SMP client (both Peppol and OASIS BDXR) uses the file `application.properties` for configuration.\nThe file `smp-client.properties` is also evaluated for backwards-compatibility reasons but with lower priority.\n\nSee https://github.com/phax/ph-commons#ph-config for the new resolution logic.\n\n**Configuration resolution (pre v8.2.0)**\n\nThe SMP client (both Peppol and OASIS BDXR) uses the file `smp-client.properties` for configuration. The default file resides in the folder `src/main/resources` of this project. You can change the path of the properties file by setting the environment variable `SMP_CLIENT_CONFIG` (since v7.0.7), the system property `peppol.smp.client.properties.path` (since v4.3.5), the system property `smp.client.properties.path` (available as of v4.2.0) to the absolute path of the configuration file (e.g. by specifying `-Dsmp.client.properties.path=/var/www/smpclient.properties` on Java startup). The name of the file does not matter, but if you specify a different properties file please make sure that you also specify an absolute path to e.g. the trust store!\n\n**Configuration properties**\n\nIt supports the following properties:\n* **`smpclient.truststore.type`**: the type of key store to be used. Possible values are `JKS`, `PKCS12` and `BCFKS`. Defaults to `JKS`.\n    * Must be set to `PKCS12` for Peppol G3 CA\n* **`smpclient.truststore.path`**: the location of the Peppol trust store (of the specified type) to be used. If this property is not defined, the value defaults to `truststore/complete-truststore.jks`. By default the SMP client supports the following built-in trust stores (in library [peppol-commons](https://github.com/phax/peppol-commons)):\n    * `truststore/2025/smp-prod-truststore.p12` - contains the trust certificates for Peppol G3 production only (root, SMP, Directory, SML)\n    * `truststore/2025/smp-test-truststore.p12` - contains the trust certificates for Peppol G3 test only (root, SMP, Directory, SML)\n    * `truststore/2018/smp-prod-truststore.jks` - contains the trust certificates for Peppol G2 production only (root, SMP, Directory, SML)\n    * `truststore/2018/smp-pilot-truststore.jks` - contains the trust certificates for Peppol G2 pilot only (root, SMP, Directory, SML)\n* **`smpclient.truststore.password`**: the password to access the trust store. By default the password `peppol` is used. This password is valid for all built-in trust stores mentioned above.\n\n* **`http.proxy.host`** (before v8.7.2: **`http.proxyHost`**): the host name or IP address to be used as a HTTP proxy for **all** hosts. If you need proxy exemptions use the `http.proxy.nonProxyHosts` configuration.\n* **`http.proxy.port`** (before v8.7.2: **`http.proxyPort`**): the port of the HTTP proxy. The port must be specified and has no default value. If you need proxy exemptions use the `http.proxy.nonProxyHosts` configuration.\n* **`http.proxy.username`** (before v8.7.2: **`http.proxyUsername`**): the username for the HTTP proxy. This property takes only effect if proxy host and proxy port are defined. \n* **`http.proxy.password`** (before v8.7.2: **`http.proxyPassword`**): the password for the HTTP proxy. This property takes only effect if proxy host, proxy port and proxy username are defined.\n* **`http.proxy.nonProxyHosts`** (before v8.7.2: **`http.nonProxyHosts`**) (since v6.2.4): A pipe separated list of non-proxy hosts. E.g. `localhost|127.0.0.1`.\n* (deprecated since v8.7.2) **`http.useSystemProperties`** (since v5.2.4): if `true` the system properties (=JVM properties) for HTTP configuration are used for setting up the connection. This implies that the properties `http.proxyHost`, `http.proxyPort`, `http.proxyUsername` and `http.proxyPassword` are ineffective! The default value is `false`. Deprecated since v8.7.2\n* **`http.connect.timeout.ms`** (since v7.0.4): set the connect timeout in milliseconds. The default value is `5000` meaning 5 seconds.\n* **`http.response.timeout.ms`** (since v8.8.0; before **`http.request.timeout.ms`**): set the response timeout in milliseconds. The default value is `10000` meaning 10 seconds.\n\n### Specifying a proxy server\n\nA proxy server can be specified in two ways:\n* A single proxy server for **all** hosts - no exemptions. This can be specified in the configuration file for all `SMPClient` instances or per `SMPClient` instance (same for BDXR client - for all clients based on `AbstractGenericSMPClient`).\n* A more complex setup based on the JVM system properties (based on https://docs.oracle.com/javase/8/docs/api/java/net/doc-files/net-properties.html). This can also be specified in the configuration file to enable the usage for all `SMPClient` instances or on a per-instance basis.\n\n**Specify a global proxy server**\nThe SMP client supports a proxy server. By default the proxy specified in the configuration file (see above) is used (since v4.3.0).\n\nAlternatively call the method `setProxy (org.apache.http.HttpHost)` on an `SMPClient` or `SMPClientReadOnly`. This means you can specify the proxy on a per-call basis.\nProxy authentication is available since v5.2.5 by invoking `setProxyCredentials (org.apache.http.auth.Credentials)` on the SMP or BDXR client.\n  \n### Example usage\n\nGet the endpoint URL for a participant using a special document type and process:\n\n```java\n    // The Peppol participant identifier\n    final IParticipantIdentifier aPI_AT_Test = PeppolIdentifierFactory.INSTANCE.createParticipantIdentifierWithDefaultScheme (\"9915:test\");\n\n    // Create the main SMP client using the production SML\n    final SMPClientReadOnly aSMPClient = new SMPClientReadOnly (PeppolURLProvider.INSTANCE,\n                                                                aPI_AT_Test,\n                                                                ESML.DIGIT_TEST);\n    final String sEndpointAddress = aSMPClient.getEndpointAddress (aPI_AT_Test,\n                                                                   EPredefinedDocumentTypeIdentifier.INVOICE_EN16931_PEPPOL_V30,\n                                                                   EPredefinedProcessIdentifier.BIS3_BILLING,\n                                                                   ESMPTransportProfile.TRANSPORT_PROFILE_PEPPOL_AS4_V2);\n    // Endpoint address should be \"https://test.erechnung.gv.at/as4\"\n    System.out.println (\"The Austrian government test AS4 AP that handles invoices in Peppol BIS 3 is located at: \" +\n                        sEndpointAddress);\n```\n\nIf you don't need the DNS lookup you can use the URL of the SMP directly (equivalent to the previous example):\n\n```java\n    // The Peppol participant identifier\n    final IParticipantIdentifier aPI_AT_Test = PeppolIdentifierFactory.INSTANCE.createParticipantIdentifierWithDefaultScheme (\"9915:test\");\n\n    // Create the main SMP client using the production SML\n    final SMPClientReadOnly aSMPClient = new SMPClientReadOnly (URLHelper.getAsURI (\"http://B-85008b8279e07ab0392da75fa55856a2.iso6523-actorid-upis.acc.edelivery.tech.ec.europa.eu\"));\n    final String sEndpointAddress = aSMPClient.getEndpointAddress (aPI_AT_Test,\n                                                                   EPredefinedDocumentTypeIdentifier.INVOICE_EN16931_PEPPOL_V30,\n                                                                   EPredefinedProcessIdentifier.BIS3_BILLING,\n                                                                   ESMPTransportProfile.TRANSPORT_PROFILE_PEPPOL_AS4_V2);\n\n    // Endpoint address should be \"https://test.erechnung.gv.at/as4\"\n    System.out.println (\"The Austrian government test AS4 AP that handles invoices in Peppol BIS 3 is located at: \" +\n                        sEndpointAddress);\n```\n\n# Building from source\n\nThis project is meant to be build by Maven 3.x.\nIt requires at least Java 17 to be build.\nTo build simply call `mvn clean install` in the root folder.\n\nWhen integrating this in your IDE, ensure to run `mvn process-sources` first, so that the automatically generated files are present.\nFor the subprojects `peppol-id`, `peppol-commons`, `peppol-sbdh` and `peppol-sml-client` add `target/generated-sources/xjc` to your buildpath afterwards.\n\n# Maven usage\n\nAdd the following to your pom.xml to use this artifact, replacing `x.y.z` with the latest version number (see below):\n\n```xml\n\u003cdependency\u003e\n  \u003cgroupId\u003ecom.helger.peppol\u003c/groupId\u003e\n  \u003cartifactId\u003epeppol-id\u003c/artifactId\u003e\n  \u003cversion\u003ex.y.z\u003c/version\u003e\n\u003c/dependency\u003e\n\n\u003cdependency\u003e\n  \u003cgroupId\u003ecom.helger.peppol\u003c/groupId\u003e\n  \u003cartifactId\u003epeppol-commons\u003c/artifactId\u003e\n  \u003cversion\u003ex.y.z\u003c/version\u003e\n\u003c/dependency\u003e\n\n\u003cdependency\u003e\n  \u003cgroupId\u003ecom.helger.peppol\u003c/groupId\u003e\n  \u003cartifactId\u003epeppol-testfiles\u003c/artifactId\u003e\n  \u003cversion\u003ex.y.z\u003c/version\u003e\n\u003c/dependency\u003e\n\n\u003cdependency\u003e\n  \u003cgroupId\u003ecom.helger.peppol\u003c/groupId\u003e\n  \u003cartifactId\u003epeppol-sbdh\u003c/artifactId\u003e\n  \u003cversion\u003ex.y.z\u003c/version\u003e\n\u003c/dependency\u003e\n\n\u003cdependency\u003e\n  \u003cgroupId\u003ecom.helger.peppol\u003c/groupId\u003e\n  \u003cartifactId\u003epeppol-sml-client\u003c/artifactId\u003e\n  \u003cversion\u003ex.y.z\u003c/version\u003e\n\u003c/dependency\u003e\n\n\u003cdependency\u003e\n  \u003cgroupId\u003ecom.helger.peppol\u003c/groupId\u003e\n  \u003cartifactId\u003epeppol-smp-client\u003c/artifactId\u003e\n  \u003cversion\u003ex.y.z\u003c/version\u003e\n\u003c/dependency\u003e\n\n\u003cdependency\u003e\n  \u003cgroupId\u003ecom.helger.peppol\u003c/groupId\u003e\n  \u003cartifactId\u003epeppol-directory-businesscard\u003c/artifactId\u003e\n  \u003cversion\u003ex.y.z\u003c/version\u003e\n\u003c/dependency\u003e\n\n\u003cdependency\u003e\n  \u003cgroupId\u003ecom.helger.peppol\u003c/groupId\u003e\n  \u003cartifactId\u003epeppol-mlr\u003c/artifactId\u003e\n  \u003cversion\u003ex.y.z\u003c/version\u003e\n\u003c/dependency\u003e\n\n\u003cdependency\u003e\n  \u003cgroupId\u003ecom.helger.peppol\u003c/groupId\u003e\n  \u003cartifactId\u003epeppol-mls\u003c/artifactId\u003e\n  \u003cversion\u003ex.y.z\u003c/version\u003e\n\u003c/dependency\u003e\n\n\u003cdependency\u003e\n  \u003cgroupId\u003ecom.helger.peppol\u003c/groupId\u003e\n  \u003cartifactId\u003edbnalliance-commons\u003c/artifactId\u003e\n  \u003cversion\u003ex.y.z\u003c/version\u003e\n\u003c/dependency\u003e\n\n\u003cdependency\u003e\n  \u003cgroupId\u003ecom.helger.peppol\u003c/groupId\u003e\n  \u003cartifactId\u003edbnalliance-xhe\u003c/artifactId\u003e\n  \u003cversion\u003ex.y.z\u003c/version\u003e\n\u003c/dependency\u003e\n\n\u003cdependency\u003e\n  \u003cgroupId\u003ecom.helger.peppol\u003c/groupId\u003e\n  \u003cartifactId\u003ehredelivery-commons\u003c/artifactId\u003e\n  \u003cversion\u003ex.y.z\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\nAlternatively use the following code in your `dependencyManagement` section to use it as a BOM:\n\n```xml\n\u003cdependency\u003e\n  \u003cgroupId\u003ecom.helger.peppol\u003c/groupId\u003e\n  \u003cartifactId\u003epeppol-commons-parent-pom\u003c/artifactId\u003e\n  \u003cversion\u003ex.y.z\u003c/version\u003e\n  \u003ctype\u003epom\u003c/type\u003e\n  \u003cscope\u003eimport\u003c/scope\u003e\n\u003c/dependency\u003e\n```\n\nNote: prior to v8.1.0 the Maven groupId was `com.helger`.\n\nThe binary version of this library can be found on https://repo1.maven.org/maven2/com/helger/peppol/ \nThey depend on several other libraries so I suggest you are going for the Maven source integration.\n\n# References\n\n* [Peppol Policy for the use of identifiers v4.x](https://docs.peppol.eu/edelivery/)\n* [Peppol Business Message Envelope (SBDH) v2.x](https://docs.peppol.eu/edelivery/)\n\n# News and noteworthy\n\nv12.4.3 - 2026-04-29\n* Requires ph-commons 12.2.4 or later\n* `TrustStoreBasedX509KeySelector` got new settings `revocationCheckMode` and `unknownRevocationStatusReject` to control how the new ph-security 12.2.4 `ECertificateCheckResult.REVOCATION_STATUS_UNKNOWN` is handled. Default for `unknownRevocationStatusReject` is `true`, preserving the pre-12.2.4 behaviour of treating an undeterminable revocation status as \"revoked\"\n* Added the same two settings on `SMPHttpResponseHandlerSigned` and `AbstractGenericSMPClient` so they can be configured per SMP client and are forwarded into the response handler / key selector\n* Removed the Peppol G2 certificates from the default `PeppolTrustedCA` objects\n\nv12.4.2 - 2026-04-26\n* Requires ph-commons 12.2.0 or later\n* Removed the Peppol G2 certificates from the default `truststore/2025/` folder truststores. Only G3 is remaining\n* Moved the file `complete-truststore.jks` into the `2018` subfolder as it is no longer relevant\n* Marked all Peppol G2 CAs as deprecated - the \"2018\" truststores are no longer relevant for production use\n* Added new class `MozillaNSSTrustStore` for Mozilla NSS root certificate trust store, used for TLS connection validation (as opposed to Peppol-specific AS4 payload signing/encryption)\n* Removed OSGI bundling\n* Added new `globalsign gcc r3 dv tls ca 2020 (globalsign)` into all predefined Peppol SMP and SML truststores\n\nv12.4.1 - 2026-04-09\n* Class `PeppolMLSBuilder` now has a customizable identifier factory\n* Updated to Peppol eDEC Code Lists v9.6\n\nv12.4.0 - 2026-03-20\n* Changed the default Peppol SML coordinates to the new OpenPeppol SML using domain `participant.sml.[prod|test].tech.peppol.org`\n* Deprecated `ESML.DIGIT_PRODUCTION` and `ESML.DIGIT_TEST` in favour of `ESML.PEPPOL_PRODUCTION` and `ESML.PEPPOL_TEST`\n* Updated `EPeppolNetwork` to use the new OpenPeppol SML entries\n* Removed old backwards-compatibility checks in `SMPClientConfiguration` (legacy system property and config file fallbacks)\n\nv12.3.12 - 2026-03-10\n* Deprecated constants in `CPeppolMLS` in favour of the ones in `SPIDHelper`\n* `AbstractSMPResponseHandler.handleResponse` now throws an `ExtendedHttpResponseException` instead of a `HttpResponseException`\n* Extended the API of the Peppol MLS nested builders\n* The Peppol \"lax\" identifier factory now allows Italian NSO identifiers\n\nv12.3.11 - 2026-03-02\n* `PeppolSBDHData(Reader|Writer)` now trims values from and to XML. See [#70](https://github.com/phax/peppol-commons/issues/70) - thx @wartab\n* Extracted method `PeppolSBDHData.createRandomSBDHInstanceIdentifier()`\n* Extended `PeppolMLSBuilder`, `PeppolMLSLineResponseBuilder` and `PeppolMLSLineResponseResponseBuilder` with getters\n* Created new methods to retrieve URI encoded identifiers in `PeppolSBDHData`\n* Fixed default caching time in `CachingSMPClientReadOnly` from 15 millis to 15 minutes\n\nv12.3.10 - 2026-02-26\n* Added constant `EPeppolMLSType.DEFAULT` mapped to `ALWAYS_SEND`\n* The internal NAPTR resolver only cuts a trailing dot from the DNS name and not any character\n* Added new class `CachingSMPClientReadOnly` to cache Peppol SMP responses (default: 15 minutes)\n\nv12.3.9 - 2026-02-17\n* If an inbound message contains an invalid `MLS_TO` value, it is no longer an error but only a warning\n* The verification of `MLS_TO` value was improved to include the full SPIS regular expression check\n* Added new regular expression constant `PeppolIdentifierHelper.REGEX_SEAT_ID`\n* Added new regular expression constant `CPeppolMLS.REGEX_SPID`\n* Extended `ESML` with the constants for the new insourced Peppol SMLs\n\nv12.3.8 - 2026-02-02\n* Deprecated class `PeppolTrustStores.Config2018` in favour of the `PeppolTrustStores.Config2025`\n* Added new class `CPeppolCommonsVersion` to track the peppol-commons version used\n* Improved the default truststore configuration for SMP client to match the one for AS4\n\nv12.3.7 - 2026-01-23\n* Fixed an error in `EPeppolNetwork.getFromSMLInfo` if an `ESML` was passed\n* Added new interface `IPeppolServiceDomain`\n* Added new interface `IPeppolNetwork`\n* Deprecated the possibility to disable charset checks in `PeppolIdentifierHelper`\n* The method `PeppolIdentifierFactory.isParticipantIdentifierValueValid` now correctly follows the Peppol Policy for use of Identifiers instead of all the ISO-8859-1 characters. This **may be a breaking change** if you have created something that is not following the rules.\n\nv12.3.6 - 2026-01-13\n* Added additional MLS constants in `CPeppolMLS`\n* Added new class `SPIDHelper` which adds some Peppol SPIS/SPID helper methods\n* Deprecated the possibility to disable the checking for SBDH Country C1 in `PeppolSBDHDataReader`\n* Added new method `EPeppolNetwork.getFromESMLOrNull`\n* Extended `I(Participant|DocumentType|Process)IdentifierFactory` with methods to create identifiers based on identifiers from other factories\n\nv12.3.5 - 2026-01-02\n* Added the \"Fina RDC 2025\" certificate to the production trusted CAs in `HREDeliveryTrustedCA`\n\nv12.3.4 - 2025-12-29\n* Added constructor overload `HRMPSClientReadOnly(URI)`\n* Updated to Peppol eDEC Code Lists v9.5\n* Added new class `CHREDeliveryID`\n\nv12.3.3 - 2025-12-16\n* Updated to ph-commons 12.1.1\n* Updated the MLS Schematron rules 1.0.1 to match the MLS 1.1.0 Member Review version\n* Fixed an issue with certificate parsing on BDXR 2 redirect processing\n\nv12.3.2 - 2025-12-15\n* Added new in-between exception class `SMPClientHttpException` which gives access to the returned HTTP Status code\n* The class `SMPDNSResolutionException` received a separate \"error code\" field to make it better differentiatable. See [#67](https://github.com/phax/peppol-commons/issues/67) - thx @wildhai\n\nv12.3.1 - 2025-12-08\n* Added \"Fina RDC 2025\" CA to predefined HR production truststore\n* Disabled following of HTTP Redirects in Peppol SMP Client HTTP settings\n\nv12.3.0 - 2025-11-26\n* Added new methods to interface `IPeppolParticipantIdentifierScheme` that were already implemented in `EPredefinedParticipantIdentifierScheme`\n* Moved class `EBusinessCardVersion` to top-level\n* Extracted interface `IPDBusinessCardMarshallerCustomizer` instead of complex `BiConsumer`\n* Extracted methods `PDBusinessCardHelper.createDefaultMarshallerCustomizer`\n* Extended interface `IPeppolParticipantIdentifierScheme` with methods `getCountryCode` and `getSchemeName`\n* Removed the requirement on all BDXL based lookups that the DNS zone must end with a dot. Works without it as well.\n* Added method `getServiceGroup` to interface `IBDXRServiceGroupProvider`\n* Moved methods from `IBDXRServiceMetadataProvider` to `IBDXRExtendedServiceMetadataProvider` - similar as for Peppol data\n\nv12.2.0 - 2025-11-16\n* Updated to ph-commons 12.1.0\n* Using JSpecify annotations\n\nv12.1.3 - 2025-11-14\n* Fixed loading of `SMLInfo` objects from XML, so that empty URL suffixes are properly maintained\n* Extended `EHREDeliveryStage` API\n\nv12.1.2 - 2025-11-13\n* Method `SMPClientReadOnly.getAllDocumentTypes` is now capable of handling percent encoded participant IDs in URLs\n* Method `BDXRClientReadOnly.getAllDocumentTypes` is now capable of handling percent encoded participant IDs in URLs\n\nv12.1.1 - 2025-11-12\n* Class `HREDeliveryNaptrURLProvider` now uses `Meta:SMP` as the NAPTR service to reflect reality\n* Peppol MLS Schematron was updated, to fix an issue with lowercase SPIS values\n* Added new class `HREDeliveryTrustedCA`\n* Added new enum entry `ESMPTransportProfile.TRANSPORT_PROFILE_ERACUN_AS4_V1`\n* Renamed enum entry `ESMPTransportProfile.TRANSPORT_PROFILE_DBNA_AS4_v1` to `TRANSPORT_PROFILE_DBNA_AS4_V1`\n\nv12.1.0 - 2025-10-29\n* Class `SMLInfo` was modified to be an immutable class and to use a builder instead\n* Class `SMLInfo` was modified to make the URL suffixes for managing SMPs and participants customizable (required for HR)\n\nv12.0.5 - 2025-10-26\n* SMP client does not emit any warnings on https usage if the date is \u0026ge; 2025-11-01\n* Deprecated class `PeppolConfigurableURLProvider` in favour of `PeppolNaptrURLProvider` which works fine\n* Added initial predefined truststores for HR eDelivery\n* Added new class `HREDeliveryMPSClientHelper`\n\nv12.0.4 - 2025-10-06\n* Updated to eDEC Code Lists v9.4\n\nv12.0.3 - 2025-09-18\n* Added new CA `globalsign atlas r3 ov tls ca 2025 q3 (globalsign)` to all SML related trust stores\n* Included preliminary version for HR eDelivery\n\nv12.0.2 - 2025-09-18\n* Class `AbstractBDXLURLProvider` now implements `IBDXLURLProvider` directly\n* Deprecated methods `ISMPURLProvider.getSMPURLOfParticipant`\n* Removed the default method of `IPeppolURLProvider.getSMPURIOfParticipant`\n\nv12.0.1 - 2025-08-28\n* Fixed `SMPExtension.equals` and `SMPExtension.hashCode` because of the DOM `Element` member\n\nv12.0.0 - 2025-08-26\n* Requires Java 17 as the minimum version\n* Updated to ph-commons 12.0.0\n* Removed all code marked as deprecated for removal\n* Removed the truststore fallback for the SMP Client configuration - so make sure you configured the `smpclient.truststore.*` properties!\n\nv11.0.6 - 2025-08-12\n* Replaced the Let's Encrypt R3 CA with the E5 CA in the predefined trust stores\n\nv11.0.5 - 2025-08-12\n* Updated to ph-web 10.5.0\n* The `SMPHttpClientSettings` now disables the HTTP protocol upgrade by default, which was introduced by Apache HttpClient 5.4\n\nv11.0.4 - 2025-07-20\n* Added Peppol PKI G3 certificates into `PeppolTrustedCA`\n\nv11.0.3 - 2025-07-17\n* Updated to Peppol eDEC Code Lists v9.3\n\nv11.0.2 - 2025-07-16\n* Added support for the new Peppol G3 PKI and preconfifured trust stores (using PKCS12 format)\n* Deprecated the `complete-truststore.jks` constant - it will not be taken over for the Peppol G3 PKI!\n\nv11.0.1 - 2025-06-25\n* Fixed the determination of the Peppol Certificate subject for a Redrect, if no `X509SubjectName` element is present.\n\nv11.0.0 - 2025-06-02\n* Updated to Peppol eDEC Code Lists v9.2\n* Removed `Pfuoi420` annotation and all methods that were marked with it. This means, this version only supports Peppol Policy for use of Identifiers v4.3.0 or later.\n* Added a `getClone` method to the the NAPTR based URL providers\n* Removed all deprecated methods and classes, that were marked for removal in the previous releases\n* Removed the MLS builder \"Response Code\" per Line Response\n* The `PeppolMLSLineResponseBuilder` can now deal with multiple responses per \"Line Response\"\n\nv10.5.1 - 2025-05-29\n* The `PeppolMLSBuilder` now correctly requires the issue time with a mandatory time zone\n\nv10.5.0 - 2025-04-15\n* Moved the interface `ISMPFollowRedirectCallback` to its own package\n* Extended BDXR1 and BDXR2 clients to also support the `ISMPFollowRedirectCallback`\n\nv10.4.3 - 2025-05-14\n* Introduced new interface `ISMPFollowRedirectCallback`\n* The `ISMPServiceMetadataProvider.getServiceMetadata(OrNull)` methods received an overload with an optional `ISMPFollowRedirectCallback`\n\nv10.4.2 - 2025-05-13\n* Deprecated the eB2B specific trust stores\n\nv10.4.1 - 2025-05-11\n* Disabled certain SBDH validations if they payload is non-XML\n* Added a predefined method in `PeppolSBDHData` to determine if a payload is XML or not.\n\nv10.4.0 - 2025-05-09\n* All created NAPTR URLs are now created in lowercase only\n* Improved the `PeppolMLSBuilder` so that it can also be filled from existing `ApplicationResponse` objects\n* Made Peppol Participant Identifier Value checks more strict, so that they must start with 4 digits and a colon (as in `0000:id`)\n* Added support for `MLS_TO` and `MLS_TYPE` SBDH entries\n\nv10.3.2 - 2025-04-29\n* Added new class `PeppolConfigurableURLProvider` that allows to switch between CNAME and NAPTR based lookups\n\nv10.3.1 - 2025-04-29\n* Deprecated class `PeppolURLProvider`\n* Using class `PeppolNaptrURLProvider` instead of class `PeppolURLProvider` to comply to the Peppol Policy for use of Identifiers 4.4.0\n\nv10.3.0 - 2025-04-28 (supports Peppol Policy for use of Identifiers up to 4.4.0)\n* Extended Peppol participant identifier value length to 135 for Peppol Policy for use of Identifiers 4.4.0\n* Moved annotations`@Pfuoi420`, `@Pfuoi430` and `@Pfuoi440` to the submodule `peppol-id` into package `com.helger.peppolid.peppol`\n* This release deprecates all Policy for use of Identifiers 4.2.0 related classes and methods as they become obsolete on May 15th, 2025\n\nv10.2.1 - 2025-04-14\n* Renamed all classes `DBNAllianceXHEDocument*` to `DBNAllianceXHEData*`\n* Fixed type case error in regards to XHE `PayloadContent`\n\nv10.2.0 - 2025-04-11\n* Requires at least ph-commons 11.2.1\n* Added new submodule `dbnalliance-commons` containing shared DBNAlliance stuff\n* Removed enum `EPeppolCertificateCheckResult` in favour of `ECertificateCheckResult` from ph-security\n* Deprecated class `PeppolCAChecker` in favour of `TrustedCAChecker` from ph-security\n* Deprecated remaining methods in `PeppolCertificateHelper` in favour of new class `PeppolTrustedCA`\n* Deprecated class `PeppolKeyStoreHelper` in favoid of new class `PeppolTrustStores`\n\nv10.1.0 - 2025-03-16\n* Added new submodule `peppol-mls` to support the member review version of Peppol MLS\n* Removed submodule `peppol-ap-helper` as it is not a top-level project at https://github.com/phax/peppol-ap-support\n\nv10.0.2 - 2025-03-04\n* Updated to Peppol eDEC Code Lists v9.1\n* Updated to Peppol eDEC Code Lists XSD v2.5\n\nv10.0.1 - 2025-02-26\n* Fixed a stupid copy paste in class `DBNAlliancePayload`. See [#59](https://github.com/phax/peppol-commons/issues/59) - thx @taalexlistex\n* Fixed predefined Customization ID for DBNAlliance. See [#60](https://github.com/phax/peppol-commons/issues/60) - thx @taalexlistex\n* Added support for eB2B AP Production Trust Store as a predefined truststore\n\nv10.0.0 - 2025-02-03\n* Updated to ph-commons 11.2.0\n* Added new submodule `peppol-ap-helper`\n* Removed all deprecated classes, methods and fields\n* Moved the following class and methods into ph-commons and removed the local classes and methods\n    * Moved `IURLDownloader` to ph-commons\n    * Moved `ExpiringObject` to ph-datetime\n    * Moved `TrustedCACertificates`, `CRLCache`, `CRLDownloader`, `CRLHelper`, `AbstractRevocationCheckBuilder`, `CertificateRevocationCheckerDefaults`, `ERevocationCheckMode`, `ERevoked`, `IRevokedIndicator` and `RevocationCheckResultCache` to ph-security\n    * Moved method `PeppolKeyStoreHelper.getAllTrustedCertificates` to `KeyStoreHelper`\n* Renamed `EPeppolSBDHDocumentReadError` to `EPeppolSBDHDataError` and moved to `com.helger.peppol.sbdh`\n* Renamed `PeppolSBDHDocumentReader` to `PeppolSBDHDataReader` and moved to `com.helger.peppol.sbdh`\n* Renamed `PeppolSBDHDocumentReadException` to `PeppolSBDHDataReadException` and moved to `com.helger.peppol.sbdh`\n* Renamed `PeppolSBDHDocumentWriter` to `PeppolSBDHDataWriter` and moved to `com.helger.peppol.sbdh`\n* Removed interface `IParticipantIdentifierScheme`\n* Renamed class `ParticipantIdentifierSchemeManager` to `PeppolParticipantIdentifierSchemeManager`\n\nv9.7.2 - 2025-01-08\n* Updated to OpenPeppol eDEC Code Lists v9.0\n\nv9.7.1 - 2024-12-20\n* Re-release of 9.7.0\n\nv9.7.0 - 2024-12-20\n* Reworked the Peppol Document Type Identifier data model to handle non-XML syntax specific IDs as well\n* Introduced new classes `(I)PeppolGenericDocumentTypeIdentifierParts` to handle the generic identifier parts\n* Deprecated classes `(I)BusdoxDocumentTypeIdentifierParts` for removal\n\nv9.6.1 - 2024-12-16\n* Added new class `PeppolNaptrURLProvider`\n* Fixed the Peppol Directory URL of `EPeppolNetwork.PRODUCTION`    \n* Added new method `PeppolSBDHData.areAllFieldsSet (Consumer\u003cString\u003e)`\n\nv9.6.0 - 2024-11-10 (supports Peppol Policy for use of Identifiers up to 4.3.0)\n* Requiring ph-commons 11.1.10\n* Deprecated methods `SMPClientReadOnly.getCompleteServiceGroup(OrNull)` and `getServiceGroupReferenceList(OrNull)` because the underlying APIs are non-standard\n* Extracted methods from `ISMPServiceMetadataProvider` into `ISMPExtendedServiceMetadataProvider`\n* Updated the DBNAlliance Pilot domain name\n* Moved method `PeppolCertificateHelper.getAllTrustedCertificates` to class `PeppolKeyStoreHelper`\n* Added new methods to support Peppol Policy for use of Identifiers 4.3.0\n* Added new annotations `@Pfuoi420` and `@Pfuoi430` to hint methods that are specification specific\n* Added support for eB2B AP Pilot Trust Store as a predefined truststore\n* Renamed class `CertificateRevocationChecker` to `CertificateRevocationCheckerDefaults`\n* Made class `RevocationCheckBuilder` a top-level class\n* Totally reworked class `PeppolCertificateChecker` to add flexibility and support multiple Peppol CAs\n* Added new class `PeppolCAChecker` to support in the verification of Peppol certificates based on CAs\n* Renamed class `PeppolRevocationCache` to `RevocationCheckResultCache`\n* Added new enum `EPeppolServiceDomain` to be able to provide specific settings for specific service domains\n* Added new enum `EPeppolNetwork` to be able to easily differentiate the Peppol Network stages\n\nv9.5.1 - 2024-08-11\n* Make sure that wildcard lookups including a `*` in the Customization ID will always fail\n* Added additional `SMPClientReadOnly.getWildcardServiceMetadataOrNull` overload\n* Extended `ISMPServiceMetadataProvider` and `ISMPServiceGroupProvider` interfaces\n\nv9.5.0 - 2024-07-29\n* Updated to dnsjava 3.6 fixing CVE-2024-25638\n* Added new submodule `dbnalliance-xhe`. See [#53](https://github.com/phax/peppol-commons/pull/53) - thx @robinsongarciax\n* Marked certain `ESMPTransportProfile` entries as \"deleted\"\n* Added new SMP client exception `SMPClientParticipantNotFoundException` to indicate non-existing Service Groups. This was previously covered in `SMPClientNotFoundException`.\n* Updated to OpenPeppol eDEC Code Lists v8.9\n\nv9.4.0 - 2024-05-24\n* Renamed `IParticipantIdentifierScheme` to `IPeppolParticipantIdentifierScheme`\n* Tried to make the usage of `IIdentifierFactory` more customizable\n* Made `AbstractRevocationCheckBuilder` and `PeppolRevocationCache` top-level classes\n* Extracted class `TrustedCACertificates` to hold a list of certificates\n* Deprecated a lot of methods in `PeppolCertificateChecker` in favour of new APIs. Main idea is to simplify multi-certificate handling.\n\nv9.3.6 - 2024-04-24\n* Added new class `PeppolLaxIdentifierFactory`\n* Added new enum entry `ESMPIdentifierType.PEPPOL_LAX` for SMP handling. See [smp#275](https://github.com/phax/phoss-smp/issues/275).\n\nv9.3.5 - 2024-04-23\n* Updated to OpenPeppol eDEC Code Lists v8.8\n\nv9.3.4 - 2024-04-04\n* Added new classes to support the DBNA network as well (`DBNAURLProviderSMP`, `EDBNASML`)\n* Allowing empty identifier schemes as being present (for DBNA). See `IIdentifier.hasScheme ()`\n\nv9.3.3 - 2024-03-29\n* Ensured Java 21 compatibility\n\nv9.3.2 - 2024-03-29\n* Added the DBNA AS4 v1 profile to `ESMPTransportProfile`. See [#52](https://github.com/phax/peppol-commons/issues/52)\n\nv9.3.1 - 2024-03-04\n* Updated to ph-ubl 9.0.0 (affects only `peppol-mlr`)\n* Changed the default checking mode in `CertificateRevocationChecker` from `CRL_BEFORE_OCSP` to `CRL` to avoid any fallback to OCSP\n* Improved logging of certificate revocation checks\n\nv9.3.0 - 2024-01-22\n* `PredefinedProcessIdentifierManager` now internally works with the full URI encoded process ID and not just the value\n* Improved the CRL caching API and unified it with the Peppol certificate revocation checker cache\n* Via `CRLCache` constructor a custom `CRLDownloader` can be configured. The default solution uses the Java runtime `HttpURLConnection`.\n\nv9.2.3 - 2024-01-10\n* Changed the default checking mode in `CertificateRevocationChecker` from `OCSP` to `CRL_BEFORE_OCSP` due to https://github.com/phax/phase4/issues/124#issuecomment-1884398195\n\nv9.2.2 - 2024-01-08\n* Extended `PeppolSBDHDocumentReader` API to allow to disable check for mandatory C1 Country Code via `.setCheckForCountryC1(boolean)`\n\nv9.2.1 - 2024-01-07\n* Updated to ph-web 10.1.7\n* Added interface method `ISMPServiceMetadataProvider.getWildcardServiceMetadataOrNull`\n\nv9.2.0 - 2024-01-02\n* Made `COUNTRY_C1` in SBDH mandatory\n* Updated the Peppol default trust stores to remove the old, soon expiring GlobalSign certificates. It was for a previous SML/SMK setup only.\n* Moved the logic of `PeppolSBDHDocument` to `PeppolSBDHData`. The old class became deprecated.\n* Extracted the Peppol SBDH validation into a separate method `PeppolSBDHDocumentReader.validateData`\n* Extracted class `PeppolWildcardSelector` in preparation to support wildcard matching with different algorithms\n\nv9.1.3 - 2023-12-10\n* Fixed the \"state\" in `ESMPTransportProfile` predefined values\n\nv9.1.2 - 2023-12-06\n* Added new submodule `peppol-mlr`. It contains data structures to read and write Peppol Message Level Response messages.\n\nv9.1.1 - 2023-11-22\n* Added the \"peppol-directory-businesscard\" to the known submodules in the BOM part of pom.xml\n* Updated to OpenPeppol eDEC Code Lists v8.7\n* Improved the Peppol Document Type Identifier value syntax checks - for `busdox-docid-qns` and for `peppol-doctype-wildcard`\n* Improved the Peppol Process Identifier value syntax checks\n* Identifier value checks can now be different per identifier scheme\n\nv9.1.0 - 2023-11-09\n* Added new submodule `peppol-directory-businesscard`. It is meant to replace the `phoss-directory-businesscard` one.\n\nv9.0.8 - 2023-08-22\n* Updated to OpenPeppol eDEC Code Lists v8.6\n* Added `CRLHelper.setCRLOfURL` to manually add an externally downloaded CRL\n* Added `CRLHelper.getCRLFromURL` now considers a maximum caching duration (defaults to 1 day)\n* Methods `PredefinedDocumentTypeIdentifierManager.getDocumentTypeIdentifierOfID` and `PredefinedDocumentTypeIdentifierManager.containsDocumentTypeIdentifierWithID` now require the full identifier, incl. the scheme, to work around potentially new ambiguities\n* Extended `CertificateRevocationChecker` builder with `crlCachingDuration(Duration)`\n* Added new enum `EPeppolCertificateCheckResult.NOT_CHECKED` for [phase4/#159](https://github.com/phax/phase4/issues/159)\n\nv9.0.7 - 2023-08-01\n* Updated to ph-commons 11.1\n\nv9.0.6 - 2023-05-25\n* Improved support for the SBDH field `COUNTRY_C1`\n\nv9.0.5 - 2023-05-17\n* Added possibility to customize secure validation in `SMPHttpResponseHandlerSigned` (for the Java 17 SHA-1 issue)\n* Added possibility to customize SMP Client to enabled or disable the secure validation via `setSecureValidation` (for the Java 17 SHA-1 issue)\n* Added support for the SBDH field `COUNTRY_C1` to fulfill the requirements of the Peppol Business Message Envelope 2.0 specification\n* Fixed the splitting of Peppol Document Type Identifier values, so that `::` can occur in Customization IDs \n\nv9.0.4 - 2023-04-30\n* Deprecated classes `PeppolSBDHPayload(Reader|Writer|Validator)` and `EPeppolSBDHPayloadType`\n* Added new classes `PeppolSBDHPayloadBinaryMarshaller` and `PeppolSBDHPayloadTextMarshaller` instead\n* Extended the API of class `PeppolCertificateChecker` to be able to register custom trusted Peppol certificates, e.g. for the French PoC\n\nv9.0.3 - 2023-04-07\n* Updated to OpenPeppol eDEC Code Lists v8.5.1\n\nv9.0.2 - 2023-04-05\n* Updated to OpenPeppol eDEC Code Lists v8.5\n* Moved internal resources to different folders for overall unifications\n\nv9.0.1 - 2023-03-27\n* Updated to OpenPeppol eDEC Code Lists v8.4 with XSD 2.1\n\nv9.0.0 - 2023-02-19\n* Using Java 11 as the baseline\n* Updated to ph-commons 11\n* Updated to JAXB 4.0 and JAX-WS 4.0\n* Removed deprecated classes and methods\n\nv8.8.6 - 2023-05-25 (backport)\n* Improved support for the SBDH field `COUNTRY_C1`\n\nv8.8.5 - 2023-05-16 (backport)\n* Added support for the SBDH field `COUNTRY_C1` to fulfill the requirements of the Peppol Business Message Envelope 2.0 specification\n\nv8.8.4 - 2023-01-23\n* Updated to OpenPeppol eDEC Code Lists v8.3.1\n\nv8.8.3 - 2023-01-20\n* Added the new enum `ESMPTransportProfileState`\n* Deprecated `ISMPTransportProfile.isDeprecated()` and added `ISMPTransportProfile.getState()` instead\n* Updated to OpenPeppol eDEC Code Lists v8.3\n\nv8.8.2 - 2022-11-24\n* Improved error handling when loading an ill-configured SMP client truststore\n\nv8.8.1 - 2022-11-01\n* Updated to ph-web 9.7.1\n* Extended `SMPJsonResponse` with the versions for BDXR2\n* Deprecated SMP transport profiles `busdox-transport-as2-ver1p0` (Peppol AS2 v1) and `busdox-transport-as2-ver2p0` (Peppol AS2 v2)\n* Extended `PeppolSBDHDocument` API\n* Extended `PeppolSBDHDocumentWriter` API with a \"favour speed\" option\n* Added support for wildcard querying (DDTS) in Peppol SMP client `SMPClientReadOnly.getWildcardServiceMetadataOrNull`\n\nv8.8.0 - 2022-08-17\n* Updated to ph-web 9.7.0\n* Updated to Apache HttpClient 5.x\n* The setters for the trust store in the SMP clients now accept `null`\n* Renamed the SMP client configuration property from `http.request.timeout.ms` to `http.response.timeout.ms`\n\n\nv8.7.6 - 2022-07-12\n* Updated to OpenPeppol eDEC Code Lists v8.2\n\nv8.7.5 - 2022-05-25\n* Deprecated package `com.helger.peppol.codelist` in submodule `peppol-commons` because the code lists are out of date\n* Updated to OpenPeppol eDEC Code Lists v8.1\n\nv8.7.4 - 2022-03-29\n* Fixed an error in `BDXR2ClientReadOnly.getServiceMetadata` when using specific identifier classes\n\nv8.7.3 - 2022-03-28\n* Added a new generic SMP extension data model that works with Peppol, OASIS BDXR SMP v1 and OASIS BDXR SMP v2.\n* Added new class `BPCURLProviderSMP` that works for the BPC market pilot was added\n* Renamed the classes `BDXR2Service(Group|Metadata)Marshaller` to `BDXR2MarshallerService(Group|Metadata)` for consistency with BDXR 1\n* Added a missing namespace mapping to `BDXR2NamespaceContext`\n* Classes `BDXR1NamespaceContext` and `BDXR2NamespaceContext` now offer a static `getInstance` method\n* Added support for handling `ServiceActivationDate` and `ServiceExpirationDate` in the Peppol SMP client. See [issue #38](https://github.com/phax/peppol-commons/issues/38) - thx @Florianisme\n\nv8.7.2 - 2022-03-06\n* Updated to BouncyCastle 1.70\n* Renamed SMP client proxy properties, to match a standard way. The old properties are still supported for backwards compatibility.\n    * `http.proxyHost` is now `http.proxy.host`\n    * `http.proxyPort` is now `http.proxy.port`\n    * `http.proxyUsername` is now `http.proxy.username`\n    * `http.proxyPassword` is now `http.proxy.password`\n    * `http.nonProxyHosts` is now `http.proxy.nonProxyHosts`\n    * `http.useSystemProperties` is now deprecated\n\nv8.7.1 - 2022-01-20\n* Extended base interfaces of predefined identifiers to reflect the new layout.\n\nv8.7.0 - 2022-01-20\n* Fixed some SonarCloud issues\n* Updated to OpenPeppol eDEC Code Lists v8.0 with the new data layout\n\nv8.6.4 - 2021-10-18\n* Added new predefined truststores for SMPs: `truststore/2018/smp-pilot-truststore.jks` and `truststore/2018/smp-prod-truststore.jks`\n* Improved the error messages when reading Peppol SBDH messages.\n\nv8.6.3 - 2021-09-27\n* Verifying all contained `Signature` elements of an SMP response\n* Made the JAXB Marshallers of the SMP clients customizable\n\nv8.6.2 - 2021-07-06\n* Avoid NPE in `SMPClientReadOnly.getServiceMetadata` if the returned server response is not XML\n* Improved debug logging in `SMPHttpResponseHandlerSigned` in case of error\n* Added possibility in `TrustStoreBasedX509KeySelector` to specify a date and time, for which the checks should be performed\n\nv8.6.1 - 2021-05-10\n* Updated to OpenPeppol eDEC Code Lists v7.5\n\nv8.6.0 - 2021-05-02\n* Updated to ph-commons 10.1\n* Changed the JAXB binding for XML Schema date time to `XMLOffset*`\n\nv8.5.2 - 2021-04-30\n* Updated the truststore by removing the old (expired) Let's Encrypt root certificates.\n* Changed the name of the SMP client configuration properties as follows (leaving the old ones in place with a warning message):\n    * `truststore.type` was renamed to `smpclient.truststore.type`\n    * `truststore.path` was renamed to `smpclient.truststore.path`\n    * `truststore.password` was renamed to `smpclient.truststore.password`\n* Extracted class `CertificateRevocationChecker` from `PeppolCertificateChecker` to check certificates\n* Added support for validating with CRL as well\n\nv8.5.1 - 2021-03-26\n* Updated to OpenPeppol eDEC Code Lists v7.4\n\nv8.5.0 - 2021-03-22\n* Updated to ph-commons 10\n* Changed the JAXB binding for XML Schema date time to `Offset*`\n\nv8.4.1 - 2021-02-19\n* Updated the TrustStore to support the new Let's Encrypt root certificates for Peppol Directory\n\nv8.4.0 - 2021-02-16\n* Added constants `CODE_LIST_VERSION` and `CODE_LIST_ENTRY_COUNT` to all the Peppol `EPredefined...Identifier` enums\n* Extended public API of `SMPJsonResponse`\n* Extracted new sub-modules `peppol-id-datatypes` and `peppol-smp-datatypes` with just the generated JAXB classes\n* Changed created package from `com.helger.peppolid` to `com.helger.xsds.peppol.id1`\n* Changed created package from `com.helger.smpclient.peppol.jaxb` to `com.helger.xsds.peppol.smp1`\n\nv8.3.1 - 2020-12-04\n* Started adding support for `peppol-doctype-wildcard`\n* Fixed the consistency check of the \"TypeVersion\" element in Peppol SBDH to also work for non-UBL documents\n\nv8.3.0 - 2020-11-25\n* Reworked the revocation checking configuration for Peppol certificates. Now it is more flexible.\n\nv8.2.7 - 2020-11-23\n* Improved some debug logging\n* Extended `PeppolCertificateChecker` API to be used more flexible\n* Extended checks in `PeppolKeyStoreHelper`\n\nv8.2.6 - 2020-11-18\n* Updated to ph-web 9.5.0\n* Extended `SMPClientReadOnly` and `BDXRClientReadOnly` with further static methods\n* Updated to eDEC code lists 7.3\n\nv8.2.5 - 2020-10-02\n* Fixed the data model created by `SMPClient.saveServiceGroup` and `BDXRClient.saveServiceGroup` in the overload with only the participant identifier\n\nv8.2.4 - 2020-09-28\n* Extended class `PeppolSBDHDocument` to also read the special `BinaryContent` and `TextContent` nodes easily\n\nv8.2.3 - 2020-09-25\n* Allow to disable the value checks when reading Peppol SBDH documents\n\nv8.2.2 - 2020-09-17\n* Updated to Jakarta JAXB 2.3.3\n* Updated to Jakarta JAXWS 2.3.3\n* Updated to ph-sbdh 4.1.1\n* Removed deprecated class `PeppolDNSResolutionException`\n\nv8.2.1 - 2020-09-14\n* 8.2.0 whysoever didn't make it to Maven Central\n\nv8.2.0 - 2020-09-10\n* Removed deprecated class `PeppolKeyStoreHelper.Config2010`\n* Removed all deprecated and replaced methods\n* Improved debug logging in the SMP client\n* SMP client configuration is now read from global configuration and is not necessarily constraint to `smp-client.properties` file. The use of the system properties `peppol.smp.client.properties.path`, `smp.client.properties.path` and `SMP_CLIENT_CONFIG` will no longer work. Use the system property `config.file` or the environment variable `CONFIG_FILE` instead (backwards incompatible change)\n* Class `PeppolDNSResolutionException` was replaced with `SMPDNSResolutionException`\n\nv8.1.8 - 2020-09-02\n* Fixed XML Schema validation of BDXR SMP v2 client\n\nv8.1.7 - 2020-08-30\n* Updated to ph-commons 9.4.7\n* Using Java 8 date and time classes for JAXB created classes\n* Updated to the latest BDMSL WSDL files\n* Reworked the DNS URL provider class hierarchy for greater flexibility. New base class is now `ISMPURLProvider`.\n\nv8.1.6 - 2020-08-25\n* Added re-usable SMP result to JSON conversion\n\nv8.1.5 - 2020-08-20\n* Updated to eDEC Code Lists 7.2\n\nv8.1.4 - 2020-07-15\n* Updated to eDEC Code Lists 7.1\n\nv8.1.3 - 2020-07-11\n* Fixed a missing whitespace in soapAction for SML registration of participants - [issue](https://github.com/phax/phoss-smp/issues/137) - regression from 8.0.6\n\nv8.1.2 - 2020-07-06\n* The creation of the SMP Migration Key was adopted to the effective BDMSL implementation - [issue #37](https://github.com/phax/peppol-commons/issues/37)\n\nv8.1.1 - 2020-06-04\n* Made SMP/BDXR client truststore configurable via the code - [issue #35](https://github.com/phax/peppol-commons/issues/35)\n\nv8.1.0 - 2020-05-26\n* Changed the Maven groupId to `com.helger.peppol`\n* Updated to ph-web 9.3.0 (using ph-dns) (new Maven groupId)\n* Updated to ph-xsds 2.3.0 (new Maven groupId)\n* Deprecated class `NAPTRResolver` in favour of the new `NaptrResolver`\n* `IBDXLURLProvider` takes custom DNS server now as `InetAddress` instead of as `String`\n\nv8.0.7 - 2020-05-06\n* Extended predefined document type ID API\n* Updated Peppol codelists to contain deprecation status on process identifiers\n\nv8.0.6 - 2020-05-05\n* Updated to official Peppol Codelist v7\n* Updated to the official Peppol Codelist XSD files\n* Made NAPTR record \"Service name\" comparison case insensitive to honor RFCs\n\nv8.0.5 - 2020-04-22\n* Extracted `BDXR1NamespaceContext` and `BDXR2NamespaceContext`\n* Made XML Schema validation for SMP clients customizable\n* By default the XML Schema validation for querying service metadata is now enabled (breaking change)\n* Removed methods deprecated in v7.x\n\nv8.0.4 - 2020-04-16\n* Extended the SMP client API with `getAllDocumentTypes` from a service group\n\nv8.0.3 - 2020-04-01 (not a joke)\n* Updated to ph-commons 9.4.1\n\nv8.0.2 - 2020-03-03\n* Updated to dnsjava 3.0.1\n* Added new enum `ESMPIdentifierType`\n* Added `ESMPAPIType.getDisplayName()`\n* Added the upcoming CEF SMK/SML cipher suites\n* A problem with the OCSP checking of SMP certificates was resolved\n* Changed the certificate revocation cache to have a timeout of 6 hours\n\nv8.0.1 - 2020-02-16\n* Updated to ph-web 9.1.9\n* Changed the SMP client HTTP configuration to use the new `HttpClientSettings` class\n\nv8.0.0 - 2020-02-05\n* The SMP client configuration can now also be addressed via the `SMP_CLIENT_CONFIG` environment variable\n* Removed the Peppol PKI v2 certificates from the complete trust store as they expired in January 2020\n* Moved the SMP code from `peppol-commons` to `peppol-smp-client` and adopted package names\n    * The `peppol-smp-client` project was total restructured - everything is now under package `com.helger.smpclient`\n    * The generated classes for the Peppol SMP XSD were moved from `com.helger.peppol.smp` to `com.helger.smpclient.peppol.jaxb`\n* Unified licensing to Apache 2.0    \n\nv7.0.6 - 2020-01-17\n* Updated to Peppol Code List v6\n* Improved the SMP client API\n* Added possibility to customize the \"follow redirects\" setting of the SMP client \n\nv7.0.5 - 2019-12-04\n* Added the new SMK TLS certificate chain to `sml-truststore.jks` and `complete-truststore.jks`\n\nv7.0.4 - 2019-11-26\n* Made SMP client connection timeout and request timeout configurable via the configuration file (see [#33](https://github.com/phax/peppol-commons/issues/33))\n* The new Peppol V6 codelist has no dedicated process code list anymore\n* Integrated the classes `PeppolCerticateChecker` and `EPeppolCertificateCheckResult` from phase4 and extended them\n* The license of submodule `peppol-commons` changed from MPL 2.0 to Apache 2.0 \n\nv7.0.3 - 2019-11-05\n* Started adding support for Code Lists v6 (for preview purposes only)\n* Removed the explicit certificate from directory.peppol.eu because it is renewed too often (see issue [#31](https://github.com/phax/peppol-commons/issues/31))\n* Added new class `PeppolCertificateHelper`\n* Added possibility to customize the User Agent of SMP clients\n* Added X509 certificates as constants in `PeppolKeyStoreHelper`\n\nv7.0.2 - 2019-08-16\n* Using more base types in certain APIs for better interoperability (binary incompatible change)\n* Updated to Peppol Code List v5\n\nv7.0.1 - 2019-06-25\n* Fixed a naming issues for predefined identifier 0195\n\nv7.0.0 - 2019-06-10\n* Started to rework identifier class hierarchies, interfaces and package assignments - the result is incompatible to the 6.x version\n* Started integrating OASIS BDXR SMP v2 CSD01 identifiers into the existing structure\n* Renamed `EsensURLProvider` to `BDXLURLProvider`\n* Using the OASIS BDXR SMP generated code from `ph-xsds-bdxr-smp1` instead of including it manually\n* Updated to ph-xsds-* 2.2.3\n* Enabled XSD validation in JAXB marshallers by default\n* `SMPClient` and `BDXRClient` throw an Exception if the writable REST API parameters don't follow the XSD\n* Added new class `BDXR2ClientReadOnly` as SMP client for OASIS BDXR SMP v2 (WS 06) specification\n* Added new subprobject `peppol-id` that moved all the `com.helger.peppol.identifier` packages to `com.helger.peppolid` \n\nv6.2.5 - 2019-05-07\n* Fixed Java 12 compatibility\n\nv6.2.4 - 2019-05-05\n* SMPClient got the possibility to configure \"non-proxy hosts\" using the configuration file setting `http.nonProxyHosts`\n* Update the Directory trust store to contain the new server certificates for `directory.peppol.eu` and `test-directory.peppol.eu`\n* Added support for the new SMP transport profile `busdox-transport-as2-ver2p0` (Peppol AS2 profile v2)\n* Peppol SBDH now supports reading UBL 2.2\n* Added support for new SBDH text and binary payloads as specified in Peppol Business Message Envelope v1.2\n\nv6.2.3 - 2019-01-18\n* Updated to Peppol code lists version 4\n\nv6.2.2 - 2018-11-30\n* Made process identifier scheme optional when using `SimpleIdentifierFactory`\n\nv6.2.1 - 2018-11-22\n* Updated to ph-commons 9.2.0\n* Added a special truststore to access directory.peppol.eu and added this to the complete truststore as well\n\nv6.2.0 - 2018-10-24\n* Added SMP transport profile \"Peppol AS4 v2\"\n* Removed all deprecated methods\n* Converted a runtime exception to a checked exception in `IPeppolURLProvider.getDNSNameOfParticipant`. The new exception class is called `PeppolDNSResolutionException`.\n* Added new class `SMPClientBadResponseException`\n* Optional SMP data structure XSD validation can be now enabled (see `AbstractSMPMarshaller.setValidationEnabled` and `AbstractBDXRMarshaller.setValidationEnabled`). By default it is disabled for backwards compatibility.\n\nv6.1.4 - 2018-10-17\n* Updated to final code list V3\n* The files `PeppolDocumentTypeIdentifier.*` got new attribute names (`name` \u0026rarr; `profilecode`, `doctypeid` \u0026rarr; `id`, added `scheme`)\n* The files `PeppolProcessIdentifier.*` got new attribute names (`name` \u0026rarr; `profilecode`, `bisid` is now optional, added `scheme`)\n* Automatically created `EPredefinedTransportProfileIdentifier` plus GC and XML for the transport profile list\n\nv6.1.3 - 2018-09-26\n* Requires ph-commons 9.1.3\n* Updated to Peppol codelists v3 snapshots\n* Added support for Peppol Envelope (SBDH) specification v1.1 from https://github.com/OpenPEPPOL/documentation/blob/master/TransportInfrastructure/ICT-Transport-OpenPEPPOL-Envelope_Specification-11_2018-08-31.pdf\n\nv6.1.2 - 2018-05-15\n* Really fixed OSGI ServiceProvider configuration\n* Added interface `IBDXLURLProvider`\n* Updated the BDMSL service to the latest version \n\nv6.1.1 - 2018-05-14\n* Fixed OSGI ServiceProvider configuration\n* Updated to ph-commons 9.1.0\n\nv6.1.0 - 2018-05-04 (#StarWarsDay release)\n* Reworked internal Peppol document type identifier representation (API incompatibility; deleted `OpenPeppolDocumentTypeIdentifierParts`)\n* The new official Peppol code lists were integrated. Therefore `EPredefinedIdentifierIssuingAgency` was replaced with `EPredefinedParticipantIdentifierScheme` and `IdentifierIssuingAgencyManager` was renamed to `ParticipantIdentifierSchemeManager`\n* The document types were removed from the predefined process identifiers\n* The shortcut constants of the predefined process identifiers were slightly changed (the final \"0\" was removed, so `BIS1A_V20` is now `BIS1A_V2`) \n\nv6.0.4 - 2018-04-13\n* Added SSL certificates of SML into default truststore (`truststore/complete-truststore.jks`)\n* Replaced truststore SHA-1 files with SHA-256 checksum files\n\nv6.0.3 - 2018-04-11\n* Codelist updated (added Estonian Company Code and Billing BIS v3)\n\nv6.0.2 - 2018-03-06\n* Added support for SHA256 and SHA512 in `TrustStoreBasedX509KeySelector` for BDXR\n* Fixed error in `BDXRClientReadOnly` certificate parsing\n\nv6.0.1 - 2018-02-13\n* Removed unused dependency to BouncyCastle\n* Added the new OpenPEPPOL root PKI v3 - valid from 2018-2028\n* **Important**: the paths to the preconfigured truststore paths have changed - see below for details \n\nv6.0.0 - 2018-01-05\n* Updated to ph-commons 9.0.0\n* SMP client can now handle responses with BOM\n* Removed legacy project `peppol-sml-client-swing` again\n* Added Peppol AS4 transport protocol ID\n* All sub-projects previously licensed under EUPL 1.1 or MPL 1.1 (`peppol-commons`, `peppol-smp-client` and `peppol-sml-client`) are now licensed under MPL 2.0\n\nv5.2.7 - 2017-07-21\n* Unified identifier handling concerning `\"\"` and `null`\n\nv5.2.6 - 2017-05-30\n* Added possibility to deprecate transport profiles\n\nv5.2.5 - 2017-05-25\n* Binds to ph-web 8.8.0\n* Added possibility to define SMP client proxy credentials(see issue [#13](https://github.com/phax/peppol-commons/issues/13))\n* Added legacy project `peppol-sml-client-swing` due to request\n\nv5.2.4 - 2017-01-09\n* Binds to ph-commons 8.6.0\n* Updated to dnsjava 2.1.8\n* Added possibility to define usage of proxy system properties via configuration file (see issue [#9](https://github.com/phax/peppol-commons/issues/9))\n\nv5.2.3 - 2016-12-28\n* Updated to BouncyCastle 1.56\n* Binds to ph-web 8.7.1\n* SMPClient and BDXRClient extended with writing API to create redirects\n\nv5.2.2 - 2016-12-16\n* Added possibility to support more proxy settings via system properties (see issue [#9](https://github.com/phax/peppol-commons/issues/9))\n\nv5.2.1 - 2016-11-21\n* Added possibility to disable SMP/BDXR client certificate check (see issue [#8](https://github.com/phax/peppol-commons/issues/8))\n\nv5.2.0 - 2016-10-25\n* Reworked identifier API to improve case sensitivity handling (based on identifier scheme). The rules per identifier factory:\n* BDXR: identifiers based on participant identifier scheme `iso6523-actorid-upis`, document type identifier scheme `bdx-docid-qns` or process identifier scheme `bdx-procid-transport` are treated case **in**sensitive\n* Peppol: identifiers based on participant identifier scheme `iso6523-actorid-upis` are treated case **in**sensitive\n* simple: all identifiers are handled case sensitive.\n\nv5.1.5 - 2016-10-17\n* Improved BDXR extension API\n\nv5.1.4 - 2016-10-12\n* Added missing U-NAPTR resolution in EsensURLProvider - thanks to @jerouris for pointing that out\n\nv5.1.3 - 2016-09-15\n* Changed Peppol identifier codelist to 1.2.1, because 1.2.2 was based on a misunderstanding\n\nv5.1.2 - 2016-09-09\n* Updated to ph-commons 8.5.x\n* Updated Peppol identifier codelist to 1.2.2\n\nv5.1.1 - 2016-08-21\n* Updated to ph-commons 8.4.x\n* Improved identifier handling for BDXR \n\nv5.1.0 - 2016-08-01\n\nv5.0.1 - 2016-07-26\n\nv5.0.0 - 2016-07-12\n* JDK 8 is now required\n\nv4.3.5 - 2016-02-26\n* Made the SMP query API more flexible so that e.g. the Peppol Directory BusinessCards can easily be queried; made the SMP Client more configurable.\n\nv4.3.4 - 2016-01-26\n* Reduced the maximum migration key length from 100 to 24 (new SMK 3 requirement) and adopted the API to use String instead of UUID\n\nv4.3.3 - 2015-12-11\n* Improved the support for BDXR SMP stuff\n\nv4.3.2 - 2015-11-26\n* Improved the support for custom SMP transport profiles\n* Updated the BDMSL additional services WSDL to the latest 3.1.0 version\n\nv4.3.1 - 2015-10-30\n* Added new BDMSL client to access the new \"/cipaservice\" in a convenient way (class `BDMSLClient` in project `peppol-sml-client`)\n* Loosened the regular expression for participant identifier schemes\n* Added a new SML participant delete method with SMP ID to work around an SMK 3.0.0 problem \n\nv4.3.0 - 2015-10-29\n* Added support for CIPA BDMSL 3.0 with the wsse:Security header\n* Added BDXR SMP client\n* Integrated the BDXR SMP classes into peppol-commons\n* Updated the BDMSL Service WSDL corresponding to the CIPA 3.0.0 release\n\n---\n\nMy personal [Coding Styleguide](https://github.com/phax/meta/blob/master/CodingStyleguide.md) |\nIt is appreciated if you star the GitHub project if you like it.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphax%2Fpeppol-commons","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fphax%2Fpeppol-commons","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphax%2Fpeppol-commons/lists"}