Example usage for org.jdom2.input SAXBuilder setFeature

List of usage examples for org.jdom2.input SAXBuilder setFeature

Introduction

In this page you can find the example usage for org.jdom2.input SAXBuilder setFeature.

Prototype

public void setFeature(final String name, final boolean value) 

Source Link

Document

This sets a feature on the SAX parser.

Usage

From source file:de.intranda.goobi.plugins.sru.SRUHelper.java

License:Open Source License

public static Node parseGbvResult(GbvMarcSruImport opac, String catalogue, String schema, String searchField,
        String resultString, String packing, String version)
        throws IOException, JDOMException, ParserConfigurationException {
    // removed validation against external dtd
    SAXBuilder builder = new SAXBuilder(XMLReaders.NONVALIDATING);

    builder.setFeature("http://xml.org/sax/features/validation", false);
    builder.setFeature("http://apache.org/xml/features/nonvalidating/load-dtd-grammar", false);
    builder.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
    Document doc = builder.build(new StringReader(resultString), "utf-8");
    // srw:searchRetrieveResponse
    Element record = getRecordWithoutSruHeader(doc);
    if (record == null) {
        opac.setHitcount(0);//from  ww w .j  av  a 2s  .c  o m
        return null;
    } else {
        opac.setHitcount(1);
        // generate an answer document
        DocumentBuilderFactory dbfac = DocumentBuilderFactory.newInstance();
        DocumentBuilder docBuilder = dbfac.newDocumentBuilder();
        org.w3c.dom.Document answer = docBuilder.newDocument();
        org.w3c.dom.Element collection = answer.createElement("collection");
        answer.appendChild(collection);

        boolean isMultiVolume = false;
        boolean isPeriodical = false;
        boolean isManuscript = false;
        boolean isCartographic = false;

        String anchorIdentifier = "";
        List<Element> data = record.getChildren();

        for (Element el : data) {
            if (el.getName().equalsIgnoreCase("leader")) {
                String value = el.getText();
                if (value.length() < 24) {
                    value = "00000" + value;
                }
                char c6 = value.toCharArray()[6];
                char c7 = value.toCharArray()[7];
                char c19 = value.toCharArray()[19];
                if (c6 == 'a' && (c7 == 's' || c7 == 'd')) {
                    isPeriodical = true;
                } else if (c6 == 't') {
                    isManuscript = true;
                } else if (c6 == 'e') {
                    isCartographic = true;
                }
                if (c19 == 'b' || c19 == 'c') {
                    isMultiVolume = true;
                }
            }

            if (el.getName().equalsIgnoreCase("datafield")) {
                String tag = el.getAttributeValue("tag");
                List<Element> subfields = el.getChildren();
                for (Element sub : subfields) {
                    String code = sub.getAttributeValue("code");
                    // anchor identifier
                    if (tag.equals("773") && code.equals("w")) {
                        if (!isMultiVolume && !isPeriodical) {
                            sub.setText("");
                        } else {
                            anchorIdentifier = sub.getText().replaceAll("\\(.+\\)", "").replace("KXP", "");
                        }
                    } else if (tag.equals("800") && code.equals("w") && isMultiVolume) {
                        anchorIdentifier = sub.getText().replaceAll("\\(.+\\)", "").replace("KXP", "");
                    } else if (isManuscript && tag.equals("810") && code.equals("w")) {
                        isMultiVolume = true;
                        anchorIdentifier = sub.getText().replaceAll("\\(.+\\)", "").replace("KXP", "");
                    } else if (tag.equals("830") && code.equals("w")) {
                        if (isCartographic || (isMultiVolume && anchorIdentifier == null)) {
                            anchorIdentifier = sub.getText().replaceAll("\\(.+\\)", "").replace("KXP", "");
                        }
                    }
                }
            }
        }

        org.w3c.dom.Element marcRecord = getRecord(answer, data, opac);

        if (isMultiVolume) {
            String anchorResult = SRUHelper.search(catalogue, schema, searchField, anchorIdentifier, packing,
                    version);
            Document anchorDoc = new SAXBuilder().build(new StringReader(anchorResult), "utf-8");

            Element anchorRecord = getRecordWithoutSruHeader(anchorDoc);
            if (anchorRecord != null) {
                List<Element> anchorData = anchorRecord.getChildren();
                org.w3c.dom.Element anchorMarcRecord = getRecord(answer, anchorData, opac);

                collection.appendChild(anchorMarcRecord);
            }

        }
        collection.appendChild(marcRecord);
        return answer.getDocumentElement();
    }

}

From source file:edu.ucsd.crbs.cws.workflow.WorkflowFromAnnotatedVersionTwoFourMomlXmlFactory.java

License:Open Source License

/**
 * Returns the root element of parsed XML document
 *
 * @param in XML document to parse//from   w  w w . ja  v  a2  s . co m
 * @return Root element of document
 * @throws Exception If there is a problem parsing the document
 */
