List of usage examples for org.xml.sax XMLReader setContentHandler
public void setContentHandler(ContentHandler handler);
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 . c o m 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);/*from w w w . ja va 2s.c om*/ 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 ww. j a v a 2 s. co m*/ 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 w w w . j ava 2 s. 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.intalio.tempo.workflow.wds.core.xforms.XFormsProcessor.java
/** * Process an XForms document./*from w ww . j a v a 2 s. c o m*/ * <ul> * <li>If the model schema is specified as a relative URI, it is changed to comply to the form URI, * e.g. if a form is stored at (oxf:/)my/uri/form1.xform and it specified "form1.xsd" * as its model schema, then the value of the "schema" attribute of the "xforms:model" * element will be rewritten as: "oxf:/my/uri/form1.xsd"</li> * <li>The XForms document is reformatted in a "pretty-print" way.</li> * </ul> */ @SuppressWarnings("deprecation") public static Item processXForm(final String itemUri, InputStream inputStream) throws IOException, ParserConfigurationException, SAXException { if (LOG.isDebugEnabled()) LOG.debug("Processing " + itemUri); StringWriter out = new StringWriter(); SAXParser parser = SAXParserFactory.newInstance().newSAXParser(); OutputFormat format = new OutputFormat(); format.setEncoding(CharEncoding.UTF_8); format.setOmitXMLDeclaration(false); format.setOmitComments(false); format.setPreserveSpace(true); SchemaURLRewriter ser = new SchemaURLRewriter(out, format, itemUri); XMLReader reader = parser.getXMLReader(); reader.setContentHandler(ser); reader.parse(new InputSource(inputStream)); return new Item(itemUri, XFORMS_CONTENT_TYPE, out.toString().getBytes(CharEncoding.UTF_8)); }
From source file:org.intermine.modelviewer.jaxb.ConfigParser.java
/** * Unmarshalls an XML document using the very forgiving event driven parser provided * by SAX. No issues with namespaces and so forth here. * //from w w w.jav a 2 s . c o m * @param context The type of objects expected from the XML file. * @param file The file to load. * * @return The Object created as a result of reading the file. * Its type will depend on <code>context</code>. * * @throws SAXException if there is a problem parsing with SAX. * @throws ParserConfigurationException if there is a configuration problem with * the SAX system. * @throws IOException if there is a low level I/O problem. * * @see CoreHandler * @see GenomicHandler * @see ProjectHandler * @see GenomicCoreHandler */ private Object saxParse(Context context, File file) throws SAXException, ParserConfigurationException, IOException { //Schema schema = schemas.get(context); //schema.newValidator().validate(new StreamSource(file)); BackupContentHandler handler; switch (context) { case CORE: handler = new CoreHandler(); break; case GENOMIC: handler = new GenomicHandler(); break; case PROJECT: handler = new ProjectHandler(); break; default: throw new UnsupportedOperationException("Cannot load things of type " + context); } XMLReader reader = XMLReaderFactory.createXMLReader(); reader.setContentHandler(handler); reader.parse(new InputSource(new FileReader(file))); return handler.getResult(); }
From source file:org.itracker.web.util.ImportExportUtilities.java
/** * Takes an XML file matching the ITracker import/export DTD and returns an array * of AbstractBean objects. The array will contain all of the projects, components * versions, users, custom fields, and issues contained in the XML. * * @param xmlReader an xml reader to import * @throws ImportExportException thrown if the xml can not be parsed into the appropriate objects *///w w w. j a va 2s. co m public static AbstractEntity[] importIssues(Reader xmlReader) throws ImportExportException { AbstractEntity[] abstractBeans; try { logger.debug("Starting XML data import."); XMLReader reader = XMLReaderFactory.createXMLReader(); ImportHandler handler = new ImportHandler(); reader.setContentHandler(handler); reader.setErrorHandler(handler); reader.parse(new InputSource(xmlReader)); abstractBeans = handler.getModels(); logger.debug("Imported a total of " + abstractBeans.length + " beans."); } catch (Exception e) { logger.error("Exception.", e); throw new ImportExportException(e.getMessage()); } return abstractBeans; }
From source file:org.jasig.cas.client.util.XmlUtils.java
/** * Retrieve the text for a group of elements. Each text element is an entry * in a list.//from ww w . j ava 2 s .co m * <p>This method is currently optimized for the use case of two elements in a list. * * @param xmlAsString the xml response * @param element the element to look for * @return the list of text from the elements. */ public static List getTextForElements(final String xmlAsString, final String element) { final List elements = new ArrayList(2); final XMLReader reader = getXmlReader(); final DefaultHandler handler = new DefaultHandler() { private boolean foundElement = false; private StringBuffer buffer = new StringBuffer(); public void startElement(final String uri, final String localName, final String qName, final Attributes attributes) throws SAXException { if (localName.equals(element)) { this.foundElement = true; } } public void endElement(final String uri, final String localName, final String qName) throws SAXException { if (localName.equals(element)) { this.foundElement = false; elements.add(this.buffer.toString()); this.buffer = new StringBuffer(); } } public void characters(char[] ch, int start, int length) throws SAXException { if (this.foundElement) { this.buffer.append(ch, start, length); } } }; reader.setContentHandler(handler); reader.setErrorHandler(handler); try { reader.parse(new InputSource(new StringReader(xmlAsString))); } catch (final Exception e) { LOG.error(e, e); return null; } return elements; }
From source file:org.jasig.cas.client.util.XmlUtils.java
/** * Retrieve the text for a specific element (when we know there is only * one)./*from w ww .j av a 2s . c o m*/ * * @param xmlAsString the xml response * @param element the element to look for * @return the text value of the element. */ public static String getTextForElement(final String xmlAsString, final String element) { final XMLReader reader = getXmlReader(); final StringBuffer buffer = new StringBuffer(); final DefaultHandler handler = new DefaultHandler() { private boolean foundElement = false; public void startElement(final String uri, final String localName, final String qName, final Attributes attributes) throws SAXException { if (localName.equals(element)) { this.foundElement = true; } } public void endElement(final String uri, final String localName, final String qName) throws SAXException { if (localName.equals(element)) { this.foundElement = false; } } public void characters(char[] ch, int start, int length) throws SAXException { if (this.foundElement) { buffer.append(ch, start, length); } } }; reader.setContentHandler(handler); reader.setErrorHandler(handler); try { reader.parse(new InputSource(new StringReader(xmlAsString))); } catch (final Exception e) { LOG.error(e, e); return null; } return buffer.toString(); }
From source file:org.jbuiltDemo.managed.view.Xhtml2Jbuilt.java
public Xhtml2Jbuilt() throws Exception { factory = SAXParserFactory.newInstance(); factory.setNamespaceAware(true);/*from w ww . ja va2 s .com*/ factory.setFeature("http://xml.org/sax/features/namespace-prefixes", true); factory.setFeature("http://xml.org/sax/features/validation", false); factory.setValidating(false); parser = factory.newSAXParser(); XMLReader reader = parser.getXMLReader(); reader.setDTDHandler(this); reader.setContentHandler(this); reader.setProperty("http://xml.org/sax/properties/lexical-handler", this); reader.setErrorHandler(this); reader.setEntityResolver(this); }