Search in sources :

Example 1 with SAXDecoder

use of com.siemens.ct.exi.api.sax.SAXDecoder in project exist by eXist-db.

the class DecodeExiFunction method eval.

@Override
public Sequence eval(Sequence[] args, Sequence contextSequence) throws XPathException {
    if (args[0].isEmpty()) {
        return Sequence.EMPTY_SEQUENCE;
    }
    try {
        BinaryValue exiBinary = ((BinaryValue) args[0].itemAt(0));
        context.pushDocumentContext();
        try {
            MemTreeBuilder builder = context.getDocumentBuilder();
            // create default factory and EXI grammar for schema
            EXIFactory exiFactory = DefaultEXIFactory.newInstance();
            if (args.length > 1) {
                if (!args[1].isEmpty()) {
                    Item xsdItem = args[1].itemAt(0);
                    try (InputStream xsdInputStream = EXIUtils.getInputStream(xsdItem, context)) {
                        GrammarFactory grammarFactory = GrammarFactory.newInstance();
                        Grammars grammar = grammarFactory.createGrammars(xsdInputStream);
                        exiFactory.setGrammars(grammar);
                    }
                }
            }
            SAXDecoder decoder = new SAXDecoder(exiFactory);
            SAXAdapter adapter = new AppendingSAXAdapter(builder);
            decoder.setContentHandler(adapter);
            try (InputStream inputStream = exiBinary.getInputStream()) {
                decoder.parse(new InputSource(inputStream));
            }
            return (NodeValue) builder.getDocument().getDocumentElement();
        } finally {
            context.popDocumentContext();
        }
    } catch (EXIException | SAXException | IOException exie) {
        throw new XPathException(this, new JavaErrorCode(exie.getCause()), exie.getMessage());
    }
}
Also used : NodeValue(org.exist.xquery.value.NodeValue) InputSource(org.xml.sax.InputSource) SAXDecoder(com.siemens.ct.exi.api.sax.SAXDecoder) XPathException(org.exist.xquery.XPathException) InputStream(java.io.InputStream) BinaryValue(org.exist.xquery.value.BinaryValue) GrammarFactory(com.siemens.ct.exi.GrammarFactory) EXIException(com.siemens.ct.exi.exceptions.EXIException) IOException(java.io.IOException) SAXException(org.xml.sax.SAXException) JavaErrorCode(org.exist.xquery.ErrorCodes.JavaErrorCode) Item(org.exist.xquery.value.Item) MemTreeBuilder(org.exist.dom.memtree.MemTreeBuilder) AppendingSAXAdapter(org.exist.dom.memtree.AppendingSAXAdapter) SAXAdapter(org.exist.dom.memtree.SAXAdapter) AppendingSAXAdapter(org.exist.dom.memtree.AppendingSAXAdapter) Grammars(com.siemens.ct.exi.grammars.Grammars) DefaultEXIFactory(com.siemens.ct.exi.helpers.DefaultEXIFactory) EXIFactory(com.siemens.ct.exi.EXIFactory)

Aggregations

EXIFactory (com.siemens.ct.exi.EXIFactory)1 GrammarFactory (com.siemens.ct.exi.GrammarFactory)1 SAXDecoder (com.siemens.ct.exi.api.sax.SAXDecoder)1 EXIException (com.siemens.ct.exi.exceptions.EXIException)1 Grammars (com.siemens.ct.exi.grammars.Grammars)1 DefaultEXIFactory (com.siemens.ct.exi.helpers.DefaultEXIFactory)1 IOException (java.io.IOException)1 InputStream (java.io.InputStream)1 AppendingSAXAdapter (org.exist.dom.memtree.AppendingSAXAdapter)1 MemTreeBuilder (org.exist.dom.memtree.MemTreeBuilder)1 SAXAdapter (org.exist.dom.memtree.SAXAdapter)1 JavaErrorCode (org.exist.xquery.ErrorCodes.JavaErrorCode)1 XPathException (org.exist.xquery.XPathException)1 BinaryValue (org.exist.xquery.value.BinaryValue)1 Item (org.exist.xquery.value.Item)1 NodeValue (org.exist.xquery.value.NodeValue)1 InputSource (org.xml.sax.InputSource)1 SAXException (org.xml.sax.SAXException)1