Example usage for org.xml.sax XMLReader setContentHandler

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

Introduction

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

Prototype

public void setContentHandler(ContentHandler handler);

Source Link

Document

Allow an application to register a content event handler.

Usage

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);
}