Skip to content

Commit d4bf65e

Browse files
committed
Simplification of DefaultMcpJson* classes by
creating a single DefaultMcpJson class that provides access to both the DefaultMcpJsonMapper and the DefaultMcpJson Validator
1 parent 332af62 commit d4bf65e

File tree

31 files changed

+127
-138
lines changed

31 files changed

+127
-138
lines changed

mcp-core/pom.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,11 @@
3939
Bundle-SymbolicName: ${project.groupId}.${project.artifactId}
4040
Bundle-Version: ${version}
4141
Automatic-Module-Name: ${project.groupId}.${project.artifactId}
42+
Bundle-ActivationPolicy: lazy
4243
Import-Package: jakarta.*;resolution:=optional, \
4344
*;
4445
Export-Package: io.modelcontextprotocol.*;version="${version}";-noimport:=true
45-
Service-Component: OSGI-INF/io.modelcontextprotocol.json.internal.DefaultMcpJsonMapperSupplier.xml,OSGI-INF/io.modelcontextprotocol.json.internal.DefaultMcpJsonSchemaValidatorSupplier.xml
46+
Service-Component: OSGI-INF/io.modelcontextprotocol.json.internal.DefaultMcpJson.xml
4647
-noimportjava: true;
4748
-nouses: true;
4849
-removeheaders: Private-Package

mcp-core/src/main/java/io/modelcontextprotocol/client/McpClient.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
import java.util.function.Supplier;
1515

1616
import io.modelcontextprotocol.common.McpTransportContext;
17-
import io.modelcontextprotocol.json.internal.DefaultMcpJsonSchemaValidatorSupplier;
17+
import io.modelcontextprotocol.json.internal.DefaultMcpJson;
1818
import io.modelcontextprotocol.json.schema.JsonSchemaValidator;
1919
import io.modelcontextprotocol.spec.McpClientTransport;
2020
import io.modelcontextprotocol.spec.McpSchema;
@@ -475,10 +475,12 @@ public McpSyncClient build() {
475475

476476
McpClientFeatures.Async asyncFeatures = McpClientFeatures.Async.fromSync(syncFeatures);
477477

478-
return new McpSyncClient(new McpAsyncClient(transport, this.requestTimeout, this.initializationTimeout,
479-
jsonSchemaValidator != null ? jsonSchemaValidator
480-
: DefaultMcpJsonSchemaValidatorSupplier.getDefaultJsonSchemaValidator(),
481-
asyncFeatures), this.contextProvider);
478+
return new McpSyncClient(
479+
new McpAsyncClient(transport, this.requestTimeout, this.initializationTimeout,
480+
jsonSchemaValidator != null ? jsonSchemaValidator
481+
: DefaultMcpJson.getDefaultJsonSchemaValidator(),
482+
asyncFeatures),
483+
this.contextProvider);
482484
}
483485

