XSLT Saxon

Тема в разделе "Lotus + Java + LS2J", создана пользователем oshmianski, 6 окт 2010.

  1. oshmianski

    oshmianski Гость

    использовал ли кто сабж в Lotus?

    интересует трансформация XML -> XSL -> XML.

    Saxon
     
  2. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.083
    Симпатии:
    300
    не понятно как соотносится с ЛДН, и почему именно Saxon
    если связано с ХСЛТ 2 - то понятно :(
    а что конкретно хотелось бы узнать?
     
  3. oshmianski

    oshmianski Гость

    Да, именно xslt 2.0 хочу заюзать.

    Пущаю java на 8.5.2 (JDK 1.6) из cdm = все хорошо, трансформит.
    А вот из Notes не получаетсо.

    В JAVA я ламо, посему и вопрос тут.
    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Код</div></div><div class="sp-body"><div class="sp-content"><!--shcode--><pre><code class='java'>import net.sf.saxon.Configuration;
    import net.sf.saxon.TransformerFactoryImpl;
    import org.xml.sax.*;
    import javax.xml.transform.*;
    import javax.xml.transform.stream.StreamResult;
    import javax.xml.transform.stream.StreamSource;

    public class TraxExamples {
    public static void exampleSimple1(String sourceXML, String sourceXSL, String resultXML)
    throws TransformerException {
    try {
    System.setProperty("javax.xml.transform.TransformerFactory", "net.sf.saxon.TransformerFactoryImpl");

    // Create a transform factory instance.

    //Configuration config = Configuration.newConfiguration();

    TransformerFactory tfactory = TransformerFactory.newInstance();
    //TransformerFactoryImpl tfactory = new TransformerFactoryImpl(config);
    /*
    // Create a transformer for the stylesheet.
    Transformer transformer =
    tfactory.newTransformer(new StreamSource(sourceXSL));

    // Transform the source XML to System.out.
    transformer.transform(new StreamSource(sourceXML), new StreamResult(System.out));

    // Transform the source XML to System.out.
    //transformer.transform(new StreamSource(sourceID), new StreamResult(new File(resultXML)));

    */
    } catch (Exception ex) {
    handleException(ex);
    }
    }

    private static void handleException(Exception ex) {

    System.out.println("EXCEPTION: " + ex);
    ex.printStackTrace();

    if (ex instanceof TransformerConfigurationException) {
    System.out.println();
    System.out.println("Test failed");

    Throwable ex1 =
    ((TransformerConfigurationException) ex).getException();

    if (ex1!=null) { // added by MHK
    ex1.printStackTrace();

    if (ex1 instanceof SAXException) {
    Exception ex2 = ((SAXException) ex1).getException();

    System.out.println("Internal sub-exception: ");
    ex2.printStackTrace();
    }
    }
    }
    }
    }[/CODE]
    Ошибка в Notes:
    <!--QuoteBegin-"IBM Lotus Notes"+-->
    <table border="0" cellpadding="0" cellspacing="0" align="center" width="98%"> [tr] <td class="vbquote"> <table border="0" cellpadding="0" cellspacing="0" width="100%"> [tr] <td class="vbquote" width="75" valign="bottom"> <table border="0" cellpadding="0" cellspacing="0" width="50px"> [tr] <td class="vbquote" width="28" valign="top">[​IMG]</td> <td class="vbquote" width="100%" style="background-image: url('style_images/ckr/quotes/quote-bg.gif'); background-position: center;" valign="middle"><span class="vbquote">Цитата:</span></td> <td class="vbquote" valign="top">[​IMG]</td> [/tr] </table> </td> <td class="vbquote" align="left" style="background-image: url('style_images/ckr/quotes/quot-lr-bg.gif')" valign="bottom"></td><td class="vbquote" width="0" align="left" valign="bottom"> <table border="0" cellpadding="0" cellspacing="0" width="200"> [tr] <td class="vbquote" valign="top">[​IMG]</td> <td class="vbquote" width="100%" style="background-image: url('style_images/ckr/quotes/quot-bye-bg.gif')" align="left" valign="middle" nowrap="nowrap"><span class="vbquote">("IBM Lotus Notes")</span></td> <td class="vbquote" valign="top">[​IMG]</td> [/tr] </table> </td><td class="vbquote" width="100%" align="right" valign="bottom"> <table border="0" cellpadding="0" cellspacing="0" width="100%"> [tr] <td class="vbquote" width="100%"> <table border="0" cellpadding="0" cellspacing="0" width="100%"> [tr] <td class="vbquote" style="background-image: url('style_images/ckr/quotes/quot-top-bg.gif')" width="100%" valign="middle"></td> <td class="vbquote" align="left" valign="top">[​IMG]</td> [/tr] </table> </td> [/tr] </table> </td> [/tr] </table> <table border="0" cellpadding="0" cellspacing="0" width="100%"> [tr] <td class="vbquote" width="10" style="background-image: url('style_images/ckr/quotes/quoting-left.gif')"></td> <td class="vbquotemain" width="100%" valign="top"></td> <td class="vbquote" width="10" style="background-image: url('style_images/ckr/quotes/quoting-right.gif')"></td> [/tr] [tr] <td class="vbquote" width="10" style="background-image: url('style_images/ckr/quotes/quot-left-bg.gif')"></td> <td class="vbquotemain" width="100%" valign="top"><!--QuoteEBegin-->LS2J Error: Threw java.lang.ExceptionInInitializerError<!--QuoteEnd--></td> [/tr] [tr] [/tr] </table> </td> [/tr] </table>
    <!--QuoteEEnd-->Ошибка в java консоли:
    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">java.lang.RuntimeException: Cannot read edition.properties file</div></div><div class="sp-body"><div class="sp-content"> at net.sf.saxon.Configuration.<clinit>(Configuration.java:233)
    at java.lang.J9VMInternals.initializeImpl(Native Method)
    at java.lang.J9VMInternals.initialize(J9VMInternals.java:200)
    at net.sf.saxon.TransformerFactoryImpl.<init>(TransformerFactoryImpl.java:36)
    at java.lang.J9VMInternals.newInstanceImpl(Native Method)
    at java.lang.Class.newInstance(Class.java:1325)
    at javax.xml.transform.FactoryFinder.newInstance(Unknown Source)
    at javax.xml.transform.FactoryFinder.find(Unknown Source)
    at javax.xml.transform.TransformerFactory.newInstance(Unknown Source)
    at TraxExamples.exampleSimple1(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:48)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.jav
    a:37)
    at java.lang.reflect.Method.invoke(Method.java:600)
    at lotus.domino.JavaConnectInvoker.invoke(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:48)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.jav
    a:37)
    at java.lang.reflect.Method.invoke(Method.java:600)
    at lotus.domino.JavaConnectLoader.invoke(Unknown Source)
    Я так понимаю какая-то конфигурация не нравится ему?
     
  4. Kmet

    Kmet Well-Known Member
    Java Team

    Регистрация:
    25 май 2006
    Сообщения:
    1.018
    Симпатии:
    1
    нет, просто lotus что то мутит с класслоадерами.
    каким образом подключаешь saxon?

    а самое просто и быстрое решение это пропатчить net.sf.saxon.Configuration.
     
  5. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.083
    Симпатии:
    300
    соблюдено ли правило - класть библы в jvm/lib/ext/ а не в базу ?
    потому как ошибки вызываются при создании класса:
    at java.lang.Class.newInstance(Class.java:1325)
    at javax.xml.transform.FactoryFinder.newInstance(Unknown Source)
    at javax.xml.transform.FactoryFinder.find(Unknown Source)
    at javax.xml.transform.TransformerFactory.newInstance(Unknown Source)
     
  6. oshmianski

    oshmianski Гость

    импортирую jar в java библиотеку.

    нет. jar архив импортирую прямо в java библиотеку базы.
    класть библу в jvm/lib/ext не очень подходит, ибо всем пользователям не "наложишь" ))) (да и скриптом это делать не особо хочется).

    что значит пропатчить? это как?
     
  7. oshmianski

    oshmianski Гость

    если положить jar архив в jvm/lib/ext, то все работает.
    но это не очень красиво. хотелось бы все таки использовать импортированный в библу.
     
  8. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.083
    Симпатии:
    300
    логика класслоадера от ИБМ и "родных" (жвм) отличаются ;)
    все библиотеки используют стандартный подход (через classpath)...
    перехватом вызовов ИБМ жвм занимается только в ограниченном спектре
    ежелиб они эмулировали ФС - не былоб отличий
    и большинство библиотек, использующих фэктори и рефлекшн, не будут работать с библиотеками из базы (уж так ИБМ реализовал ;) )
     
  9. Kmet

    Kmet Well-Known Member
    Java Team

    Регистрация:
    25 май 2006
    Сообщения:
    1.018
    Симпатии:
    1
    я не знаком с лотус терминологией

    как обычно: скачал исходники, изменил, собрал, подложил. это гораздо проще, чем кажется на первый взгляд.
     
  10. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.083
    Симпатии:
    300
    а придётся ;) либо классы надо грузить самому и инстансы подсовывать, а не вызывать загрузчики либы (хотя - это "плохой" подход)
    а чего пользователю-то - ну сделайте скрипт, кот. проверит присут либы, попробует скопировать, если либыа там была и жвм запущена - будет облом, кот. можно отловить и попросить передёрнуть нотуса (скрип мона пущать при старте базы)
     
  11. oshmianski

    oshmianski Гость

    т.е. кроме как положить jar в jvm/lib/ext никак?
     
  12. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.083
    Симпатии:
    300
    если коротко - то никак
     
  13. oshmianski

    oshmianski Гость

    все понял, спасибо
     
  14. Kmet

    Kmet Well-Known Member
    Java Team

    Регистрация:
    25 май 2006
    Сообщения:
    1.018
    Симпатии:
    1
    ты повторяешь это как мантру. это у тебя религия такая?

    как минимум можно в TransformerFactory.newInstance() попробовать подсунуть свой класслоадер.

    у IBM JVM которая идет с Websphere отличий не заметил.

    ясно что лотусовские агенты запускаются в своеобразный песочницах из соображений безопастности, но из этого не следуют что в реализации IBM JVM есть существенные отличия.
     
  15. oshmianski

    oshmianski Гость

    а подроюнее?
     
  16. Kmet

    Kmet Well-Known Member
    Java Team

    Регистрация:
    25 май 2006
    Сообщения:
    1.018
    Симпатии:
    1
    Создать тривиальный класслоадер который делегирует все вызовы к current context classloader, кроме загрузки edition.properties. И создать TransformerFactory с помощью его.

    http://download.oracle.com/javase/6/docs/a...ava.lang.String, java.lang.ClassLoader)
     
  17. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.083
    Симпатии:
    300
    не помню, кто-то экспериментировал с подменой класслоадера - получился облом по секурити ИБМжвм

    Добавлено:
    нативные классы разные, возможно, открытие секурити, по-полной, разрешит подставлять класслоадер, но получим яйца в профиль - ибо на каждом клиенте придётся менять
     
  18. HelenHelen

    HelenHelen Well-Known Member

    Регистрация:
    31 авг 2011
    Сообщения:
    75
    Симпатии:
    0
    а можно как-нибудь в лотусе запустить именно парсер, написанный на джаве? дело в том, что штатный парсер лотуса ругается на Xpath-конструкции, которые работают в SAXON 6.5.5. Конструкции правильные с точки зрения Xpath, поэтому не знаю, как их переделать, в чем отлаживать, да и вообще не вижу смысла. Гораздо лучше, на мой взгляд, прикрутить SAXON в лотус. Импортировала его jar, вопрос только в том, как теперь запустить саму трансформацию?...
     
  19. oshmianski

    oshmianski Достойный программист
    Lotus team

    Регистрация:
    25 апр 2012
    Сообщения:
    521
    Симпатии:
    13
    как-то так...

    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">java-код</div></div><div class="sp-body"><div class="sp-content"><!--shcode--><pre><code class='java'>import java.io.File;
    //import net.sf.saxon.Configuration;
    //import net.sf.saxon.TransformerFactoryImpl;
    import org.xml.sax.*;
    import javax.xml.transform.*;
    import javax.xml.transform.stream.StreamResult;
    import javax.xml.transform.stream.StreamSource;

    public class SaxonXML2Transformer {

    public static void TrasformFFF(String sourceXML, String sourceXSL, String resultXML)
    throws TransformerException {
    try {
    System.setProperty("javax.xml.transform.TransformerFactory", "net.sf.saxon.TransformerFactoryImpl");

    // Create a transform factory instance.
    TransformerFactory tfactory = TransformerFactory.newInstance();

    // Create a transformer for the stylesheet.
    Transformer transformer =
    tfactory.newTransformer(new StreamSource(sourceXSL));

    // Transform the source XML to System.out.
    transformer.transform(new StreamSource(sourceXML), new StreamResult(new File(resultXML)));

    } catch (Exception ex) {
    handleException(ex);
    }
    }

    private static void handleException(Exception ex) {

    System.out.println("EXCEPTION: " + ex);
    ex.printStackTrace();

    if (ex instanceof TransformerConfigurationException) {
    System.out.println();
    System.out.println("Test failed");

    Throwable ex1 =
    ((TransformerConfigurationException) ex).getException();

    if (ex1!=null) { // added by MHK
    ex1.printStackTrace();

    if (ex1 instanceof SAXException) {
    Exception ex2 = ((SAXException) ex1).getException();

    System.out.println("Internal sub-exception: ");
    ex2.printStackTrace();
    }
    }
    }
    }
    }[/CODE]
    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">LS2J-вызов</div></div><div class="sp-body"><div class="sp-content">
    Код (LotusScript):
    Function E2E_TransformSaxon (sXML As String, sXSL As String, sTargetXML As String) As Boolean
    On Error Goto errorHandler
    E2E_TransformSaxon = False

    Dim js As JAVASESSION
    Dim saxonClass As JAVACLASS
    Dim saxonObj As JavaObject

    Dim startTic As Long

    Dim seconds As Double

    Print "Трансформирую данные..."

    startTic = Getthreadinfo (6)

    Set js = New JAVASESSION
    Set saxonClass = js.GetClass("SaxonXML2Transformer")
    Set saxonObj = saxonClass.CreateObject ()

    Call saxonObj.TrasformFFF (sXML, sXSL, sTargetXML)

    seconds = (Getthreadinfo (6) - startTic) / Getthreadinfo (7)

    Print "На трансформацию данных потрачено секунд: " & Format (seconds, "##0.00")

    Print "Трансформирую данные...ОК"

    E2E_TransformSaxon = True

    ex:
    Exit Function

    errorHandler:
    Call ProcessError (MODULE_NAME, Err, Error, Erl, Getthreadinfo (LSI_THREAD_PROC), Getthreadinfo (LSI_THREAD_CALLPROC))
    Resume Ex
    End Function
     
  20. turumbay

    Регистрация:
    13 мар 2009
    Сообщения:
    625
    Симпатии:
    2
    XPath бывает двух версий: 1.0 и 2.0. Вы наверняка заюзали что-то из  xpath 2.0 ( интересно кстати что именно ). А лотус как обычно слегка не успевает за ходом технического прогресса и штатный парсер вторую версию не поддерживает.
    Добавляете необходимые библиотеки к нужному элементу дизайна ( агенту или java-library, кнопка "edit project") и вперед, согласно документации saxon и примерам из гугла
     
Загрузка...
Похожие Темы - XSLT Saxon
  1. Megaworld
    Ответов:
    0
    Просмотров:
    1.118
  2. Eugen
    Ответов:
    0
    Просмотров:
    1.292
  3. Eugen
    Ответов:
    70
    Просмотров:
    13.624
  4. VladSh
    Ответов:
    12
    Просмотров:
    6.507
  5. lmike
    Ответов:
    0
    Просмотров:
    1.656

Поделиться этой страницей