Github user kaspersorensen commented on a diff in the pull request:

    https://github.com/apache/metamodel/pull/49#discussion_r41101020
  
    --- Diff: 
excel/src/main/java/org/apache/metamodel/excel/ExcelDataContext.java ---
    @@ -209,13 +205,13 @@ protected void onSchemaCacheRefreshed() {
             return null;
         }
     
    -    private SpreadsheetReaderDelegate 
getSpreadsheetReaderDelegate(Ref<InputStream> inputStream)
    +    private SpreadsheetReaderDelegate getSpreadsheetReaderDelegate()
                 throws MetaModelException {
             if (_spreadsheetReaderDelegate == null) {
                 synchronized (this) {
                     if (_spreadsheetReaderDelegate == null) {
                         try {
    -                        if 
(POIXMLDocument.hasOOXMLHeader(inputStream.get())) {
    +                        if 
(POIXMLDocument.hasOOXMLHeader(getInputStream())) {
    --- End diff --
    
    The InputStream here is never closed. In fact I think this code should be 
rewritten like this:
    
    ```
        private SpreadsheetReaderDelegate getSpreadsheetReaderDelegate() throws 
MetaModelException {
            if (_spreadsheetReaderDelegate == null) {
                synchronized (this) {
                    if (_spreadsheetReaderDelegate == null) {
                        _spreadsheetReaderDelegate = _resource.read(new 
Func<InputStream, SpreadsheetReaderDelegate>() {
                            @Override
                            public SpreadsheetReaderDelegate eval(InputStream 
inputStream) {
                                try {
                                    if 
(POIXMLDocument.hasOOXMLHeader(inputStream)) {
                                        return new 
XlsxSpreadsheetReaderDelegate(_configuration);
                                    } else {
                                        return new 
DefaultSpreadsheetReaderDelegate(_configuration);
                                    }
                                } catch (IOException e) {
                                    logger.error("Could not identify 
spreadsheet type, using default", e);
                                    return new 
DefaultSpreadsheetReaderDelegate(_configuration);
                                }
                            }
                        });
                    }
                }
            }
            return _spreadsheetReaderDelegate;
        }
    ```
    
    ... and then we should delete ```getInputStream()``` and 
```getInputStreamRef()```.
    
    ... but I tried that, and it may be better, but it didn't make my Java not 
crash :-P


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at [email protected] or file a JIRA ticket
with INFRA.
---

Reply via email to