Example usage for org.xml.sax XMLReader parse

List of usage examples for org.xml.sax XMLReader parse

Introduction

In this page you can find the example usage for org.xml.sax XMLReader parse.

Prototype

public void parse(String systemId) throws IOException, SAXException;

Source Link

Document

Parse an XML document from a system identifier (URI).

Usage

From source file:org.globus.mds.bigindex.impl.database.xml.xindice.XindiceDriver.java

/**
 * Adds a Document to a collection, where the input Document is in String form.
 * @param parentCol - name of the parent collection
 * @param docstr - String representation of the Document to add
 * @param docName - name of the document
 * @return String - the document ID./*from   www . ja va 2 s. c o  m*/
 */
public String addDocumentString(String parentCol, String docstr, String docName) throws Exception {
    checkInitialized();

    Collection col = null;
    String docID = null;
    try {
        if (this.isProfiling) {
            this.performanceLogger.start();
        }

        // Create a collection instance
        String colURI = normalizeCollectionURI(parentCol, this.isLocal);
        col = DatabaseManager.getCollection(colURI);
        if (col == null) {
            String err = "XINDICE ERROR: Collection not found! " + colURI;
            if (logger.isDebugEnabled()) {
                logger.debug(err);
            }
            throw new Exception(err);
        }

        // Parse in XML using Xerces
        StringReader reader = new StringReader(docstr);

        SAXParserFactory spf = javax.xml.parsers.SAXParserFactory.newInstance();
        spf.setNamespaceAware(true);

        XMLReader saxReader = spf.newSAXParser().getXMLReader();
        StringSerializer ser = new StringSerializer(null);

        saxReader.setContentHandler(ser);
        saxReader.setProperty("http://xml.org/sax/properties/lexical-handler", ser);
        saxReader.parse(new InputSource(reader));
        reader.close();

        // Create the XMLResource and store the document
        XMLResource resource = (XMLResource) col.createResource(docName, "XMLResource");
        resource.setContent(ser.toString());
        col.storeResource(resource);
        docID = resource.getId();

        if (logger.isDebugEnabled()) {
            logger.debug("STORED Document: " + colURI + "/" + docID);
        }
        resource = null;
    } finally {
        if (col != null) {
            col.close();
        }
        col = null;

        if (this.isProfiling) {
            this.performanceLogger.stop("addDocumentString");
        }
    }
    return docID;
}

From source file:org.h2gis.drivers.osm.OSMParser.java

/**
 * Read the OSM file and create its corresponding tables.
 *
 * @param inputFile/*ww  w .  ja v  a  2  s  . c o  m*/
 * @param tableName
 * @param connection
 * @param progress
 * @return
 * @throws SQLException
 */
