Skip to content

Commit 53eec90

Browse files
feat: Split Dataspace Protocol Extension (eclipse-tractusx#2533)
* feat: Split Dataspace Protocol Extension * feat: Merge dataspace-protocol-lib into dataspace-protocol-core * feat: Remove unused dependency from libs.version.toml * feat: nit change * feat: add copyright * feat: move related classes into identifier package * fix: Review comments: Remove DefaultParticipantIdentityResolver
1 parent d5416bf commit 53eec90

19 files changed

Lines changed: 426 additions & 157 deletions

File tree

Lines changed: 3 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
/*
22
* Copyright (c) 2025 Cofinity-X GmbH
3+
* Copyright (c) 2026 SAP SE
34
*
45
* See the NOTICE file(s) distributed with this work for additional
56
* information regarding copyright ownership.
@@ -23,24 +24,6 @@ plugins {
2324
}
2425

2526
dependencies {
26-
implementation(libs.edc.runtime.metamodel)
27-
28-
implementation(libs.edc.spi.boot)
29-
implementation(libs.edc.spi.core)
30-
implementation(libs.edc.spi.decentralized.claims)
31-
implementation(libs.edc.spi.participant.context.single)
32-
implementation(libs.edc.ih.spi.credentials)
33-
34-
implementation(libs.dsp.spi.http)
35-
implementation(libs.dsp.spi.v08)
36-
implementation(libs.dsp.spi.v2024)
37-
implementation(libs.dsp.spi.v2025)
38-
39-
implementation(libs.edc.spi.participant)
40-
implementation(libs.edc.spi.protocol)
41-
42-
implementation(project(":spi:core-spi"))
43-
implementation(project(":core:core-utils"))
44-
45-
testImplementation(libs.edc.junit)
27+
api(project(":edc-extensions:dataspace-protocol:dataspace-protocol-core"))
28+
api(project(":edc-extensions:dataspace-protocol:cx-dataspace-protocol"))
4629
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
/*
2+
* Copyright (c) 2025 Cofinity-X GmbH
3+
* Copyright (c) 2026 SAP SE
4+
*
5+
* See the NOTICE file(s) distributed with this work for additional
6+
* information regarding copyright ownership.
7+
*
8+
* This program and the accompanying materials are made available under the
9+
* terms of the Apache License, Version 2.0 which is available at
10+
* https://www.apache.org/licenses/LICENSE-2.0.
11+
*
12+
* Unless required by applicable law or agreed to in writing, software
13+
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
14+
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
15+
* License for the specific language governing permissions and limitations
16+
* under the License.
17+
*
18+
* SPDX-License-Identifier: Apache-2.0
19+
*/
20+
21+
plugins {
22+
`maven-publish`
23+
`java-library`
24+
}
25+
26+
dependencies {
27+
implementation(libs.edc.runtime.metamodel)
28+
29+
implementation(libs.edc.spi.boot)
30+
implementation(libs.edc.spi.core)
31+
implementation(libs.edc.spi.decentralized.claims)
32+
implementation(libs.edc.spi.participant.context.single)
33+
implementation(libs.edc.ih.spi.credentials)
34+
35+
implementation(libs.dsp.spi.http)
36+
implementation(libs.dsp.spi.v08)
37+
implementation(libs.dsp.spi.v2024)
38+
39+
implementation(libs.edc.spi.participant)
40+
implementation(libs.edc.spi.protocol)
41+
42+
implementation(project(":spi:core-spi"))
43+
implementation(project(":core:core-utils"))
44+
implementation(project(":edc-extensions:dataspace-protocol:dataspace-protocol-core"))
45+
46+
testImplementation(libs.edc.junit)
47+
testImplementation(testFixtures(project(":edc-extensions:dataspace-protocol:dataspace-protocol-core")))
48+
}

edc-extensions/dataspace-protocol/src/main/java/org/eclipse/tractusx/edc/protocol/DataspaceProtocolExtension.java renamed to edc-extensions/dataspace-protocol/cx-dataspace-protocol/src/main/java/org/eclipse/tractusx/edc/protocol/cx/CxDataspaceProtocolExtension.java

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
/*
22
* Copyright (c) 2025 Cofinity-X GmbH
3+
* Copyright (c) 2026 SAP SE
34
*
45
* See the NOTICE file(s) distributed with this work for additional
56
* information regarding copyright ownership.
@@ -17,7 +18,7 @@
1718
* SPDX-License-Identifier: Apache-2.0
1819
*/
1920

20-
package org.eclipse.tractusx.edc.protocol;
21+
package org.eclipse.tractusx.edc.protocol.cx;
2122

2223
import org.eclipse.edc.participantcontext.single.spi.SingleParticipantContextSupplier;
2324
import org.eclipse.edc.participantcontext.spi.identity.ParticipantIdentityResolver;
@@ -30,9 +31,8 @@
3031
import org.eclipse.edc.spi.monitor.Monitor;
3132
import org.eclipse.edc.spi.system.ServiceExtension;
3233
import org.eclipse.edc.spi.system.ServiceExtensionContext;
33-
import org.eclipse.tractusx.edc.protocol.identifier.BpnExtractionFunction;
34-
import org.eclipse.tractusx.edc.protocol.identifier.CatenaxParticipantIdentityResolver;
35-
import org.eclipse.tractusx.edc.protocol.identifier.DidExtractionFunction;
34+
import org.eclipse.tractusx.edc.protocol.cx.identifier.BpnExtractionFunction;
35+
import org.eclipse.tractusx.edc.protocol.cx.identifier.CatenaxParticipantIdentityResolver;
3636

3737
import java.util.stream.Stream;
3838

@@ -41,11 +41,8 @@
4141
import static org.eclipse.edc.protocol.dsp.spi.type.Dsp2024Constants.DATASPACE_PROTOCOL_HTTP_V_2024_1;
4242
import static org.eclipse.edc.protocol.dsp.spi.type.Dsp2024Constants.V_2024_1;
4343
import static org.eclipse.edc.protocol.dsp.spi.type.Dsp2024Constants.V_2024_1_PATH;
44-
import static org.eclipse.edc.protocol.dsp.spi.type.Dsp2025Constants.DATASPACE_PROTOCOL_HTTP_V_2025_1;
45-
import static org.eclipse.edc.protocol.dsp.spi.type.Dsp2025Constants.V_2025_1;
46-
import static org.eclipse.edc.protocol.dsp.spi.type.Dsp2025Constants.V_2025_1_PATH;
4744

48-
public class DataspaceProtocolExtension implements ServiceExtension {
45+
public class CxDataspaceProtocolExtension implements ServiceExtension {
4946

5047
@Setting(description = "the BPN of the participant", key = "tractusx.edc.participant.bpn")
5148
private String bpn;
@@ -63,7 +60,6 @@ public class DataspaceProtocolExtension implements ServiceExtension {
6360
public void initialize(ServiceExtensionContext context) {
6461
Stream.of(
6562
new DataspaceProfileContext(DATASPACE_PROTOCOL_HTTP, V_08, () -> dspWebhookAddress.get(), new BpnExtractionFunction(monitor)),
66-
new DataspaceProfileContext(DATASPACE_PROTOCOL_HTTP_V_2025_1, V_2025_1, () -> dspWebhookAddress.get() + V_2025_1_PATH, new DidExtractionFunction(monitor)),
6763
// currently required for DCP TCK tests
6864
new DataspaceProfileContext(DATASPACE_PROTOCOL_HTTP_V_2024_1, V_2024_1, () -> dspWebhookAddress.get() + V_2024_1_PATH, new BpnExtractionFunction(monitor))
6965
).forEach(contextRegistry::register);

edc-extensions/dataspace-protocol/src/main/java/org/eclipse/tractusx/edc/protocol/identifier/BpnExtractionFunction.java renamed to edc-extensions/dataspace-protocol/cx-dataspace-protocol/src/main/java/org/eclipse/tractusx/edc/protocol/cx/identifier/BpnExtractionFunction.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
/********************************************************************************
22
* Copyright (c) 2025 Cofinity-X GmbH
3+
* Copyright (c) 2026 SAP SE
34
*
45
* See the NOTICE file(s) distributed with this work for additional
56
* information regarding copyright ownership.
@@ -17,10 +18,11 @@
1718
* SPDX-License-Identifier: Apache-2.0
1819
********************************************************************************/
1920

20-
package org.eclipse.tractusx.edc.protocol.identifier;
21+
package org.eclipse.tractusx.edc.protocol.cx.identifier;
2122

2223
import org.eclipse.edc.iam.verifiablecredentials.spi.model.VerifiableCredential;
2324
import org.eclipse.edc.spi.monitor.Monitor;
25+
import org.eclipse.tractusx.edc.protocol.core.identifier.MembershipCredentialIdExtractionFunction;
2426

2527
import java.util.Map;
2628
import java.util.Optional;
@@ -38,12 +40,12 @@ public BpnExtractionFunction(Monitor monitor) {
3840
}
3941

4042
@Override
41-
String identityProperty() {
43+
public String identityProperty() {
4244
return IDENTITY_PROPERTY;
4345
}
4446

4547
@Override
46-
protected Optional<String> getIdentifier(VerifiableCredential vc) {
48+
public Optional<String> getIdentifier(VerifiableCredential vc) {
4749
return vc.getCredentialSubject().stream()
4850
.flatMap(credentialSubject -> credentialSubject.getClaims().entrySet().stream())
4951
.filter(entry -> entry.getKey().endsWith(IDENTITY_PROPERTY))

edc-extensions/dataspace-protocol/src/main/java/org/eclipse/tractusx/edc/protocol/identifier/CatenaxParticipantIdentityResolver.java renamed to edc-extensions/dataspace-protocol/cx-dataspace-protocol/src/main/java/org/eclipse/tractusx/edc/protocol/cx/identifier/CatenaxParticipantIdentityResolver.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
/*
22
* Copyright (c) 2025 Think-it GmbH
3+
* Copyright (c) 2026 SAP SE
34
*
45
* See the NOTICE file(s) distributed with this work for additional
56
* information regarding copyright ownership.
@@ -17,7 +18,7 @@
1718
* SPDX-License-Identifier: Apache-2.0
1819
*/
1920

20-
package org.eclipse.tractusx.edc.protocol.identifier;
21+
package org.eclipse.tractusx.edc.protocol.cx.identifier;
2122

2223
import org.eclipse.edc.participantcontext.spi.identity.ParticipantIdentityResolver;
2324
import org.eclipse.edc.participantcontext.spi.service.ParticipantContextSupplier;

edc-extensions/dataspace-protocol/src/main/resources/META-INF/services/org.eclipse.edc.spi.system.ServiceExtension renamed to edc-extensions/dataspace-protocol/cx-dataspace-protocol/src/main/resources/META-INF/services/org.eclipse.edc.spi.system.ServiceExtension

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#################################################################################
22
# Copyright (c) 2025 Cofinity-X GmbH
3+
# Copyright (c) 2026 SAP SE
34
#
45
# See the NOTICE file(s) distributed with this work for additional
56
# information regarding copyright ownership.
@@ -17,4 +18,4 @@
1718
# SPDX-License-Identifier: Apache-2.0
1819
#################################################################################
1920

20-
org.eclipse.tractusx.edc.protocol.DataspaceProtocolExtension
21+
org.eclipse.tractusx.edc.protocol.cx.CxDataspaceProtocolExtension

edc-extensions/dataspace-protocol/src/test/java/org/eclipse/tractusx/edc/protocol/DataspaceProtocolExtensionTest.java renamed to edc-extensions/dataspace-protocol/cx-dataspace-protocol/src/test/java/org/eclipse/tractusx/edc/protocol/cx/CxDataspaceProtocolExtensionTest.java

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
/*
22
* Copyright (c) 2025 Cofinity-X GmbH
3+
* Copyright (c) 2026 SAP SE
34
*
45
* See the NOTICE file(s) distributed with this work for additional
56
* information regarding copyright ownership.
@@ -17,16 +18,15 @@
1718
* SPDX-License-Identifier: Apache-2.0
1819
*/
1920

20-
package org.eclipse.tractusx.edc.protocol;
21+
package org.eclipse.tractusx.edc.protocol.cx;
2122

2223
import org.eclipse.edc.boot.system.injection.ObjectFactory;
2324
import org.eclipse.edc.junit.extensions.DependencyInjectionExtension;
2425
import org.eclipse.edc.protocol.dsp.http.spi.api.DspBaseWebhookAddress;
2526
import org.eclipse.edc.protocol.spi.DataspaceProfileContextRegistry;
2627
import org.eclipse.edc.spi.system.ServiceExtensionContext;
2728
import org.eclipse.edc.spi.system.configuration.ConfigFactory;
28-
import org.eclipse.tractusx.edc.protocol.identifier.BpnExtractionFunction;
29-
import org.eclipse.tractusx.edc.protocol.identifier.DidExtractionFunction;
29+
import org.eclipse.tractusx.edc.protocol.cx.identifier.BpnExtractionFunction;
3030
import org.junit.jupiter.api.BeforeEach;
3131
import org.junit.jupiter.api.Test;
3232
import org.junit.jupiter.api.extension.ExtendWith;
@@ -35,16 +35,13 @@
3535

3636
import static org.eclipse.edc.protocol.dsp.http.spi.types.HttpMessageProtocol.DATASPACE_PROTOCOL_HTTP;
3737
import static org.eclipse.edc.protocol.dsp.spi.type.Dsp08Constants.V_08;
38-
import static org.eclipse.edc.protocol.dsp.spi.type.Dsp2025Constants.DATASPACE_PROTOCOL_HTTP_V_2025_1;
39-
import static org.eclipse.edc.protocol.dsp.spi.type.Dsp2025Constants.V_2025_1;
40-
import static org.eclipse.edc.protocol.dsp.spi.type.Dsp2025Constants.V_2025_1_PATH;
4138
import static org.mockito.ArgumentMatchers.argThat;
4239
import static org.mockito.Mockito.mock;
4340
import static org.mockito.Mockito.verify;
4441
import static org.mockito.Mockito.when;
4542

4643
@ExtendWith(DependencyInjectionExtension.class)
47-
class DataspaceProtocolExtensionTest {
44+
class CxDataspaceProtocolExtensionTest {
4845

4946
private final String webhook = "https://webhook";
5047
private final String bpn = "bpn";
@@ -64,18 +61,12 @@ void setup(ServiceExtensionContext context) {
6461
void initialize_shouldRegisterProfileContexts(ObjectFactory factory, ServiceExtensionContext context) {
6562
when(context.getConfig()).thenReturn(ConfigFactory.fromMap(Map.of("tractusx.edc.participant.bpn", bpn)));
6663

67-
factory.constructInstance(DataspaceProtocolExtension.class).initialize(context);
64+
factory.constructInstance(CxDataspaceProtocolExtension.class).initialize(context);
6865

6966
verify(dataspaceProfileContextRegistry).register(argThat(
7067
dataspaceProfileContext -> dataspaceProfileContext.name().equals(DATASPACE_PROTOCOL_HTTP) &&
7168
dataspaceProfileContext.protocolVersion().equals(V_08) &&
7269
dataspaceProfileContext.webhook().url().equals(webhook) &&
7370
dataspaceProfileContext.idExtractionFunction() instanceof BpnExtractionFunction));
74-
verify(dataspaceProfileContextRegistry).register(argThat(
75-
dataspaceProfileContext -> dataspaceProfileContext.name().equals(DATASPACE_PROTOCOL_HTTP_V_2025_1) &&
76-
dataspaceProfileContext.protocolVersion().equals(V_2025_1) &&
77-
dataspaceProfileContext.webhook().url().equals(webhook + V_2025_1_PATH) &&
78-
dataspaceProfileContext.idExtractionFunction() instanceof DidExtractionFunction
79-
));
8071
}
8172
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
/*
2+
* Copyright (c) 2025 Cofinity-X GmbH
3+
* Copyright (c) 2026 SAP SE
4+
*
5+
* See the NOTICE file(s) distributed with this work for additional
6+
* information regarding copyright ownership.
7+
*
8+
* This program and the accompanying materials are made available under the
9+
* terms of the Apache License, Version 2.0 which is available at
10+
* https://www.apache.org/licenses/LICENSE-2.0.
11+
*
12+
* Unless required by applicable law or agreed to in writing, software
13+
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
14+
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
15+
* License for the specific language governing permissions and limitations
16+
* under the License.
17+
*
18+
* SPDX-License-Identifier: Apache-2.0
19+
*/
20+
21+
package org.eclipse.tractusx.edc.protocol.cx.identifier;
22+
23+
import org.eclipse.edc.iam.verifiablecredentials.spi.model.VerifiableCredential;
24+
import org.eclipse.edc.spi.iam.ClaimToken;
25+
import org.eclipse.edc.spi.monitor.Monitor;
26+
import org.eclipse.tractusx.edc.protocol.core.identifier.MembershipCredentialIdExtractionFunction;
27+
import org.eclipse.tractusx.edc.protocol.core.identifier.MembershipCredentialIdExtractionFunctionTest;
28+
import org.junit.jupiter.api.extension.ExtensionContext;
29+
import org.junit.jupiter.params.ParameterizedTest;
30+
import org.junit.jupiter.params.provider.Arguments;
31+
import org.junit.jupiter.params.provider.ArgumentsProvider;
32+
import org.junit.jupiter.params.provider.ArgumentsSource;
33+
34+
import java.util.List;
35+
import java.util.Map;
36+
import java.util.stream.Stream;
37+
38+
import static org.assertj.core.api.Assertions.assertThat;
39+
import static org.eclipse.tractusx.edc.edr.spi.CoreConstants.CX_CREDENTIAL_NS;
40+
import static org.mockito.ArgumentMatchers.anyString;
41+
import static org.mockito.Mockito.mock;
42+
import static org.mockito.Mockito.when;
43+
44+
public class BpnExtractionFunctionTest extends MembershipCredentialIdExtractionFunctionTest {
45+
46+
public static final String BPN = "bpn";
47+
public static final String ID_PROPERTY = "holderIdentifier";
48+
49+
private final Monitor monitor = mock();
50+
51+
@Override
52+
protected MembershipCredentialIdExtractionFunction extractionFunction() {
53+
when(monitor.withPrefix(anyString())).thenReturn(monitor);
54+
return new BpnExtractionFunction(monitor);
55+
}
56+
57+
@Override
58+
protected String expectedId() {
59+
return BPN;
60+
}
61+
62+
@ParameterizedTest
63+
@ArgumentsSource(VerifiableCredentialArgumentProvider.class)
64+
void apply(VerifiableCredential credential) {
65+
var id = extractionFunction().apply(ClaimToken.Builder.newInstance().claim("vc", List.of(credential)).build());
66+
assertThat(id).isEqualTo(expectedId());
67+
}
68+
69+
private static class VerifiableCredentialArgumentProvider implements ArgumentsProvider {
70+
@Override
71+
public Stream<? extends Arguments> provideArguments(ExtensionContext context) {
72+
return Stream.of(
73+
Arguments.of(vc("MembershipCredential", Map.of("id", DID, ID_PROPERTY, BPN))),
74+
Arguments.of(vc(CX_CREDENTIAL_NS + "MembershipCredential", Map.of("id", DID, ID_PROPERTY, BPN))),
75+
Arguments.of(vc(CX_CREDENTIAL_NS + "MembershipCredential", Map.of("id", DID, CX_CREDENTIAL_NS + ID_PROPERTY, BPN))));
76+
}
77+
}
78+
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
/*
2+
* Copyright (c) 2025 Cofinity-X GmbH
3+
* Copyright (c) 2026 SAP SE
4+
*
5+
* See the NOTICE file(s) distributed with this work for additional
6+
* information regarding copyright ownership.
7+
*
8+
* This program and the accompanying materials are made available under the
9+
* terms of the Apache License, Version 2.0 which is available at
10+
* https://www.apache.org/licenses/LICENSE-2.0.
11+
*
12+
* Unless required by applicable law or agreed to in writing, software
13+
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
14+
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
15+
* License for the specific language governing permissions and limitations
16+
* under the License.
17+
*
18+
* SPDX-License-Identifier: Apache-2.0
19+
*/
20+
21+
plugins {
22+
`maven-publish`
23+
`java-library`
24+
}
25+
26+
dependencies {
27+
implementation(libs.edc.runtime.metamodel)
28+
29+
implementation(libs.edc.spi.boot)
30+
implementation(libs.edc.spi.core)
31+
implementation(libs.edc.spi.decentralized.claims)
32+
implementation(libs.edc.spi.participant.context.single)
33+
implementation(libs.edc.ih.spi.credentials)
34+
35+
implementation(libs.dsp.spi.http)
36+
implementation(libs.dsp.spi.v2025)
37+
38+
implementation(libs.edc.spi.participant)
39+
implementation(libs.edc.spi.protocol)
40+
41+
implementation(project(":spi:core-spi"))
42+
implementation(project(":core:core-utils"))
43+
44+
testImplementation(libs.edc.junit)
45+
testFixturesApi(libs.edc.ih.spi.credentials)
46+
testFixturesApi(libs.edc.spi.protocol)
47+
testFixturesApi(project(":spi:core-spi"))
48+
}

0 commit comments

Comments
 (0)