@@ -477,27 +477,20 @@ void testJsonSchema() throws Exception {
477477 }
478478 """ ;
479479
480+ // Deserialize the original string to a JsonSchema object
480481 McpSchema .JsonSchema schema = mapper .readValue (schemaJson , McpSchema .JsonSchema .class );
481482
482- assertThat (schema .type ()).isEqualTo ("object" );
483- assertThat (schema .properties ()).containsKeys ("name" , "address" );
484- assertThat (schema .required ()).containsExactly ("name" );
485- assertThat (schema .defs ()).isNotNull ();
486- assertThat (schema .defs ()).containsKey ("Address" );
483+ // Serialize the object back to a string
484+ String serialized = mapper .writeValueAsString (schema );
487485
488- String value = mapper .writeValueAsString (schema );
486+ // Deserialize again
487+ McpSchema .JsonSchema deserialized = mapper .readValue (serialized , McpSchema .JsonSchema .class );
489488
490- // Convert to map for easier assertions
491- Map <String , Object > jsonMap = mapper .readValue (value , new TypeReference <HashMap <String , Object >>() {
492- });
493- Map <String , Object > defs = (Map <String , Object >) jsonMap .get ("$defs" );
494- Map <String , Object > address = (Map <String , Object >) defs .get ("Address" );
489+ // Serialize one more time and compare with the first serialization
490+ String serializedAgain = mapper .writeValueAsString (deserialized );
495491
496- assertThat (address ).containsEntry ("type" , "object" );
497- assertThat (((Map <String , Object >) ((Map <String , Object >) address .get ("properties" )).get ("street" )).get ("type" ))
498- .isEqualTo ("string" );
499- assertThat (((Map <String , Object >) ((Map <String , Object >) address .get ("properties" )).get ("city" )).get ("type" ))
500- .isEqualTo ("string" );
492+ // The two serialized strings should be the same
493+ assertThatJson (serializedAgain ).when (Option .IGNORING_ARRAY_ORDER ).isEqualTo (json (serialized ));
501494 }
502495
503496 @ Test
@@ -527,27 +520,20 @@ void testJsonSchemaWithDefinitions() throws Exception {
527520 }
528521 """ ;
529522
523+ // Deserialize the original string to a JsonSchema object
530524 McpSchema .JsonSchema schema = mapper .readValue (schemaJson , McpSchema .JsonSchema .class );
531525
532- assertThat (schema .type ()).isEqualTo ("object" );
533- assertThat (schema .properties ()).containsKeys ("name" , "address" );
534- assertThat (schema .required ()).containsExactly ("name" );
535- assertThat (schema .definitions ()).isNotNull ();
536- assertThat (schema .definitions ()).containsKey ("Address" );
526+ // Serialize the object back to a string
527+ String serialized = mapper .writeValueAsString (schema );
537528
538- String value = mapper .writeValueAsString (schema );
529+ // Deserialize again
530+ McpSchema .JsonSchema deserialized = mapper .readValue (serialized , McpSchema .JsonSchema .class );
539531
540- // Convert to map for easier assertions
541- Map <String , Object > jsonMap = mapper .readValue (value , new TypeReference <HashMap <String , Object >>() {
542- });
543- Map <String , Object > definitions = (Map <String , Object >) jsonMap .get ("definitions" );
544- Map <String , Object > address = (Map <String , Object >) definitions .get ("Address" );
532+ // Serialize one more time and compare with the first serialization
533+ String serializedAgain = mapper .writeValueAsString (deserialized );
545534
546- assertThat (address ).containsEntry ("type" , "object" );
547- assertThat (((Map <String , Object >) ((Map <String , Object >) address .get ("properties" )).get ("street" )).get ("type" ))
548- .isEqualTo ("string" );
549- assertThat (((Map <String , Object >) ((Map <String , Object >) address .get ("properties" )).get ("city" )).get ("type" ))
550- .isEqualTo ("string" );
535+ // The two serialized strings should be the same
536+ assertThatJson (serializedAgain ).when (Option .IGNORING_ARRAY_ORDER ).isEqualTo (json (serialized ));
551537 }
552538
553539 @ Test
@@ -603,23 +589,21 @@ void testToolWithComplexSchema() throws Exception {
603589
604590 McpSchema .Tool tool = new McpSchema .Tool ("addressTool" , "Handles addresses" , complexSchemaJson );
605591
606- // Verify the schema was properly parsed and stored with $defs
607- assertThat (tool .inputSchema ().defs ()).isNotNull ();
608- assertThat (tool .inputSchema ().defs ()).containsKey ("Address" );
592+ // Serialize the tool to a string
593+ String serialized = mapper .writeValueAsString (tool );
609594
610- String value = mapper .writeValueAsString (tool );
595+ // Deserialize back to a Tool object
596+ McpSchema .Tool deserializedTool = mapper .readValue (serialized , McpSchema .Tool .class );
597+
598+ // Serialize again and compare with first serialization
599+ String serializedAgain = mapper .writeValueAsString (deserializedTool );
600+
601+ // The two serialized strings should be the same
602+ assertThatJson (serializedAgain ).when (Option .IGNORING_ARRAY_ORDER ).isEqualTo (json (serialized ));
611603
612- // Convert to map for easier assertions
613- Map <String , Object > jsonMap = mapper .readValue (value , new TypeReference <HashMap <String , Object >>() {
614- });
615- Map <String , Object > inputSchema = (Map <String , Object >) jsonMap .get ("inputSchema" );
616- Map <String , Object > defs = (Map <String , Object >) inputSchema .get ("$defs" );
617- Map <String , Object > address = (Map <String , Object >) defs .get ("Address" );
618- Map <String , Object > properties = (Map <String , Object >) inputSchema .get ("properties" );
619- Map <String , Object > shippingAddress = (Map <String , Object >) properties .get ("shippingAddress" );
620-
621- assertThat (address ).containsEntry ("type" , "object" );
622- assertThat (shippingAddress ).containsEntry ("$ref" , "#/$defs/Address" );
604+ // Just verify the basic structure was preserved
605+ assertThat (deserializedTool .inputSchema ().defs ()).isNotNull ();
606+ assertThat (deserializedTool .inputSchema ().defs ()).containsKey ("Address" );
623607 }
624608
625609 @ Test
0 commit comments