public boolean read(Connection connection, String tableName, File inputFile, ProgressVisitor progress)
        throws SQLException {
    this.progress = progress.subProcess(100);
    // Initialisation
    final boolean isH2 = JDBCUtilities.isH2DataBase(connection.getMetaData());
    boolean success = false;
    TableLocation requestedTable = TableLocation.parse(tableName, isH2);
    String osmTableName = requestedTable.getTable();
    checkOSMTables(connection, isH2, requestedTable, osmTableName);
    createOSMDatabaseModel(connection, isH2, requestedTable, osmTableName);

    FileInputStream fs = null;
    try {
        fs = new FileInputStream(inputFile);
        this.fc = fs.getChannel();
        this.fileSize = fc.size();
        // Given the file size and an average node file size.
        // Skip how many nodes in order to update progression at a step of 1%
        readFileSizeEachNode = Math.max(1, (this.fileSize / AVERAGE_NODE_SIZE) / 100);
        nodeCountProgress = 0;
        XMLReader parser = XMLReaderFactory.createXMLReader();
        parser.setErrorHandler(this);
        parser.setContentHandler(this);
        if (inputFile.getName().endsWith(".osm")) {
            parser.parse(new InputSource(fs));
        } else if (inputFile.getName().endsWith(".osm.gz")) {
            parser.parse(new InputSource(new GZIPInputStream(fs)));
        } else if (inputFile.getName().endsWith(".osm.bz2")) {
            parser.parse(new InputSource(new BZip2CompressorInputStream(fs)));
        }
        success = true;
    } catch (SAXException ex) {
        throw new SQLException(ex);
    } catch (IOException ex) {
        throw new SQLException("Cannot parse the file " + inputFile.getAbsolutePath(), ex);
    } finally {
        try {
            if (fs != null) {
                fs.close();
            }
        } catch (IOException ex) {
            throw new SQLException("Cannot close the file " + inputFile.getAbsolutePath(), ex);
        }
        // When the reading ends, close() method has to be called
        if (nodePreparedStmt != null) {
            nodePreparedStmt.close();
        }
        if (nodeTagPreparedStmt != null) {
            nodeTagPreparedStmt.close();
        }
        if (wayPreparedStmt != null) {
            wayPreparedStmt.close();
        }
        if (wayTagPreparedStmt != null) {
            wayTagPreparedStmt.close();
        }
        if (wayNodePreparedStmt != null) {
            wayNodePreparedStmt.close();
        }
        if (relationPreparedStmt != null) {
            relationPreparedStmt.close();
        }
        if (relationTagPreparedStmt != null) {
            relationTagPreparedStmt.close();
        }
        if (nodeMemberPreparedStmt != null) {
            nodeMemberPreparedStmt.close();
        }
        if (wayMemberPreparedStmt != null) {
            wayMemberPreparedStmt.close();
        }
        if (relationMemberPreparedStmt != null) {
            relationMemberPreparedStmt.close();
        }
        if (tagPreparedStmt != null) {
            tagPreparedStmt.close();
        }
    }

    return success;
}

From source file:org.h2gis.functions.io.osm.OSMParser.java

/**
 * Read the OSM file and create its corresponding tables.
 *
 * @param inputFile/*from   www .java  2 s .c  om*/
 * @param tableName
 * @param connection
 * @param progress
 * @return
 * @throws SQLException
 */
public boolean read(Connection connection, String tableName, File inputFile, ProgressVisitor progress)
        throws SQLException {
    this.progress = progress.subProcess(100);
    // Initialisation
    final boolean isH2 = JDBCUtilities.isH2DataBase(connection.getMetaData());
    boolean success = false;
    TableLocation requestedTable = TableLocation.parse(tableName, isH2);
    String osmTableName = requestedTable.getTable();
    checkOSMTables(connection, isH2, requestedTable, osmTableName);
    createOSMDatabaseModel(connection, isH2, requestedTable, osmTableName);

    FileInputStream fs = null;
    try {
        fs = new FileInputStream(inputFile);
        this.fc = fs.getChannel();
        this.fileSize = fc.size();
        // Given the file size and an average node file size.
        // Skip how many nodes in order to update progression at a step of 1%
        readFileSizeEachNode = Math.max(1, (this.fileSize / AVERAGE_NODE_SIZE) / 100);
        nodeCountProgress = 0;
        XMLReader parser = XMLReaderFactory.createXMLReader();
        parser.setErrorHandler(this);
        parser.setContentHandler(this);
        if (inputFile.getName().endsWith(".osm")) {
            parser.parse(new InputSource(fs));
        } else if (inputFile.getName().endsWith(".osm.gz")) {
            parser.parse(new InputSource(new GZIPInputStream(fs)));
        } else if (inputFile.getName().endsWith(".osm.bz2")) {
            parser.parse(new InputSource(new BZip2CompressorInputStream(fs)));
        } else {
            throw new SQLException("Supported formats are .osm, .osm.gz, .osm.bz2");
        }
        success = true;
    } catch (SAXException ex) {
        throw new SQLException(ex);
    } catch (IOException ex) {
        throw new SQLException("Cannot parse the file " + inputFile.getAbsolutePath(), ex);
    } finally {
        try {
            if (fs != null) {
                fs.close();
            }
        } catch (IOException ex) {
            throw new SQLException("Cannot close the file " + inputFile.getAbsolutePath(), ex);
        }
        // When the reading ends, close() method has to be called
        if (nodePreparedStmt != null) {
            nodePreparedStmt.close();
        }
        if (nodeTagPreparedStmt != null) {
            nodeTagPreparedStmt.close();
        }
        if (wayPreparedStmt != null) {
            wayPreparedStmt.close();
        }
        if (wayTagPreparedStmt != null) {
            wayTagPreparedStmt.close();
        }
        if (wayNodePreparedStmt != null) {
            wayNodePreparedStmt.close();
        }
        if (relationPreparedStmt != null) {
            relationPreparedStmt.close();
        }
        if (relationTagPreparedStmt != null) {
            relationTagPreparedStmt.close();
        }
        if (nodeMemberPreparedStmt != null) {
            nodeMemberPreparedStmt.close();
        }
        if (wayMemberPreparedStmt != null) {
            wayMemberPreparedStmt.close();
        }
        if (relationMemberPreparedStmt != null) {
            relationMemberPreparedStmt.close();
        }
        if (tagPreparedStmt != null) {
            tagPreparedStmt.close();
        }
    }

    return success;
}

