|
22 | 22 | import java.util.LinkedList; |
23 | 23 | import java.util.List; |
24 | 24 | import java.util.Map; |
| 25 | +import java.util.regex.Matcher; |
| 26 | +import java.util.regex.Pattern; |
25 | 27 |
|
26 | 28 | import jakarta.json.Json; |
27 | 29 | import jakarta.json.JsonObject; |
|
40 | 42 |
|
41 | 43 | public class AsyncapiParser |
42 | 44 | { |
| 45 | + private static final Pattern VERSION_PATTERN = Pattern.compile("(\\d\\.\\d)\\.\\d+"); |
| 46 | + |
43 | 47 | private final Map<String, JsonSchema> schemas; |
44 | 48 |
|
45 | 49 | public AsyncapiParser() |
46 | 50 | { |
47 | 51 | Map<String, JsonSchema> schemas = new Object2ObjectHashMap<>(); |
48 | | - schemas.put("2.6.0", schema("2.6.0")); |
49 | | - schemas.put("3.0.0", schema("3.0.0")); |
| 52 | + schemas.put("2.6", schema("2.6.0")); |
| 53 | + schemas.put("3.0", schema("3.0.1")); |
50 | 54 | this.schemas = unmodifiableMap(schemas); |
51 | 55 | } |
52 | 56 |
|
@@ -89,35 +93,30 @@ public Asyncapi parse( |
89 | 93 | private JsonSchema schema( |
90 | 94 | String version) |
91 | 95 | { |
92 | | - InputStream schemaInput = null; |
| 96 | + final String schemaName = String.format("schema/asyncapi.%s.schema.json", version); |
| 97 | + final InputStream schemaInput = AsyncapiBinding.class.getResourceAsStream(schemaName); |
93 | 98 |
|
94 | | - if (version.startsWith("2.6")) |
95 | | - { |
96 | | - schemaInput = AsyncapiBinding.class.getResourceAsStream("schema/asyncapi.2.6.schema.json"); |
97 | | - } |
98 | | - else if (version.startsWith("3.0")) |
99 | | - { |
100 | | - schemaInput = AsyncapiBinding.class.getResourceAsStream("schema/asyncapi.3.0.schema.json"); |
101 | | - } |
102 | | - |
103 | | - JsonValidationService service = JsonValidationService.newInstance(); |
104 | | - |
105 | | - return service.createSchemaReaderFactoryBuilder() |
| 99 | + return JsonValidationService.newInstance() |
| 100 | + .createSchemaReaderFactoryBuilder() |
106 | 101 | .withSpecVersionDetection(true) |
107 | 102 | .build() |
108 | 103 | .createSchemaReader(schemaInput) |
109 | 104 | .read(); |
110 | 105 | } |
111 | 106 |
|
112 | 107 | private String detectAsyncApiVersion( |
113 | | - String openapiText) |
| 108 | + String asyncapiText) |
114 | 109 | { |
115 | | - try (JsonReader reader = Json.createReader(new StringReader(openapiText))) |
| 110 | + try (JsonReader reader = Json.createReader(new StringReader(asyncapiText))) |
116 | 111 | { |
117 | 112 | JsonObject json = reader.readObject(); |
118 | 113 | if (json.containsKey("asyncapi")) |
119 | 114 | { |
120 | | - return json.getString("asyncapi"); |
| 115 | + final String versionString = json.getString("asyncapi"); |
| 116 | + final Matcher matcher = VERSION_PATTERN.matcher(versionString); |
| 117 | + |
| 118 | + final String majorMinorVersion = matcher.matches() ? matcher.group(1) : null; |
| 119 | + return majorMinorVersion; |
121 | 120 | } |
122 | 121 | else |
123 | 122 | { |
|
0 commit comments