1212import io .modelcontextprotocol .json .TypeRef ;
1313import io .modelcontextprotocol .server .McpTransportContextExtractor ;
1414import io .modelcontextprotocol .spec .*;
15- import io .modelcontextprotocol .util .Assert ;
1615import io .modelcontextprotocol .util .KeepAliveScheduler ;
1716import modelengine .fel .tool .mcp .entity .Event ;
1817import modelengine .fit .http .annotation .DeleteMapping ;
2827import modelengine .fit .http .server .HttpClassicServerResponse ;
2928import modelengine .fitframework .flowable .Choir ;
3029import modelengine .fitframework .flowable .Emitter ;
30+ import modelengine .fitframework .inspection .Validation ;
3131import modelengine .fitframework .log .Logger ;
3232import reactor .core .publisher .Flux ;
3333import reactor .core .publisher .Mono ;
@@ -59,24 +59,22 @@ public class FitMcpStreamableServerTransportProvider implements McpStreamableSer
5959 * Flag indicating whether DELETE requests are disallowed on the endpoint.
6060 */
6161 private final boolean disallowDelete ;
62-
6362 private final ObjectMapper objectMapper ;
63+ private final McpTransportContextExtractor <HttpClassicServerRequest > contextExtractor ;
64+ private KeepAliveScheduler keepAliveScheduler ;
6465
6566 private McpStreamableServerSession .Factory sessionFactory ;
6667
6768 /**
6869 * Map of active client sessions, keyed by mcp-session-id.
6970 */
70- private final ConcurrentHashMap <String , McpStreamableServerSession > sessions = new ConcurrentHashMap <>();
71-
72- private final McpTransportContextExtractor <HttpClassicServerRequest > contextExtractor ;
71+ private final Map <String , McpStreamableServerSession > sessions = new ConcurrentHashMap <>();
7372
7473 /**
7574 * Flag indicating if the transport is shutting down.
7675 */
7776 private volatile boolean isClosing = false ;
7877
79- private KeepAliveScheduler keepAliveScheduler ;
8078
8179 /**
8280 * Constructs a new FitMcpStreamableServerTransportProvider instance,
@@ -93,8 +91,8 @@ private FitMcpStreamableServerTransportProvider(ObjectMapper objectMapper,
9391 boolean disallowDelete ,
9492 McpTransportContextExtractor <HttpClassicServerRequest > contextExtractor ,
9593 Duration keepAliveInterval ) {
96- Assert .notNull (objectMapper , "ObjectMapper must not be null" );
97- Assert .notNull (contextExtractor , "McpTransportContextExtractor must not be null" );
94+ Validation .notNull (objectMapper , "ObjectMapper must not be null" );
95+ Validation .notNull (contextExtractor , "McpTransportContextExtractor must not be null" );
9896
9997 this .objectMapper = objectMapper ;
10098 this .disallowDelete = disallowDelete ;
@@ -522,16 +520,13 @@ else if (map.containsKey("result") || map.containsKey("error")) {
522520 * send messages concurrently.
523521 */
524522 private class FitStreamableMcpSessionTransport implements McpStreamableServerTransport {
525-
526523 private final String sessionId ;
527-
524+ private final HttpClassicServerResponse response ;
528525 private final Emitter <TextEvent > emitter ;
529526
530527 private final ReentrantLock lock = new ReentrantLock ();
531528
532529 private volatile boolean closed = false ;
533-
534- private final HttpClassicServerResponse response ;
535530
536531 /**
537532 * Creates a new session transport with the specified ID and SSE builder.
@@ -676,14 +671,10 @@ public static Builder builder() {
676671 * Builder for creating instances of {@link FitMcpStreamableServerTransportProvider}.
677672 */
678673 public static class Builder {
679-
680674 private ObjectMapper objectMapper ;
681-
682675 private boolean disallowDelete = false ;
683-
684676 private McpTransportContextExtractor <HttpClassicServerRequest > contextExtractor = (
685677 HttpClassicServerRequest ) -> McpTransportContext .EMPTY ;
686-
687678 private Duration keepAliveInterval ;
688679
689680 /**
@@ -694,7 +685,7 @@ public static class Builder {
694685 * @throws IllegalArgumentException if objectMapper is null
695686 */
696687 public Builder objectMapper (ObjectMapper objectMapper ) {
697- Assert .notNull (objectMapper , "ObjectMapper must not be null" );
688+ Validation .notNull (objectMapper , "ObjectMapper must not be null" );
698689 this .objectMapper = objectMapper ;
699690 return this ;
700691 }
@@ -722,7 +713,7 @@ public Builder disallowDelete(boolean disallowDelete) {
722713 * @throws IllegalArgumentException if contextExtractor is null
723714 */
724715 public Builder contextExtractor (McpTransportContextExtractor <HttpClassicServerRequest > contextExtractor ) {
725- Assert .notNull (contextExtractor , "contextExtractor must not be null" );
716+ Validation .notNull (contextExtractor , "contextExtractor must not be null" );
726717 this .contextExtractor = contextExtractor ;
727718 return this ;
728719 }
@@ -748,7 +739,7 @@ public Builder keepAliveInterval(Duration keepAliveInterval) {
748739 * @throws IllegalStateException if required parameters are not set
749740 */
750741 public FitMcpStreamableServerTransportProvider build () {
751- Assert .notNull (this .objectMapper , "ObjectMapper must be set" );
742+ Validation .notNull (this .objectMapper , "ObjectMapper must be set" );
752743
753744 return new FitMcpStreamableServerTransportProvider (this .objectMapper , this .disallowDelete ,
754745 this .contextExtractor , this .keepAliveInterval );
0 commit comments