Импорт пользовательского метода Java в Xquery

Я использую инфраструктуру Weblogic Integration. При преобразовании одного формата XML в другой с использованием файла.xq я хочу применить некоторую логику, написанную в пользовательском классе Java.

Например, XML1 имеет тег: <UnitCode>XYZ</UnitCode>

Пользовательский класс Java:

public class unitcodemapper{
public static String getMappedUnitCode(String unitCode){
    if(unitCode=="XYZ")
       return <<value from DB table>>
    else
       return unitCode;
}
}

XML2 будет иметь тег: <UnitCode>unitcodemapper.getMappedUnitCode(XML1/UnitCode)</UnitCode>

Я не могу найти документацию или пример, чтобы сделать это. Может кто-нибудь, пожалуйста, помогите понять, как это можно сделать?

2 ответа

Это известно как "функция расширения". В документации по вашей реализации XQuery должен быть раздел, в котором рассказывается, как писать такие функции и подключать их к процессору. (Детали могут отличаться от одного процессора XQuery к другому, поэтому я отсылаю вас к руководству.)

В то время как @keshlam упоминает функции расширения, которые действительно поддерживаются многими реализациями, каждая из которых имеет свой собственный API.

Я думаю, что, возможно, вы ищете вместо этого Java Binding от XQuery. Многие реализации также поддерживают это и имеют тенденцию использовать тот же подход. Я не знаю, поддерживает ли WebLogic это или нет! Если это так, хитрость заключается в использовании java: в начале вашего объявления URI пространства имен вы можете затем использовать полное имя класса Java статического класса, каждый статический метод вы можете затем вызывать непосредственно из этого пространства имен.

Вы можете из двух примеров реализаций, которые предлагают одинаковую привязку Java из функциональности XQuery здесь:

http://exist-db.org/exist/apps/doc/xquery.xml#calling-java

http://docs.basex.org/wiki/Java_Bindings

Это может послужить примером для вас, чтобы попробовать WebLogic, чтобы увидеть, поддерживается ли он таким же образом. Однако я настоятельно рекомендую вам проверить их документацию, поскольку они могут использовать другой подход.

Другие вопросы по тегам