From source file:org.hw.parlance.ParlanceActivity.java

/**
 * Method to parse XML response from Yahoo URL and add markers of restaurants on the map
 *//*from   w w  w .  j a  v a 2  s.  c o  m*/
private synchronized void xmlParsing(String XMLResponse) {
    try {
        URLConnection conn = new URL(XMLResponse).openConnection();
        conn.setConnectTimeout(50000);
        conn.setReadTimeout(50000);
        SAXParserFactory spf = SAXParserFactory.newInstance();
        SAXParser sp = spf.newSAXParser();
        XMLReader xr = sp.getXMLReader();
        ItemHandler itemHandler = new ItemHandler();
        xr.setContentHandler(itemHandler);
        xr.parse(new InputSource(conn.getInputStream()));

        _itemAdapter.arr = itemHandler.getList();

        for (int index = 0; index < _itemAdapter.arr.size(); index++) {

            Marker temp_marker = mMap.addMarker(new MarkerOptions()
                    .position(new LatLng(Double.parseDouble(_itemAdapter.arr.get(index).getLat()),
                            Double.parseDouble(_itemAdapter.arr.get(index).getLon())))
                    .title(_itemAdapter.arr.get(index).getName())
                    .icon(BitmapDescriptorFactory.fromResource(numMarkerIcon[index])));

            this._markList.add(temp_marker);
        }

        _itemAdapter.notifyDataSetChanged();

    } catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (ParserConfigurationException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (SAXException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

From source file:org.infoscoop.request.filter.DetectTypeFilter.java

public static void main(String[] args) throws Exception {
    new DetectTypeFilter();

    DetectManager h = new DetectTypeFilter.DetectManager();
    XMLReader reader = factory.newSAXParser().getXMLReader();
    reader.setEntityResolver(NoOpEntityResolver.getInstance());
    reader.setContentHandler(h);/*from  w w w  .  jav  a 2  s.  c o m*/
    reader.parse(new InputSource(new FileInputStream("src/main/webapp/generalMessages_rss.xml")));

}

From source file:org.infoscoop.request.filter.DetectTypeFilter.java

protected InputStream postProcess(ProxyRequest request, InputStream responseStream) throws IOException {
    JSONArray result = new JSONArray();
    //BufferedInputStream responseStream = new BufferedInputStream(_responseStream);

    String contentType = request.getResponseHeader("Content-Type");

    String encoding = getContentTypeCharset(contentType);
    responseStream = new ByteArrayInputStream(ProxyRequest.stream2Bytes(responseStream)); //FIXME
    XMLFilter.skipEmptyLine(responseStream);

    try {/*w  w  w  .j  a  v a 2  s  .com*/
        DetectManager handler = null;
        if (isXml(contentType, responseStream)) {
            try {
                DetectManager h = new DetectManager();
                XMLReader reader = factory.newSAXParser().getXMLReader();
                reader.setEntityResolver(NoOpEntityResolver.getInstance());
                reader.setContentHandler(h);
                reader.parse(new InputSource(responseStream));

                handler = h;
            } catch (SAXException e) {
                log.warn("parse error", e);

                responseStream.reset();
            }
        }

        if (handler == null) {
            handler = new DetectManager();

            if (encoding == null) {
                encoding = findEncoding(responseStream);//TODO:
                responseStream.reset();
            }

            org.cyberneko.html.parsers.SAXParser nekoParser = new org.cyberneko.html.parsers.SAXParser();
            nekoParser.setProperty("http://cyberneko.org/html/properties/names/elems", "lower");
            nekoParser.setProperty("http://cyberneko.org/html/properties/names/attrs", "lower");

            if (encoding != null)
                nekoParser.setProperty("http://cyberneko.org/html/properties/default-encoding", encoding);

            Transformer transformer = TransformerFactory.newInstance().newTransformer();
            SAXSource source = new SAXSource(nekoParser, new InputSource(responseStream));
            SAXResult saxResult = new SAXResult(handler);
            transformer.transform(source, saxResult);
        }

        result = handler.getResult(request);
    } catch (Exception e) {
        log.error("Url: [" + request.getTargetURL() + "] detect widget type failed.", e);
        //return 500;TODO:
        return null;
    }
    byte[] resultBytes = result.toString().getBytes("UTF-8");
    request.putResponseHeader("Content-Type", "text/plain; charset=UTF-8");
    request.putResponseHeader("Content-Length", String.valueOf(resultBytes.length));
    //request.setResponseBody(new ByteArrayInputStream( resultBytes ));
    return new ByteArrayInputStream(resultBytes);
}

From source file:org.infoscoop.request.filter.ical.ICalendarUtil.java

public static Reader convertRdf2Ics(InputStream is) throws SAXException, IOException {
    SAXParserFactory factory = SAXParserFactory.newInstance();
    factory.setValidating(false);// w  w  w  .j  av a 2s . c o m
    factory.setNamespaceAware(true);
    XMLReader reader = null;
    try {
        reader = factory.newSAXParser().getXMLReader();
        reader.setEntityResolver(NoOpEntityResolver.getInstance());
    } catch (ParserConfigurationException e) {
        log.error("", e);
    }

    Rdf2IcsHandler xmlHandler = new Rdf2IcsHandler();

    reader.setContentHandler(xmlHandler);
    reader.parse(new InputSource(is));
    return new StringReader(xmlHandler.getResult());
}

From source file:org.infoscoop.request.filter.RssFilter.java

public static byte[] process(ProxyRequest request, InputStream responseStream) throws IOException {

    String dateTimeFormat = request.getRequestHeader("X-IS-DATETIMEFORMAT");
    if (dateTimeFormat != null) {
        dateTimeFormat = URLDecoder.decode(dateTimeFormat, "UTF-8");
    }/*from w  w  w.  j  a  v a 2s.c  om*/
    String freshTime = request.getRequestHeader("X-IS-FRESHTIME");
    String maxCountString = request.getRequestHeader("X-IS-RSSMAXCOUNT");
    int maxCount = Integer.MAX_VALUE;
    if (maxCountString != null) {
        try {
            int paramMaxCount = Integer.parseInt(maxCountString);
            if (paramMaxCount > 0) {
                maxCount = paramMaxCount;
            }
        } catch (NumberFormatException e) {
            log.warn("rssmaxcount \"" + maxCountString + "\" isn't integer value.");
        }
    }

    // Filtering
    String titleFilter = request.getRequestHeader("X-IS-TITLEFILTER");
    if (titleFilter != null)
        titleFilter = URLDecoder.decode(titleFilter, "UTF-8");
    String creatorFilter = request.getRequestHeader("X-IS-CREATORFILTER");
    if (creatorFilter != null)
        creatorFilter = URLDecoder.decode(creatorFilter, "UTF-8");
    String categoryFilter = request.getRequestHeader("X-IS-CATEGORYFILTER");
    if (categoryFilter != null)
        categoryFilter = URLDecoder.decode(categoryFilter, "UTF-8");

    //      String freshDays = request.getRequestHeader("_freshdays");
    //      String logoffDateTime = request.getRequestHeader("_logoffdatetime");

    BufferedInputStream bis = new BufferedInputStream(responseStream);

    boolean isAtom = isAtom(bis);

    XMLFilter.skipEmptyLine(bis);

    String pageSizeStr = request.getRequestHeader("X-IS-PAGESIZE");
    int pageSize = -1;
    if (pageSizeStr != null) {
        try {
            pageSize = Integer.parseInt(pageSizeStr);
        } catch (NumberFormatException ex) {
            log.warn("init parameter \"rssPageSize\" has illegal value");
        }
    }
    //if( pageSize < 0 )
    //   pageSize = 20;

    long start = System.currentTimeMillis();
    RssResultBuilder resultBuilder = new RssJsonResultBuilder(pageSize);
    RssHandler handler;
    if (isAtom) {
        handler = new AtomHandler(resultBuilder, dateTimeFormat, freshTime, maxCount, titleFilter,
                creatorFilter, categoryFilter);
    } else {
        handler = new RssHandler(resultBuilder, dateTimeFormat, freshTime, maxCount, titleFilter, creatorFilter,
                categoryFilter);
    }
    try {
        XMLReader reader = factory.newSAXParser().getXMLReader();
        reader.setProperty("http://xml.org/sax/properties/lexical-handler", handler);
        reader.setEntityResolver(NoOpEntityResolver.getInstance());
        reader.setContentHandler(handler);
        reader.parse(new InputSource(bis));

        if (log.isDebugEnabled()) {
            long end = System.currentTimeMillis();
            log.debug("Rss parse duration:" + (end - start));
        }
        int pageCount = resultBuilder.getPageCount();
        if (pageCount > 1) {
            String uid = request.getPortalUid();
            if (uid == null)
                uid = request.getRequestHeader("MSDPortal-SessionId");
            for (int pageNum = 0; pageNum < pageCount; pageNum++) {
                RssCacheDAO.newInstance().insertCache(uid, request.getTargetURL(), pageNum,
                        resultBuilder.getResult(pageNum));
            }
        }

        return resultBuilder.getResult(0).getBytes("UTF-8");
    } catch (SAXException e) {
        log.error("Xml file at URL [ " + request.getTargetURL() + "] is failed to be analysed.["
                + e.getLocalizedMessage() + "]", e);
        resultBuilder.setStatusCode(1);
        resultBuilder.setMessage("Failed to analyse xml.: " + e.getLocalizedMessage());
        return resultBuilder.getResult().getBytes("UTF-8");
    } catch (IOException e) {
        log.error("Xml file at URL [ " + request.getTargetURL() + "] is failed to be analysed.["
                + e.getLocalizedMessage() + "]", e);
        resultBuilder.setStatusCode(1);
        resultBuilder.setMessage("Failed to analyse xml.: " + e.getLocalizedMessage());
        return resultBuilder.getResult().getBytes("UTF-8");
    } catch (ParserConfigurationException e) {
        log.error("Xml file at URL [ " + request.getTargetURL() + "] is failed to be analysed.["
                + e.getLocalizedMessage() + "]", e);
        resultBuilder.setStatusCode(1);
        resultBuilder.setMessage("Failed to analyse xml.: " + e.getLocalizedMessage());
        return resultBuilder.getResult().getBytes("UTF-8");
    } finally {
        bis.close();
    }

}

From source file:org.infoscoop.web.MultiRssServlet.java

private void mergeRssAnd2JSON(HttpServletRequest request, HttpServletResponse response, String uid,
        String widgetId, int pageSize, NodeList urlList) throws Exception {

    try {/*from   www .j  a v a2s .  c  o m*/
        RssJsonResultBuilder resultBuilder = new SortedRssJsonResultBuilder(pageSize);

        String dateTimeFormat = request.getHeader("X-IS-DATETIMEFORMAT");
        if (dateTimeFormat != null) {
            dateTimeFormat = URLDecoder.decode(dateTimeFormat, "UTF-8");
        }
        String freshTime = request.getHeader("X-IS-FRESHTIME");
        String maxCountString = request.getHeader("X-IS-RSSMAXCOUNT");
        int maxCount = 1000;
        if (maxCountString != null) {
            try {
                int paramMaxCount = Integer.parseInt(maxCountString);
                if (paramMaxCount >= 0) {
                    maxCount = paramMaxCount;
                }
            } catch (NumberFormatException e) {
                log.warn("rssmaxcount \"" + maxCountString + "\" isn't integer value.");
            }
        }

        // Norrowing
        String titleFilter = request.getHeader("X-IS-TITLEFILTER");
        if (titleFilter != null)
            titleFilter = URLDecoder.decode(titleFilter, "UTF-8");
        String creatorFilter = request.getHeader("X-IS-CREATORFILTER");
        if (creatorFilter != null)
            creatorFilter = URLDecoder.decode(creatorFilter, "UTF-8");
        String categoryFilter = request.getHeader("X-IS-CATEGORYFILTER");
        if (categoryFilter != null)
            categoryFilter = URLDecoder.decode(categoryFilter, "UTF-8");

        int DEFAULT_TIMEOUT = 15 * 1000;

        boolean modified = false;
        Map cacheHeaders = new HashMap();
        Map errorMap = new HashMap();
        List siteCacheHeaders = new ArrayList();
        for (int i = 0; i < urlList.getLength(); i++) {
            Element rssEl = (Element) urlList.item(i);
            String url = rssEl.getAttribute("url");

            ProxyRequest proxyRequest = new ProxyRequest(url, "NoOperation");
            proxyRequest.setLocales(request.getLocales());
            proxyRequest.setPortalUid(uid);

            int timeout = request.getIntHeader("MSDPortal-Timeout") - 1000;
            proxyRequest.setTimeout((timeout > 0) ? timeout : DEFAULT_TIMEOUT);
            //proxyRequest.setTimeout(timeout);

            proxyRequest.addIgnoreHeader("user-agent");
            proxyRequest.addIgnoreHeader("X-IS-DATETIMEFORMAT");
            proxyRequest.addIgnoreHeader("X-IS-FRESHTIME");
            proxyRequest.addIgnoreHeader("X-IS-REFRESH");
            proxyRequest.addIgnoreHeader("X-IS-RSSMAXCOUNT");
            proxyRequest.addIgnoreHeader("X-IS-PAGESIZE");

            Enumeration headers = request.getHeaderNames();
            while (headers.hasMoreElements()) {
                String headerName = (String) headers.nextElement();
                proxyRequest.putRequestHeader(headerName, request.getHeader(headerName));
            }

            NodeList rssChildNodes = rssEl.getElementsByTagName("header");
            for (int j = 0; j < rssChildNodes.getLength(); j++) {
                Element header = (Element) rssChildNodes.item(j);
                if (header.getFirstChild() != null) {
                    String name = header.getAttribute("name");
                    String value = header.getFirstChild().getNodeValue();
                    if (name == null || name.trim().length() == 0 || value == null
                            || value.trim().length() == 0)
                        continue;

                    proxyRequest.putRequestHeader(name, value);
                }
            }

            int statusCode = 0;
            String methodType = rssEl.getAttribute("method");
            try {
                if ("post".equals(methodType)) {
                    statusCode = proxyRequest.executePost();
                } else {
                    statusCode = proxyRequest.executeGet();
                }
            } catch (SocketTimeoutException ex) {
                log.error("url: [" + url + "] socket timeout.", ex);
                errorMap.put(url, new Integer(HttpStatusCode.MSD_SC_TIMEOUT));
            } catch (ConnectTimeoutException ex) {
                log.error("url: [" + url + "] connection timeout.", ex);
                errorMap.put(url, new Integer(500));
            } catch (SocketException ex) {
                log.error("url: [" + url + "] socket error.", ex);
                errorMap.put(url, new Integer(HttpStatus.SC_NOT_FOUND));
            } catch (IOException ex) {
                log.error("url: [" + url + "] I/O error.", ex);
                errorMap.put(url, new Integer(HttpStatus.SC_NOT_FOUND));
            } catch (Exception ex) {
                log.error("url: [" + url + "]" + ex.getMessage(), ex);
                errorMap.put(url, new Integer(500));
            }

            BufferedInputStream bis = null;
            if (errorMap.containsKey(url)) {
                // nothing

            } else if (statusCode == 204) {
                log.warn("url:[" + url + "] is no content #" + statusCode);
                modified = true;
            } else if (statusCode == 304) {
                log.warn("url:[" + url + "] is not modified #" + statusCode);
            } else if (statusCode != 200) {
                log.error("url:[" + url + "] had error status code #" + statusCode);
                errorMap.put(url, new Integer(statusCode));
            } else {
                log.info("url:[" + url + "] is succed #" + statusCode);

                try {
                    modified = true;

                    bis = new BufferedInputStream(proxyRequest.getResponseBody());

                    ByteArrayOutputStream baos = new ByteArrayOutputStream();
                    byte[] buf = new byte[10240];
                    int c;
                    while ((c = bis.read(buf)) != -1) {
                        baos.write(buf, 0, c);
                        baos.flush();
                    }
                    bis.close();

                    byte[] data = baos.toByteArray();
                    baos.close();

                    //RssCacheDAO.newInstance().insertCache(uid, widgetId+url, -1,data );

                    Map responseHeaders = proxyRequest.getResponseHeaders();
                    String lastModifiedName = "Last-Modified".toLowerCase();
                    if (responseHeaders.containsKey(lastModifiedName)) {
                        siteCacheHeaders.add(lastModifiedName);
                        siteCacheHeaders.add(responseHeaders.get(lastModifiedName));
                    }

                    String etagName = "ETag".toLowerCase();
                    if (responseHeaders.containsKey(etagName)) {
                        siteCacheHeaders.add(etagName);
                        siteCacheHeaders.add(responseHeaders.get(etagName));
                    }

                    if (siteCacheHeaders.size() > 0) {
                        cacheHeaders.put(url, siteCacheHeaders.toArray());
                        siteCacheHeaders.clear();
                    }

                    bis = new BufferedInputStream(new ByteArrayInputStream(data));
                } catch (IOException ex) {
                    log.error("rss reading " + url + " is failed.", ex);
                    cacheHeaders.remove(url);
                    errorMap.put(url, new Integer(500));

                    bis.close();
                    bis = null;
                }
            }

            if (bis == null)
                continue;

            RssHandler handler;

            boolean isAtom = RssFilter.isAtom(bis);

            XMLFilter.skipEmptyLine(bis);
            if (isAtom) {
                handler = new AtomHandler(resultBuilder, dateTimeFormat, freshTime, maxCount, titleFilter,
                        creatorFilter, categoryFilter, i);
            } else {
                handler = new RssHandler(resultBuilder, dateTimeFormat, freshTime, maxCount, titleFilter,
                        creatorFilter, categoryFilter, i);
            }

            try {
                XMLReader reader = factory.newSAXParser().getXMLReader();
                reader.setEntityResolver(NoOpEntityResolver.getInstance());
                reader.setContentHandler(handler);
                reader.parse(new InputSource(bis));
            } catch (SAXException e) {
                log.info("Parsing rss " + url + " is failed.", e);
                cacheHeaders.remove(url);
                errorMap.put(url, new Integer(HttpStatusCode.MSD_SC_CONTENT_PARSE_ERROR));
            }
        }

        if (!modified && errorMap.isEmpty()) {
            log.warn("multi rss is not modified.");
            response.setStatus(304);

            return;
        } else {
            try {
                long freshTimeLong = new Date().getTime();
                if (freshTime != null)
                    freshTimeLong = Long.parseLong(freshTime.trim());
                setOldData(resultBuilder, uid, widgetId, freshTimeLong, titleFilter, creatorFilter,
                        categoryFilter);

            } catch (NumberFormatException e) {
                log.error("", e);
            }

            //}

            int pageCount = resultBuilder.getPageCount();
            // We create the result cash by all means.
            //if( pageCount > 1 ) {
            for (int pageNum = 0; pageNum < pageCount; pageNum++) {
                RssCacheDAO.newInstance().insertCache(uid, widgetId, pageNum, resultBuilder.getResult(pageNum));
            }
            //}
        }

        response.addHeader("Content-Type", "text/plain; charset=UTF-8");

        String result = resultBuilder.getResult();

        if (!errorMap.isEmpty()) {
            JSONObject errors = new JSONObject(errorMap);
            result = "{errors:" + errors.toString() + "," + result.substring(result.indexOf("{") + 1);
        }
        if (!cacheHeaders.isEmpty()) {
            StringBuffer cacheHeadersBuf = new StringBuffer();
            cacheHeadersBuf.append("cacheHeaders : {");
            for (Iterator keys = cacheHeaders.keySet().iterator(); keys.hasNext();) {
                String url = (String) keys.next();
                Object[] headers = (Object[]) cacheHeaders.get(url);

                cacheHeadersBuf.append("\"").append(url).append("\" : {");
                for (int i = 0; i < headers.length; i += 2) {
                    cacheHeadersBuf.append("\"").append(headers[i]).append("\"");
                    cacheHeadersBuf.append(" : '").append(headers[i + 1]).append("'");
                    if (i + 2 < headers.length)
                        cacheHeadersBuf.append(",");
                }
                cacheHeadersBuf.append("}");
                if (keys.hasNext())
                    cacheHeadersBuf.append(",");
            }
            cacheHeadersBuf.append("}");

            result = "{" + cacheHeadersBuf.toString() + "," + result.substring(result.indexOf("{") + 1);
        }

        response.setContentLength(result.getBytes("UTF-8").length);

        OutputStreamWriter out = new OutputStreamWriter(response.getOutputStream(), "UTF-8");
        try {
            out.write(result);

            out.flush();
        } catch (SocketException ex) {
            // ignore client abort exception
        } finally {
            if (out != null) {
                try {
                    out.close();
                } catch (IOException ex) {
                    // ignore
                }
            }
        }
    } catch (Exception e) {
        log.error("unexpected error occurred.", e);
        response.sendError(500, e.getMessage());
    }

}

From source file:org.infoscoop.web.ValidationServlet.java

private static boolean checkXml(String text) {

    try {/*from   w ww.j  a va 2 s.c  o  m*/
        XMLReader reader = factory.newSAXParser().getXMLReader();
        reader.setEntityResolver(NoOpEntityResolver.getInstance());
        reader.parse(text);
        return true;
    } catch (SAXException e) {
        return false;
    } catch (IOException e) {
        return false;
    } catch (ParserConfigurationException e) {
        return false;
    }
}