XQuery выполняет функцию Java с Saxon 9-HE - PullRequest
0 голосов
/ 04 сентября 2018

Я попытался последовать ответу отсюда Интегрированные функции расширения Saxon-HE | как и где? для выполнения некоторых методов Java и возврата String, что аналогично примеру.

Разница в том, что я использую XQuery вместо XSLT.

Проблема в том, что я получаю сообщение об ошибке, в котором не указано пространство имен при запуске XQuery.

Вопрос: можно ли использовать XSLT-трюк для XQuery?

Код на данный момент: В конкретном методе:

TransformerFactory factory = TransformerFactory.newInstance();
TransformerFactoryImpl tFactoryImpl = (TransformerFactoryImpl) factory;
config = tFactoryImpl.getConfiguration();

Метод, используемый для установки процессора:

public void addFunctionLibrary(JavaSaxonLib tsj) {
    Processor processor = (Processor) config.getProcessor();
    ExtensionFunction javaCall = tsj;
    processor.registerExtensionFunction(javaCall);
}

Класс для проверки ExtensionFunction:

public class JavaSaxonLib implements ExtensionFunction {

    String namespace = "";
    String nsURL = "";

    public JavaSaxonLib(String namespace, String nsURL) {
        this.namespace = namespace;
        this.nsURL = nsURL;
    }

    @Override
    public QName getName() {
        return new QName(nsURL, namespace);
    }

    @Override
    public SequenceType getResultType() {
        return SequenceType.makeSequenceType(ItemType.STRING, OccurrenceIndicator.ONE);
    }

    @Override
    public SequenceType[] getArgumentTypes() {
        return new SequenceType[] {};
    }

    @Override
    public XdmValue call(XdmValue[] arguments) throws SaxonApiException {
        String result = "Saxon is being extended correctly.";
        return new XdmAtomicValue(result);
    }
}

В основном методе:

JavaSaxonLib jsl = new JavaSaxonLib(namespace, nsURL);
saxMan.addFunctionLibrary(jsl);

Спасибо! : -)

1 Ответ

0 голосов
/ 04 сентября 2018

Наконец-то! Мне удалось заставить его работать.

Сложная задача - изменить xquery, чтобы обмануть Saxon 9-HE, чтобы выполнить метод java с ExtensionFunction и Classloader.

Жаль, что мы не можем отправить личное сообщение, как будто кто-то заинтересован в полном ответе, я не могу поделиться им должным образом.

...