Skip to main content

Backend selection

phoss SMP supports three pluggable storage backends. Select one with the smp.backend property.
# Allowed values: xml, sql, mongodb
smp.backend = sql
ValueDescription
xmlFile-based XML storage. Simple to set up; no external database required. Suitable for small deployments.
sqlRelational database via JDBC (MySQL, PostgreSQL, Oracle, MS SQL Server). Recommended for production.
mongodbMongoDB document store.
The WAR file you deploy determines which backends are available. phoss-smp-webapp-sql.war only supports sql; phoss-smp-webapp-xml.war only supports xml. Setting the wrong value causes a startup error.
For SQL-specific properties (jdbc.*, target-database), see the SQL backend documentation.

Identifier type

The smp.identifiertype property controls which participant and document-type identifier schemes are accepted and how strictly they are validated.
# Allowed values: peppol, peppol-lax, simple, bdxr1, bdxr2
smp.identifiertype = peppol
ValueDescription
peppolFull Peppol identifier validation. Enforces scheme prefixes and case normalization. Use for standard Peppol networks.
peppol-laxPeppol-style identifiers with relaxed validation. Accepts some deviations from the strict rules.
simpleUnchecked, scheme-free identifiers. No validation is applied. Useful for custom or non-standard networks.
bdxr1OASIS BDXR SMP 1.0 identifier rules.
bdxr2OASIS BDXR SMP 2.0 identifier rules.

REST API type

The smp.rest.type property determines the XML namespace and response format returned by the read API.
# Allowed values: peppol, bdxr
smp.rest.type = peppol
ValueResponse format
peppolPeppol SMP 1.x XML responses. Use for standard Peppol deployments.
bdxrOASIS BDXR SMP XML responses. Use when clients expect the OASIS namespace.

REST API error behavior

# Log exceptions that result in HTTP error responses
smp.rest.log.exceptions = false

# Include a plain-text error message in the HTTP response body on errors
smp.rest.payload.on.error = true

# Return HTTP 204 (instead of 404) when deleting a non-existent entity
smp.rest.delete.notfound.as.ok = false
PropertyDefaultDescription
smp.rest.log.exceptionsfalseWhen true, exceptions that produce HTTP error responses are written to the application log.
smp.rest.payload.on.errortrueWhen true, error details are returned in the HTTP response body. Consider setting to false in production for security.
smp.rest.delete.notfound.as.okfalseWhen true, a DELETE on a non-existent resource returns HTTP 204 instead of HTTP 404. Useful for idempotent client workflows.

Remote Query API

The Remote Query API (/smpquery/*) lets clients query other SMP servers through your instance. It is disabled by default.
# true = disabled (default), false = enabled
smp.rest.remote.queryapi.disabled = true
Leave this disabled unless you explicitly need it. Enabling it allows your server to be used as a proxy for outbound SMP lookups.

Timezone

The SMP uses this timezone when formatting timestamps in responses and logs.
# Defaults to the JVM system timezone when not set
smp.timezone = Europe/Vienna
Use any valid Java timezone ID (e.g. UTC, America/New_York).

HTTP proxy

Configure outbound HTTP/HTTPS proxy settings for SML and Directory client connections.
http.proxyHost  = 10.0.0.10
http.proxyPort  = 8080
https.proxyHost = 10.0.0.10
https.proxyPort = 8080

# Optional credentials
proxy.username = myuser
proxy.password = secret
Leave these commented out if your server can reach the internet directly.

Build docs developers (and LLMs) love