77import static java .nio .charset .StandardCharsets .UTF_8 ;
88
99import java .io .ByteArrayInputStream ;
10+ import java .io .IOException ;
1011import java .io .InputStream ;
1112import java .io .InputStreamReader ;
1213import java .io .Reader ;
@@ -316,19 +317,20 @@ private Future<ServiceMetadata> createServiceMetadataWithSchema(Buffer csdl) {
316317 * a ServiceMetadata instance
317318 */
318319 private ServiceMetadata createServiceMetadataWithSchema (Buffer csdl , String schemaNamespace )
319- throws XMLStreamException {
320+ throws IOException , XMLStreamException {
320321 synchronized (this ) {
321322 // Create a metadata parser instance for the schema namespace if it is not existing
322323 MetadataParser parser = metadataParsers .computeIfAbsent (schemaNamespace ,
323324 newSchemaNamespace -> new MetadataParser ().referenceResolver (null ).parseAnnotations (true ));
324325
325- Reader csdlReader = new InputStreamReader (new BufferInputStream (csdl ), UTF_8 );
326326 // does NOT to be a ConcurrentHashMap, as only get / put access! so no iteration is done!
327327 SchemaBasedEdmProvider provider = edmProviders .get (schemaNamespace );
328- if (provider == null ) {
329- edmProviders .put (schemaNamespace , provider = parser .buildEdmProvider (csdlReader ));
330- } else {
331- parser .addToEdmProvider (provider , csdlReader );
328+ try (Reader csdlReader = new InputStreamReader (new BufferInputStream (csdl ), UTF_8 )) {
329+ if (provider == null ) {
330+ edmProviders .put (schemaNamespace , provider = parser .buildEdmProvider (csdlReader ));
331+ } else {
332+ parser .addToEdmProvider (provider , csdlReader );
333+ }
332334 }
333335
334336 return getBufferedOData ().createServiceMetadata (provider , Collections .emptyList (),
@@ -344,9 +346,11 @@ private ServiceMetadata createServiceMetadataWithSchema(Buffer csdl, String sche
344346 * ATTENTION: This method contains BLOCKING code and thus should only be called in a Vert.x worker thread!
345347 */
346348 @ VisibleForTesting
347- static ServiceMetadata createServiceMetadata (Buffer csdl ) throws XMLStreamException {
348- InputStreamReader reader = new InputStreamReader (new BufferInputStream (csdl ), UTF_8 );
349- SchemaBasedEdmProvider edmProvider = new MetadataParser ().referenceResolver (null ).buildEdmProvider (reader );
349+ static ServiceMetadata createServiceMetadata (Buffer csdl ) throws IOException , XMLStreamException {
350+ SchemaBasedEdmProvider edmProvider ;
351+ try (Reader reader = new InputStreamReader (new BufferInputStream (csdl ), UTF_8 )) {
352+ edmProvider = new MetadataParser ().referenceResolver (null ).buildEdmProvider (reader );
353+ }
350354 return getBufferedOData ().createServiceMetadata (edmProvider , Collections .emptyList ());
351355 }
352356
0 commit comments