private Document getDocument(InputStream in) throws Exception {
    SAXBuilder builder = new SAXBuilder();
    builder.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
    return builder.build(in);
}

From source file:io.smartspaces.workbench.project.jdom.JdomReader.java

License:Apache License

/**
 * Get the root element for a given input file.
 *
 * @param inputFile// www.  j a v a  2s .  c  om
 *          input project file
 *
 * @return top-level element
 */
Element getRootElement(File inputFile) {
    Document doc;
    try {
        SAXBuilder builder = new SAXBuilder();
        builder.setJDOMFactory(new LocatedJDOMFactory());
        builder.setFeature(XML_PARSER_FEATURE_XINCLUDE, true);
        builder.setEntityResolver(new MyEntityResolver());
        doc = builder.build(inputFile);
    } catch (Exception e) {
        throw new SmartSpacesException(
                String.format("Exception while processing %s", inputFile.getAbsolutePath()), e);
    }

    return doc.getRootElement();
}

From source file:jetbrains.buildServer.tools.XmlUtil.java

License:Apache License

@NotNull
private static SAXBuilder getBuilder(final boolean validate) {
    SAXBuilder builder = new SAXBuilder(validate);
    builder.setFeature("http://xml.org/sax/features/namespaces", true);
    builder.setFeature("http://xml.org/sax/features/namespace-prefixes", true);
    builder.setEntityResolver(new DefaultHandler() {
        @Override//from ww  w.  j  a  va  2s .  c o m
        public InputSource resolveEntity(String publicId, String systemId) throws IOException, SAXException {
            String dtdFileName = new File(systemId).getName();
            InputStream dtdStream = getClass().getClassLoader().getResourceAsStream(dtdFileName);
            if (dtdStream != null) {
                return new InputSource(dtdStream);
            }

            return super.resolveEntity(publicId, systemId);
        }
    });

    return builder;
}

From source file:jodtemplate.util.JDOMHelper.java

License:Apache License

private SAXBuilder getJDomBuilder() {
    final SAXBuilder jdomBuilder = new SAXBuilder();
    jdomBuilder.setJDOMFactory(new SlimJDOMFactory());
    jdomBuilder.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
    return jdomBuilder;
}

From source file:org.artifactory.util.XmlUtils.java

License:Open Source License

public static SAXBuilder createSaxBuilder() {
    SAXBuilder sb = new SAXBuilder();
    // don't validate and don't load dtd
    sb.setXMLReaderFactory(XMLReaders.NONVALIDATING);
    sb.setFeature("http://xml.org/sax/features/validation", false);
    sb.setFeature("http://apache.org/xml/features/nonvalidating/load-dtd-grammar", false);
    sb.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
    // JNLP needs DOCTYPE
    //sb.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
    sb.setFeature("http://xml.org/sax/features/external-general-entities", false);
    sb.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
    return sb;/*ww  w .j a va 2 s.c o  m*/
}

From source file:org.buddycloud.channelserver.XMPPAcceptanceTestHelper.java

License:Apache License

private Object getEl(Packet p, String xPath, boolean namespaceFeature) throws Exception {

    InputStream xmlStream = IOUtils.toInputStream(p.toXML());
    SAXBuilder saxBuilder = new SAXBuilder();
    saxBuilder.setFeature("http://xml.org/sax/features/namespaces", namespaceFeature);
    saxBuilder.setFeature("http://xml.org/sax/features/validation", false);
    saxBuilder.setFeature("http://xml.org/sax/features/namespace-prefixes", false);
    Document replyDoc = (Document) saxBuilder.build(xmlStream);
    return XPathFactory.instance().compile(xPath).evaluateFirst(replyDoc);
}

From source file:org.jahia.utils.osgi.parsers.AbstractXmlFileParser.java

License:Open Source License

public boolean parse(String fileName, InputStream inputStream, String fileParent, boolean externalDependency,
        boolean optionalDependency, String version, ParsingContext parsingContext) {
    boolean processed = true;
    SAXBuilder saxBuilder = new SAXBuilder();
    saxBuilder.setValidation(false);//from   www  .  j a  va 2s .  c o m
    saxBuilder.setFeature("http://xml.org/sax/features/validation", false);
    saxBuilder.setFeature("http://apache.org/xml/features/nonvalidating/load-dtd-grammar", false);
    saxBuilder.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
    InputStream inputStreamCopy = null;
    try {
        ByteArrayOutputStream entryOutputStream = new ByteArrayOutputStream();
        IOUtils.copy(inputStream, entryOutputStream);
        inputStreamCopy = new ByteArrayInputStream(entryOutputStream.toByteArray());
        InputStreamReader fileReader = new InputStreamReader(inputStreamCopy);
        org.jdom2.Document jdomDocument = saxBuilder.build(fileReader);
        Element rootElement = jdomDocument.getRootElement();
        // getLog().debug("Parsed XML file" + fileName + " successfully.");

        if (canParse(fileName, rootElement)) {
            parse(fileName, rootElement, fileParent, externalDependency, optionalDependency, version,
                    parsingContext);
        } else {
            processed = false;
        }
    } catch (JDOMException e) {
        getLogger().warn("Error parsing XML file " + fileName + ": " + e.getMessage()
                + " enable debug mode (-X) for more detailed exception");
        getLogger().debug("Detailed exception", e);
    } catch (IOException e) {
        getLogger().warn("Error parsing XML file " + fileName + ": " + e.getMessage()
                + " enable debug mode (-X) for more detailed exception");
        getLogger().debug("Detailed exception", e);
    } finally {
        IOUtils.closeQuietly(inputStreamCopy);
    }
    return processed;
}