484486
}
@@ -811,7 +813,7 @@ public AsyncSpec enableCallToolSchemaCaching(boolean enableCallToolSchemaCaching
811813
*/
812814
public McpAsyncClient build() {
813815
var jsonSchemaValidator = (this.jsonSchemaValidator != null) ? this.jsonSchemaValidator
814-
: DefaultMcpJsonSchemaValidatorSupplier.getDefaultJsonSchemaValidator();
816+
: DefaultMcpJson.getDefaultJsonSchemaValidator();
815817
return new McpAsyncClient(this.transport, this.requestTimeout, this.initializationTimeout,
816818
jsonSchemaValidator,
817819
new McpClientFeatures.Async(this.clientInfo, this.capabilities, this.roots,

mcp-core/src/main/java/io/modelcontextprotocol/client/transport/HttpClientSseClientTransport.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
import io.modelcontextprotocol.common.McpTransportContext;
2626
import io.modelcontextprotocol.json.McpJsonMapper;
2727
import io.modelcontextprotocol.json.TypeRef;
28-
import io.modelcontextprotocol.json.internal.DefaultMcpJsonMapperSupplier;
28+
import io.modelcontextprotocol.json.internal.DefaultMcpJson;
2929
import io.modelcontextprotocol.spec.HttpHeaders;
3030
import io.modelcontextprotocol.spec.McpClientTransport;
3131
import io.modelcontextprotocol.spec.McpError;
@@ -330,8 +330,7 @@ public Builder connectTimeout(Duration connectTimeout) {
330330
public HttpClientSseClientTransport build() {
331331
HttpClient httpClient = this.clientBuilder.connectTimeout(this.connectTimeout).build();
332332
return new HttpClientSseClientTransport(httpClient, requestBuilder, baseUri, sseEndpoint,
333-
jsonMapper == null ? DefaultMcpJsonMapperSupplier.getDefaultMcpJsonMapper() : jsonMapper,
334-
httpRequestCustomizer);
333+
jsonMapper == null ? DefaultMcpJson.getDefaultMcpJsonMapper() : jsonMapper, httpRequestCustomizer);
335334
}
336335

337336
}

mcp-core/src/main/java/io/modelcontextprotocol/client/transport/HttpClientStreamableHttpTransport.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
import io.modelcontextprotocol.common.McpTransportContext;
3131
import io.modelcontextprotocol.json.McpJsonMapper;
3232
import io.modelcontextprotocol.json.TypeRef;
33-
import io.modelcontextprotocol.json.internal.DefaultMcpJsonMapperSupplier;
33+
import io.modelcontextprotocol.json.internal.DefaultMcpJson;
3434
import io.modelcontextprotocol.spec.ClosedMcpTransportSession;
3535
import io.modelcontextprotocol.spec.DefaultMcpTransportSession;
3636
import io.modelcontextprotocol.spec.DefaultMcpTransportStream;
@@ -816,9 +816,9 @@ public Builder supportedProtocolVersions(List<String> supportedProtocolVersions)
816816
public HttpClientStreamableHttpTransport build() {
817817
HttpClient httpClient = this.clientBuilder.connectTimeout(this.connectTimeout).build();
818818
return new HttpClientStreamableHttpTransport(
819-
jsonMapper == null ? DefaultMcpJsonMapperSupplier.getDefaultMcpJsonMapper() : jsonMapper,
820-
httpClient, requestBuilder, baseUri, endpoint, resumableStreams, openConnectionOnStartup,
821-
httpRequestCustomizer, supportedProtocolVersions);
819+
jsonMapper == null ? DefaultMcpJson.getDefaultMcpJsonMapper() : jsonMapper, httpClient,
820+
requestBuilder, baseUri, endpoint, resumableStreams, openConnectionOnStartup, httpRequestCustomizer,
821+
supportedProtocolVersions);
822822
}
823823

824824
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package io.modelcontextprotocol.json.internal;
2+
3+
import io.modelcontextprotocol.json.McpJsonMapper;
4+
import io.modelcontextprotocol.json.McpJsonMapperSupplier;
5+
import io.modelcontextprotocol.json.schema.JsonSchemaValidator;
6+
import io.modelcontextprotocol.json.schema.JsonSchemaValidatorSupplier;
7+
import io.modelcontextprotocol.util.McpServiceLoader;
8+
9+
public class DefaultMcpJson {
10+
11+
protected static McpServiceLoader<McpJsonMapperSupplier, McpJsonMapper> mcpMapperServiceLoader;
12+
13+
protected static McpServiceLoader<JsonSchemaValidatorSupplier, JsonSchemaValidator> mcpValidatorServiceLoader;
14+
15+
public DefaultMcpJson() {
16+
mcpMapperServiceLoader = new McpServiceLoader<McpJsonMapperSupplier, McpJsonMapper>();
17+
mcpValidatorServiceLoader = new McpServiceLoader<JsonSchemaValidatorSupplier, JsonSchemaValidator>();
18+
}
19+
20+
void setMcpJsonMapperSupplier(McpJsonMapperSupplier supplier) {
21+
mcpMapperServiceLoader.setSupplier(supplier);
22+
}
23+
24+
void unsetMcpJsonMapperSupplier(McpJsonMapperSupplier supplier) {
25+
mcpMapperServiceLoader.unsetSupplier(supplier);
26+
}
27+
28+
public synchronized static McpJsonMapper getDefaultMcpJsonMapper() {
29+
return mcpMapperServiceLoader.getDefault();
30+
}
31+
32+
void setJsonSchemaValidatorSupplier(JsonSchemaValidatorSupplier supplier) {
33+
mcpValidatorServiceLoader.setSupplier(supplier);
34+
}
35+
36+
void unsetJsonSchemaValidatorSupplier(JsonSchemaValidatorSupplier supplier) {
37+
mcpValidatorServiceLoader.unsetSupplier(supplier);
38+
}
39+
40+
public synchronized static JsonSchemaValidator getDefaultJsonSchemaValidator() {
41+
return mcpValidatorServiceLoader.getDefault();
42+
}
43+
44+
}

mcp-core/src/main/java/io/modelcontextprotocol/json/internal/DefaultMcpJsonMapperSupplier.java

Lines changed: 0 additions & 27 deletions
This file was deleted.

mcp-core/src/main/java/io/modelcontextprotocol/json/internal/DefaultMcpJsonSchemaValidatorSupplier.java

Lines changed: 0 additions & 27 deletions
This file was deleted.

mcp-core/src/main/java/io/modelcontextprotocol/server/McpServer.java

Lines changed: 17 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,7 @@
1515

1616
import io.modelcontextprotocol.common.McpTransportContext;
1717
import io.modelcontextprotocol.json.McpJsonMapper;
18-
import io.modelcontextprotocol.json.internal.DefaultMcpJsonMapperSupplier;
19-
import io.modelcontextprotocol.json.internal.DefaultMcpJsonSchemaValidatorSupplier;
18+
import io.modelcontextprotocol.json.internal.DefaultMcpJson;
2019
import io.modelcontextprotocol.json.schema.JsonSchemaValidator;
2120
import io.modelcontextprotocol.spec.McpSchema;
2221
import io.modelcontextprotocol.spec.McpSchema.CallToolResult;
@@ -228,10 +227,10 @@ public McpAsyncServer build() {
228227
this.instructions);
229228

230229
var jsonSchemaValidator = (this.jsonSchemaValidator != null) ? this.jsonSchemaValidator
231-
: DefaultMcpJsonSchemaValidatorSupplier.getDefaultJsonSchemaValidator();
230+
: DefaultMcpJson.getDefaultJsonSchemaValidator();
232231

233232
return new McpAsyncServer(transportProvider,
234-
jsonMapper == null ? DefaultMcpJsonMapperSupplier.getDefaultMcpJsonMapper() : jsonMapper, features,
233+
jsonMapper == null ? DefaultMcpJson.getDefaultMcpJsonMapper() : jsonMapper, features,
235234
requestTimeout, uriTemplateManagerFactory, jsonSchemaValidator);
236235
}
237236

@@ -256,9 +255,9 @@ public McpAsyncServer build() {
256255
this.resources, this.resourceTemplates, this.prompts, this.completions, this.rootsChangeHandlers,
257256
this.instructions);
258257
var jsonSchemaValidator = this.jsonSchemaValidator != null ? this.jsonSchemaValidator
259-
: DefaultMcpJsonSchemaValidatorSupplier.getDefaultJsonSchemaValidator();
258+
: DefaultMcpJson.getDefaultJsonSchemaValidator();
260259
return new McpAsyncServer(transportProvider,
261-
jsonMapper == null ? DefaultMcpJsonMapperSupplier.getDefaultMcpJsonMapper() : jsonMapper, features,
260+
jsonMapper == null ? DefaultMcpJson.getDefaultMcpJsonMapper() : jsonMapper, features,
262261
requestTimeout, uriTemplateManagerFactory, jsonSchemaValidator);
263262
}
264263

