Blackberry InputStream закрывается преждевременно - PullRequest
0 голосов
/ 13 августа 2011

Следующий код используется для получения XML-файла с веб-сервера, и сегодня, для последних нескольких запусков, возникает исключение с сообщением об ошибке «Поток закрыт». Со вчерашнего дня я не изменял этот код, а также не модифицировал никакие методы, обрабатывающие синтаксический анализ.

Идея состоит в том, чтобы построить список элементов из файла XML, извлеченного из fullurl. В списке должно быть 20 элементов (на основе XML-файла, который я сейчас использую). В последних нескольких запусках операция синтаксического анализа вызвала исключение, упомянутое выше, и хранит только 5 элементов. Метод public void endDocument() никогда не вызывается.

Любые мысли были бы полезны, поскольку их необходимо перенести в фоновую задачу, и я бы хотел решить ее до того, как это сделаю.

public void getAndParseXML() {
        HttpConnection xmlcon = null;
        InputStream xmlinput     = null;
        SAXParserFactory spf  = null;

        String fullurl = this.getNewsUrl() + NewsListBuilderTask.CONNECTION_STRING; // URL of XML file along specification for connection type 

        if ( (TransportInfo.isTransportTypeAvailable(TransportInfo.TRANSPORT_TCP_WIFI)) && (TransportInfo.hasSufficientCoverage(TransportInfo.TRANSPORT_TCP_WIFI)) )
            fullurl += NewsListBuilderTask.WIFI_STRING;

        try {
            xmlcon = (HttpConnection)Connector.open( fullurl, Connector.READ, false );  // open connection to XML source
            spf = SAXParserFactory.newInstance();                               // set up xml parsers
            xmlinput = xmlcon.openInputStream();                                // set up input stream

            SAXParser saxparser = spf.newSAXParser();   // create a new parser object
            saxparser.parse( xmlinput, this );              // parse operations start here
        }
        catch( IOException ex ) {
            System.out.println( "IOException Caught:\t" + ex.getMessage() ); // set a default item if any exception occurs with retreiving or parsing XML file
            this.createDefaultItem();
        }
        catch (SAXException ex) {
            System.out.println( "SAXException Caught:\t" + ex.getMessage() );
            ex.printStackTrace();
            this.createDefaultItem();
        }
        catch ( IllegalArgumentException ex ) {
            System.out.println( "IllegalArgumentException Caught:\t" + ex.getMessage() );
            ex.printStackTrace();
            this.createDefaultItem();
        }
        catch (ParserConfigurationException ex) {
            System.out.println( "ParserConfigurationException Caught:\t" + ex.getMessage() );
            ex.printStackTrace();
            this.createDefaultItem();
        }
        finally {

            if ( xmlinput != null) {
                try {
                    xmlinput.close();   // attempt to close all connections

                }
                catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if ( xmlcon != null ) {
                try {
                    xmlcon.close();
                }
                catch ( IOException ex ) {
                    ex.printStackTrace();
                }
            }
        }
    }

ПРИМЕЧАНИЕ. Используемое fullurl заканчивается bieng "http://somexmlfile.com?type=photo;deviceside=true" с добавлением ";interface=wifi", если доступно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...