From source file:org.jumpmind.metl.core.runtime.component.XmlFormatter.java

License:Open Source License

private Document getTemplateDoc() {

    Document templateDoc = null;/*from www.j a  v a2s.  com*/

    SAXBuilder builder = new SAXBuilder();
    builder.setXMLReaderFactory(XMLReaders.NONVALIDATING);
    builder.setFeature("http://xml.org/sax/features/validation", false);
    try {
        templateDoc = builder.build(new StringReader(resolveFlowParams(template)));
    } catch (RuntimeException e) {
        throw e;
    } catch (Exception e) {
        throw new RuntimeException(e);
    }

    return templateDoc;
}

From source file:org.jumpmind.metl.core.runtime.component.XmlParser.java

License:Open Source License

@SuppressWarnings("unchecked")
protected void handleUsingXPath(Message inputMessage, ISendMessageCallback callback,
        boolean unitOfWorkBoundaryReached) {
    ArrayList<String> inputRows = ((TextMessage) inputMessage).getPayload();
    ArrayList<EntityData> payload = new ArrayList<EntityData>();
    if (inputRows != null) {
        for (String xml : inputRows) {
            SAXBuilder builder = new SAXBuilder();
            builder.setXMLReaderFactory(XMLReaders.NONVALIDATING);
            builder.setFeature("http://xml.org/sax/features/validation", false);
            try {
                Document document = builder.build(new StringReader(xml));
                removeNamespaces(document);
                for (XmlFormatterEntitySetting entitySetting : entitySettings) {
                    List<XmlFormatterAttributeSetting> attributeSettings = entitySetting.getAttributeSettings();
                    List<Element> entityMatches = (List<Element>) entitySetting.getExpression()
                            .evaluate(document.getRootElement());
                    for (Element element : entityMatches) {
                        String text = toXML(element);
                        Document childDocument = builder
                                .build(new ByteArrayInputStream(text.getBytes(Charset.forName("utf-8"))));
                        getComponentStatistics().incrementNumberEntitiesProcessed(threadNumber);
                        EntityData data = new EntityData();
                        for (XmlFormatterAttributeSetting attributeSetting : attributeSettings) {
                            boolean resultsFound = false;
                            Element targetElement = element;
                            Document targetDocument = childDocument;
                            do {
                                List<Object> attributeMatches = (List<Object>) attributeSetting.getExpression()
                                        .evaluate(targetDocument);
                                for (Object object : attributeMatches) {
                                    resultsFound = true;
                                    if (object instanceof Attribute) {
                                        data.put(attributeSetting.getSetting().getAttributeId(),
                                                ((Attribute) object).getValue());
                                    } else if (object instanceof Content) {
                                        data.put(attributeSetting.getSetting().getAttributeId(),
                                                ((Content) object).getValue());
                                    } else if (object instanceof Element) {
                                        data.put(attributeSetting.getSetting().getAttributeId(),
                                                ((Element) object).getTextTrim());
                                    }//from   www.j a  v a 2s  .  c  o  m
                                }

                                if (!resultsFound
                                        && !attributeSetting.getExpression().getExpression()
                                                .startsWith("/" + element.getName())
                                        && targetElement.getParentElement() != null) {
                                    targetElement = targetElement.getParentElement();
                                    targetDocument = builder.build(new ByteArrayInputStream(
                                            toXML(targetElement).getBytes(Charset.forName("utf-8"))));
                                } else if (!resultsFound) {
                                    info("Did not find a match for: %s\n in:\n %s",
                                            attributeSetting.getExpression().getExpression(), text);
                                    targetDocument = null;
                                    targetElement = null;
                                }
                            } while (!resultsFound && targetElement != null);
                        }
                        if (data.size() > 0) {
                            payload.add(data);
                        } else {
                            log(LogLevel.WARN,
                                    "Found entity element: <%s/> with no matching attributes.  Please make sure your xpath expressions match",
                                    element.getName());
                        }
                    }
                }

                if (payload.size() > rowsPerMessage) {
                    callback.sendEntityDataMessage(null, payload);
                    payload = new ArrayList<>();
                }
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        }
    }

    if (payload.size() > 0) {
        callback.sendEntityDataMessage(null, payload);
    }

}