@@ -821,10 +820,9 @@ public McpSyncServer build() {
821820
this.immediateExecution);
822821

823822
var asyncServer = new McpAsyncServer(transportProvider,
824-
jsonMapper == null ? DefaultMcpJsonMapperSupplier.getDefaultMcpJsonMapper() : jsonMapper,
825-
asyncFeatures, requestTimeout, uriTemplateManagerFactory,
826-
jsonSchemaValidator != null ? jsonSchemaValidator
827-
: DefaultMcpJsonSchemaValidatorSupplier.getDefaultJsonSchemaValidator());
823+
jsonMapper == null ? DefaultMcpJson.getDefaultMcpJsonMapper() : jsonMapper, asyncFeatures,
824+
requestTimeout, uriTemplateManagerFactory,
825+
jsonSchemaValidator != null ? jsonSchemaValidator : DefaultMcpJson.getDefaultJsonSchemaValidator());
828826
return new McpSyncServer(asyncServer, this.immediateExecution);
829827
}
830828

@@ -852,10 +850,10 @@ public McpSyncServer build() {
852850
McpServerFeatures.Async asyncFeatures = McpServerFeatures.Async.fromSync(syncFeatures,
853851
this.immediateExecution);
854852
var jsonSchemaValidator = this.jsonSchemaValidator != null ? this.jsonSchemaValidator
855-
: DefaultMcpJsonSchemaValidatorSupplier.getDefaultJsonSchemaValidator();
853+
: DefaultMcpJson.getDefaultJsonSchemaValidator();
856854
var asyncServer = new McpAsyncServer(transportProvider,
857-
jsonMapper == null ? DefaultMcpJsonMapperSupplier.getDefaultMcpJsonMapper() : jsonMapper,
858-
asyncFeatures, this.requestTimeout, this.uriTemplateManagerFactory, jsonSchemaValidator);
855+
jsonMapper == null ? DefaultMcpJson.getDefaultMcpJsonMapper() : jsonMapper, asyncFeatures,
856+
this.requestTimeout, this.uriTemplateManagerFactory, jsonSchemaValidator);
859857
return new McpSyncServer(asyncServer, this.immediateExecution);
860858
}
861859

