Protocol Extensions
The EDC officially supports the Dataspace protocol using the HTTPs bindings, but since it is an extensible platform, multiple protocol implementations can be supported for inter-connectors communication. Each supported protocols is identified by a unique key used by EDC for dispatching a remote message.
1. RemoteMessage
At the heart of EDC message exchange mechanism lies the RemoteMessage
interface, which describes the protocol
, the counterPartyAddress
and the counterPartyId
used for a message delivery.
RemoteMessage
extensions can be divided in three groups:
- Catalog (
catalog-spi
) - Contract negotiation (
contract-spi
) - Transfer process (
transfer-spi
)
Each RemoteMessage
is:
- Delivered to the counter-party using a RemoteMessageDispatcher.
- Received by the counter-party through the protocol implementation (e.g HTTP) and handled by the protocol services layer.
1.1 Delivering messages with RemoteMessageDispatcher
Each protocol implements a RemoteMessageDispatcher
:
public interface RemoteMessageDispatcher {
String protocol();
<T, M extends RemoteMessage> CompletableFuture<StatusResult<T>> dispatch(Class<T> responseType, M message);
}
and it is registered in the RemoteMessageDispatcherRegistry
, where it gets associated to the protocol defined in RemoteMessageDispatcher#protocol
.
Internally EDC uses the RemoteMessageDispatcherRegistry
whenever it needs to deliver a RemoteMessage
to the counter-party. The RemoteMessage
then gets routed to the right RemoteMessageDispatcher
based on the RemoteMessage#getProtocol
property.
EDC also uses
RemoteMessageDispatcherRegistry
for non-protocol messages when dispatching event callbacks
1.2 Handling incoming messages with protocol services
On the ingress side, protocol implementations should be able to receive messages through the network (e.g. API Controllers), deserialize them into the corresponding RemoteMessage
s and then dispatching them to the right protocol service.
Protocol services are three:
CatalogProtocolService
ContractNegotiationProtocolService
TransferProcessProtocolService
which handle respectively Catalog
, ContractNegotiation
and TransferProcess
messages.
2. DSP protocol implementation
The Dataspace protocol protocol implementation is available under the data-protocol/dsp
subfolder in the Connector repository and it is identified by the key dataspace-protocol-http
.
It extends the RemoteMessageDispatcher
with the interface DspHttpRemoteMessageDispatcher
(dsp-spi
), which adds an additional method for registering message handlers.
The implementation of the three DSP specifications:
is separated in multiple extension modules grouped by specification.
This allows for example to build a runtime that only serves a dsp catalog requests useful the Management Domains scenario.
Each specification implementation defines handlers, transformers for RemoteMessage
s and exposes HTTP endpoints.
The
dsp
implementation also provide HTTP endpoints for the DSP common functionalities.
2.1 RemoteMessage
handlers
Handlers map a RemoteMessage
to an HTTP Request and instruct the DspHttpRemoteMessageDispatcher
how to extract the response body to a desired type.
2.2 HTTP endpoints
Each dsp-*-http-api
module exposes its own API Controllers for serving the specification requests. Each request handler transforms the JSON-LD in input, if present, into a RemoteMessage
and then calls the protocol service layer.
2.2 RemoteMessage
transformers
Each dsp-*-transform
module registers in the DSP API context Transformers
for mapping JSON-LD objects from and to RemoteMessage
s.
Feedback
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.