Xdocreport - inputstream cannot be null

Тема в разделе "Lotus + Java + LS2J", создана пользователем dimat, 15 сен 2015.

Метки:
  1. dimat

    dimat Lotus team
    Lotus team

    Регистрация:
    31 июл 2008
    Сообщения:
    518
    Симпатии:
    0
    Всем привет!
    Кто нибудь юзал данную библиотеку? подскажите, что не так делаю?

    Создал агента подключил все jar, в агенте открыл пример DocxProjectWithVelocity, запускаю и в java debug console вижу данную ошибку.

    Код (Text):
    Agent Manager: Agent error: java.io.IOException: InputStream cannot be null.
    Agent Manager: Agent error: at fr.opensagres.xdocreport.core.io.XDocArchive.readZip(XDocArchive.java:289)
    Agent Manager: Agent error: at fr.opensagres.xdocreport.document.registry.XDocReportRegistry.createReport(XDocReportRegistry.java:359)
    Agent Manager: Agent error: at fr.opensagres.xdocreport.document.registry.XDocReportRegistry.loadReport(XDocReportRegistry.java:326)
    Agent Manager: Agent error: at fr.opensagres.xdocreport.document.registry.XDocReportRegistry.loadReport(XDocReportRegistry.java:317)
    Agent Manager: Agent error: at fr.opensagres.xdocreport.document.registry.XDocReportRegistry.loadReport(XDocReportRegistry.java:302)
    Agent Manager: Agent error: at DocxProjectWithVelocity.NotesMain(Unknown Source)
    Agent Manager: Agent error: at lotus.domino.AgentBase.runNotes(Unknown Source)
    Agent Manager: Agent error: at lotus.domino.NotesThread.run(Unknown Source)
    Код (Java):
    import lotus.domino.*;
     
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
     
    import fr.opensagres.xdocreport.core.XDocReportException;
    import fr.opensagres.xdocreport.document.IXDocReport;
    import fr.opensagres.xdocreport.document.registry.XDocReportRegistry;
    import fr.opensagres.xdocreport.samples.docxandvelocity.model.Project;
    import fr.opensagres.xdocreport.template.IContext;
    import fr.opensagres.xdocreport.template.TemplateEngineKind;
     
    public class DocxProjectWithVelocity extends AgentBase {
        public void NotesMain() {
          try {
              Session session = getSession();
              AgentContext agentContext = session.getAgentContext();
     
              try {
               InputStream in = DocxProjectWithVelocity.class.getResourceAsStream("d:/docxandvelocity/DocxProjectWithVelocity.docx");
               IXDocReport report = XDocReportRegistry.getRegistry().loadReport(in,TemplateEngineKind.Velocity);
     
                  // 2) Create context Java model
                  IContext context = report.createContext();
                  Project project = new Project("XDocReport");
                  context.put("project", project);
     
                  // 3) Generate report by merging Java model with the Docx
                  OutputStream out = new FileOutputStream(new File("d:\\docxandvelocity\\DocxProjectWithVelocity_Out.docx"));
                  report.process(context, out);
                } catch (IOException e) {
                  e.printStackTrace();
                } catch (XDocReportException e) {
                  e.printStackTrace();
                }
          } catch(Exception e) {
              e.printStackTrace();
           }
       }
    }
     
    #1 dimat, 15 сен 2015
    Последнее редактирование модератором: 15 сен 2015
  2. garrick

    garrick Lotus team
    Lotus team

    Регистрация:
    26 окт 2009
    Сообщения:
    773
    Симпатии:
    52
    Здесь где-то ошибка
    Код (Text):
     InputStream in = DocxProjectWithVelocity.class.getResourceAsStream("d:/docxandvelocity/DocxProjectWithVelocity.docx");
    Не найден файл шаблона. Возможно он есть по указанному пути, но не может быть загружен методом getResourceAsStream. Попробуйте обычный файловый Stream. getResourceAsStream подразумевает загрузку из хранилища "ресурсов", а не любой файл с диска.
     
  3. dimat

    dimat Lotus team
    Lotus team

    Регистрация:
    31 июл 2008
    Сообщения:
    518
    Симпатии:
    0
    Попробвал уже, пишет что для загрузки можно использовать только getResourceAsStream.
    Код (Java):
    InputStream in = new FileInputStream(new File("d:/DocxProjectWithVelocity.docx"));
    Agent Manager: Agent error: fr.opensagres.xdocreport.core.XDocReportException: Impossible to create report for the input stream. The report loader supports only [] files type.
     
    #3 dimat, 15 сен 2015
    Последнее редактирование модератором: 15 сен 2015
  4. dimat

    dimat Lotus team
    Lotus team

    Регистрация:
    31 июл 2008
    Сообщения:
    518
    Симпатии:
    0
    А что за хранилище ресурсов?
     
  5. oshmianski

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

    Регистрация:
    25 апр 2012
    Сообщения:
    521
    Симпатии:
    13
    вот рабочий код

    Код (Java):
    import fr.opensagres.xdocreport.document.IXDocReport;
    import fr.opensagres.xdocreport.document.registry.XDocReportRegistry;
    import fr.opensagres.xdocreport.template.IContext;
    import fr.opensagres.xdocreport.template.TemplateEngineKind;
    import org.apache.commons.io.FilenameUtils;
     
    import javax.xml.parsers.SAXParser;
    import javax.xml.parsers.SAXParserFactory;
    import java.io.*;
    import java.util.List;
     
    /**
     * Created by vintselovich on 12.08.2014.
     */

    public class XDocReporter {
     
        public XDocReporter() {
     
        }
     
        public String process(String tempalateFilePath, String xmlFilePath) {
         String outputfilepath = "";
       
            try {
                InputStream in = new FileInputStream(new File(tempalateFilePath));
                IXDocReport report = XDocReportRegistry.getRegistry().loadReport(in, TemplateEngineKind.Velocity);
                IContext context = report.createContext();
     
                // create an instance of SAXParser.
                SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
     
                // create an instance of DefaultHandler.
                XMLParserViaSax parseXml = new XMLParserViaSax();
     
                InputStream stream = new FileInputStream(xmlFilePath);
     
                parser.parse(stream, parseXml);
     
                List items = parseXml.getItems();
               
                context.put("items", items);
     
                stream.close();
     
                File inputfile = new File(tempalateFilePath);
     
                outputfilepath = inputfile.getParent() + "\\" + FilenameUtils.getBaseName(inputfile.getAbsolutePath()) + "_out." + FilenameUtils.getExtension(inputfile.getAbsolutePath());
     
                OutputStream out = new FileOutputStream(new File(outputfilepath));
     
                report.process(context, out);
     
                if (items != null) items.clear();
            } catch (Exception e) {
                e.printStackTrace();
            }
           
            return outputfilepath;
        }
    }
     
    Код (LotusScript):

     
    Set js = New JAVASESSION
    Set xDocReporter = js.GetClass("XDocReporter")
    Set xDocReporterObj = xDocReporter.CreateObject()
     
    docFilePath = xDocReporterObj.process(templateFilePath, xmlFilePath)
     
  6. erdi

    erdi Well-Known Member

    Регистрация:
    20 авг 2008
    Сообщения:
    261
    Симпатии:
    36
    в примере файл лежит в самом проекте...положи файл в ресурсы агента и вызывай как в примере. Только для работы необходимо добавить в java.policy следующие разрешения
    Код (Java):
    grant {
       permission java.lang.RuntimePermission "getClassLoader";
       permission java.lang.RuntimePermission "setContextClassLoader";
    }
    ну или если хочешь использовать файл на жестком используй другую конструкцию
    Код (Java):
    InputStream in = new FileInputStream("/tmp/template.odt");
    IXDocReport report = XDocReportRegistry.getRegistry().loadReport(in,TemplateEngineKind.Velocity);
     
  7. dimat

    dimat Lotus team
    Lotus team

    Регистрация:
    31 июл 2008
    Сообщения:
    518
    Симпатии:
    0
    Не получается так, все равно требует через report loader:

    Код (Java):
    InputStream in = new FileInputStream("d:/docxandvelocity/DocxProjectWithVelocity.docx");
    IXDocReport report = XDocReportRegistry.getRegistry().loadReport(in,TemplateEngineKind.Velocity);
    Код (Text):
    fr.opensagres.xdocreport.core.XDocReportException: Impossible to create report for the input stream. The report loader supports only [] files type.
    at fr.opensagres.xdocreport.document.registry.XDocReportRegistry.createReport(XDocReportRegistry.java:380)
    at fr.opensagres.xdocreport.document.registry.XDocReportRegistry.createReport(XDocReportRegistry.java:360)
    at fr.opensagres.xdocreport.document.registry.XDocReportRegistry.loadReport(XDocReportRegistry.java:326)
    at fr.opensagres.xdocreport.document.registry.XDocReportRegistry.loadReport(XDocReportRegistry.java:317)
    at fr.opensagres.xdocreport.document.registry.XDocReportRegistry.loadReport(XDocReportRegistry.java:302)
    at DocxProjectWithVelocity.NotesMain(Unknown Source)
    at lotus.domino.AgentBase.runNotes(Unknown Source)
    at lotus.domino.NotesThread.run(Unknown Source)
    И где можно найти java.policy?
     
  8. erdi

    erdi Well-Known Member

    Регистрация:
    20 авг 2008
    Сообщения:
    261
    Симпатии:
    36
    ..\jvm\lib\security\
    можете этот пример посмотреть
     
  9. garrick

    garrick Lotus team
    Lotus team

    Регистрация:
    26 окт 2009
    Сообщения:
    773
    Симпатии:
    52
    Для Java-агента это "папочка" res внутри самого агента. Image 3.png
    Только доставать его надо так:
    Код (Text):
    InputStream in = getClass().getClassLoader().getResourceAsStream("DocxProjectWithVelocity.docx")
     
  10. dimat

    dimat Lotus team
    Lotus team

    Регистрация:
    31 июл 2008
    Сообщения:
    518
    Симпатии:
    0
    Ага, уже догадался, все равно не хочет работать, никак(
     
  11. oshmianski

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

    Регистрация:
    25 апр 2012
    Сообщения:
    521
    Симпатии:
    13
    1.
    у меняв grant security добавлены строки

    Код (Java):
    permission java.awt.AWTPermission "listenToAllAWTEvents";
    permission java.lang.RuntimePermission "setContextClassLoader";
    2. может каких jar'ников не хватает?
     
  12. garrick

    garrick Lotus team
    Lotus team

    Регистрация:
    26 окт 2009
    Сообщения:
    773
    Симпатии:
    52
    добавил пример...
     
  13. oshmianski

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

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

    garrick Lotus team
    Lotus team

    Регистрация:
    26 окт 2009
    Сообщения:
    773
    Симпатии:
    52
    А чем код @oshmianski не подошел? Вроде там всё правильно.
     
  15. oshmianski

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

    Регистрация:
    25 апр 2012
    Сообщения:
    521
    Симпатии:
    13
    вот мой список ext (много лишнего, но для сравнения):

    Код (Text):
    commons-codec-1.5.jar
    commons-collections-3.2.1.jar
    commons-io-1.3.1.jar
    commons-lang-2.4.jar
    commons-lang3-3.1.jar
    commons-logging-1.1.jar
    docking-frames-common.jar
    docking-frames-core.jar
    docking-frames-ext-glass.jar
    dom4j-1.6.1.jar
    fr.opensagres.xdocreport.converter-1.0.4.jar
    fr.opensagres.xdocreport.core-1.0.4.jar
    fr.opensagres.xdocreport.document-1.0.4.jar
    fr.opensagres.xdocreport.document.docx-1.0.4.jar
    fr.opensagres.xdocreport.template-1.0.4.jar
    fr.opensagres.xdocreport.template.velocity-1.0.4.jar
    glasslib.jar
    glazedlists_java15-1.9.0.jar
    healthcenter.jar
    ibmallext.jar
    ibmcac.jar
    ibmjcefips.jar
    ibmjceprovider.jar
    ibmpkcs11impl.jar
    IBMSecureRandom.jar
    JavaDiagnosticsCollector.jar
    jcalendar-1.4.jar
    jgoodies-common-1.6.0.jar
    jgoodies-forms-1.7.1.jar
    junit-3.8.1.jar
    localedata.jar
    log4j-1.2.13.jar
    mysql-connector-java-5.1.32-bin.jar
    njempcl.jar
    Notes.jar
    oro-2.0.8.jar
    poi-3.9-20121203.jar
    poi-ooxml-3.9-20121203.jar
    poi-ooxml-schemas-3.9-20121203.jar
    saxon9he.jar
    stax-api-1.0.1.jar
    velocity-1.7.jar
    websvc.jar
    xmlbeans-2.3.0.jar
    xsp.http.bootstrap.jar
     
  16. dimat

    dimat Lotus team
    Lotus team

    Регистрация:
    31 июл 2008
    Сообщения:
    518
    Симпатии:
    0
    Вроде все как в примере, да подсветил бы редактор?


    fr.opensagres.xdocreport.core.XDocReportException: Impossible to create report for the input stream. The report loader supports only [] files type.
    at fr.opensagres.xdocreport.document.registry.XDocReportRegistry.createReport(XDocReportRegistry.java:380)
    at fr.opensagres.xdocreport.document.registry.XDocReportRegistry.createReport(XDocReportRegistry.java:360)
    at fr.opensagres.xdocreport.document.registry.XDocReportRegistry.loadReport(XDocReportRegistry.java:326)
    at fr.opensagres.xdocreport.document.registry.XDocReportRegistry.loadReport(XDocReportRegistry.java:317)
    at fr.opensagres.xdocreport.document.registry.XDocReportRegistry.loadReport(XDocReportRegistry.java:302)
    at DocxProjectWithVelocity.NotesMain(Unknown Source)
    at lotus.domino.AgentBase.runNotes(Unknown Source)
    at lotus.domino.NotesThread.run(Unknown Source)


    Видел это, но не понял о чем там говорится в ответе, можете пояснить?


    Если загружать через FileInputStream - та же ошибка (fr.opensagres.xdocreport.core.XDocReportException: Impossible to create report for the input stream. The report loader supports only [] files type.)
     
  17. garrick

    garrick Lotus team
    Lotus team

    Регистрация:
    26 окт 2009
    Сообщения:
    773
    Симпатии:
    52
    Тоже как-то пытался эту штуку к Лотусу прикрутить, но уж больно много всего оно с собой тянет. Решил, что Apache FOP намного легче. В работе конечно, а не в разработке, т.к. FO шаблон не так просто сделать как DOCX файл. Ещё есть вариант пропускать RTF через шаблонизатор, например Velocity. Только там русские буковки ещё конвертить надо.
    [DOUBLEPOST=1442320178,1442320056][/DOUBLEPOST]
    Your error means that you have not XDocReport fr.opensagres.xdocreport.document.docx docx implementation JAR in your classpath.

    Библиотечки не хватает.
     
  18. oshmianski

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

    Регистрация:
    25 апр 2012
    Сообщения:
    521
    Симпатии:
    13
    в этом посте думаю ответ.

    1. редактор может не подсветить
    2. переложите все зависимые jar'ки в ext папку, а из Archive агента уберите
    3. добавьте в grant соответсвующие строки
     
  19. erdi

    erdi Well-Known Member

    Регистрация:
    20 авг 2008
    Сообщения:
    261
    Симпатии:
    36
    Если просто пытаешься пощупать данную библиотеку, то скачай примеры с их сайта и запусти в том же eclipse. Если запустятся, тогда тупым копированием переносишь в агента. Я таким способом отлаживался и я использую данную библиотеку в продакшене
     
  20. dimat

    dimat Lotus team
    Lotus team

    Регистрация:
    31 июл 2008
    Сообщения:
    518
    Симпатии:
    0
    Как ни странно помогло, Спасибо всем!
     
Загрузка...
Похожие Темы - Xdocreport inputstream cannot
  1. Serduko
    Ответов:
    5
    Просмотров:
    1.685

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