@@ -1857,9 +1855,9 @@ public McpStatelessAsyncServer build() {
18571855
var features = new McpStatelessServerFeatures.Async(this.serverInfo, this.serverCapabilities, this.tools,
18581856
this.resources, this.resourceTemplates, this.prompts, this.completions, this.instructions);
18591857
return new McpStatelessAsyncServer(transport,
1860-
jsonMapper == null ? DefaultMcpJsonMapperSupplier.getDefaultMcpJsonMapper() : jsonMapper, features,
1861-
requestTimeout, uriTemplateManagerFactory, jsonSchemaValidator != null ? jsonSchemaValidator
1862-
: DefaultMcpJsonSchemaValidatorSupplier.getDefaultJsonSchemaValidator());
1858+
jsonMapper == null ? DefaultMcpJson.getDefaultMcpJsonMapper() : jsonMapper, features,
1859+
requestTimeout, uriTemplateManagerFactory,
1860+
jsonSchemaValidator != null ? jsonSchemaValidator : DefaultMcpJson.getDefaultJsonSchemaValidator());
18631861
}
18641862

18651863
}
@@ -2337,10 +2335,9 @@ public McpStatelessSyncServer build() {
23372335
this.resources, this.resourceTemplates, this.prompts, this.completions, this.instructions);
23382336
var asyncFeatures = McpStatelessServerFeatures.Async.fromSync(syncFeatures, this.immediateExecution);
23392337
var asyncServer = new McpStatelessAsyncServer(transport,
2340-
jsonMapper == null ? DefaultMcpJsonMapperSupplier.getDefaultMcpJsonMapper() : jsonMapper,
2341-
asyncFeatures, requestTimeout, uriTemplateManagerFactory,
2342-
this.jsonSchemaValidator != null ? this.jsonSchemaValidator
2343-
: DefaultMcpJsonSchemaValidatorSupplier.getDefaultJsonSchemaValidator());
2338+
jsonMapper == null ? DefaultMcpJson.getDefaultMcpJsonMapper() : jsonMapper, asyncFeatures,
2339+
requestTimeout, uriTemplateManagerFactory, this.jsonSchemaValidator != null
2340+
? this.jsonSchemaValidator : DefaultMcpJson.getDefaultJsonSchemaValidator());
23442341
return new McpStatelessSyncServer(asyncServer, this.immediateExecution);
23452342
}
23462343

mcp-core/src/main/java/io/modelcontextprotocol/server/transport/HttpServletSseServerTransportProvider.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
import io.modelcontextprotocol.common.McpTransportContext;
2121
import io.modelcontextprotocol.json.McpJsonMapper;
2222
import io.modelcontextprotocol.json.TypeRef;
23-
import io.modelcontextprotocol.json.internal.DefaultMcpJsonMapperSupplier;
23+
import io.modelcontextprotocol.json.internal.DefaultMcpJson;
2424
import io.modelcontextprotocol.server.McpTransportContextExtractor;
2525
import io.modelcontextprotocol.spec.McpError;
2626
import io.modelcontextprotocol.spec.McpSchema;
@@ -634,7 +634,7 @@ public HttpServletSseServerTransportProvider build() {
634634
throw new IllegalStateException("MessageEndpoint must be set");
635635
}
636636
return new HttpServletSseServerTransportProvider(
637-
jsonMapper == null ? DefaultMcpJsonMapperSupplier.getDefaultMcpJsonMapper() : jsonMapper, baseUrl,
637+
jsonMapper == null ? DefaultMcpJson.getDefaultMcpJsonMapper() : jsonMapper, baseUrl,
638638
messageEndpoint, sseEndpoint, keepAliveInterval, contextExtractor);
639639
}
640640

mcp-core/src/main/java/io/modelcontextprotocol/server/transport/HttpServletStatelessServerTransport.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
import io.modelcontextprotocol.common.McpTransportContext;
1515
import io.modelcontextprotocol.json.McpJsonMapper;
16-
import io.modelcontextprotocol.json.internal.DefaultMcpJsonMapperSupplier;
16+
import io.modelcontextprotocol.json.internal.DefaultMcpJson;
1717
import io.modelcontextprotocol.server.McpStatelessServerHandler;
1818
import io.modelcontextprotocol.server.McpTransportContextExtractor;
1919
import io.modelcontextprotocol.spec.McpError;
@@ -297,8 +297,8 @@ public Builder contextExtractor(McpTransportContextExtractor<HttpServletRequest>
297297
public HttpServletStatelessServerTransport build() {
298298
Assert.notNull(mcpEndpoint, "Message endpoint must be set");
299299
return new HttpServletStatelessServerTransport(
300-
jsonMapper == null ? DefaultMcpJsonMapperSupplier.getDefaultMcpJsonMapper() : jsonMapper,
301-
mcpEndpoint, contextExtractor);
300+
jsonMapper == null ? DefaultMcpJson.getDefaultMcpJsonMapper() : jsonMapper, mcpEndpoint,
301+
contextExtractor);
302302
}
303303

304304
}

0 commit comments

Comments
 (0)