in reply to Re: inline::java error
in thread inline::java error

Hi;

Thanks for your response

template, report and xmlData are supposed to be parameters passed to the method. did I not do that correctly? Is that the problem..because when I add the code you suggest I either get an error:

"wrong number of arguments"

or when I try to add arguments I get the error:

"can't convert arg to object"

any suggestions?

Replies are listed 'Best First'.
Re^3: inline::java error
by tobyink (Canon) on Jul 14, 2012 at 18:01 UTC

    "template, report and xmlData are supposed to be parameters passed to the method. did I not do that correctly?"

    You did, but then you also defined them as part of the class definition, outside the method, which makes them object properties.

    "or when I try to add arguments I get the error:

    "'can't convert arg to object'"

    That's because the generatePdfReport method expects to be passed three Java objects as parameters. This is totally possible with Inline::Java, but generally speaking I find it much easier to pass plain old strings back and forth over the language barrier.

    In your case, the FileInputStream and FileOutputStream objects can easily be constructed from a filename (i.e. a string), so it certainly makes a lot of sense to pass them into the method as plain old strings instead of instantiating InputStream/OutputStream objects at the Perl end and passing them in.

    Anyway, this is how I'd do it...

    #!/usr/bin/perl use strict; use warnings; BEGIN { $ENV{CLASSPATH}='.:/usr/share/java/*:/the paths to the jars used/' +; } use Inline Java => <<'END', CLASSPATH => $ENV{CLASSPATH}; import java.datasource.dom4j.Dom4jDataSource; import java.xmlreport.ProcessPdf; import java.xmlreport.ProcessReport; import java.io.InputStream; import java.io.OutputStream; import org.dom4j.Element; public class PdfReportGenerator { public static void generatePdfReport( String template_filename, String report_filename, String xmlData_filename ) throws Exception { // This function gets passed its parameters as strings // (makes it easier to call from Perl), so turn them into // InputStream and OutputStream objects. InputStream template = new FileInputStream(template_filename); OuputStream report = new FileOutputStream(report_filename); InputStream xmlData = new FileInputStream(xmlData_filename); ProcessReport.init(); // create the report. ProcessPdf proc = new ProcessPdf(template, report); proc.processSetup(); proc.processData(new Dom4jDataSource(xmlData), ""); proc.processComplete(); } } END my $generator = PdfReportGenerator->new; $generator->generatePdfReport( "/path/template.docx", "/path/report.pdf", "/path/datasource.xml", );

    This is obviously untested, as I don't have the required Java libraries on this system. But, based on my fairly limited experience of Inline::Java, I think it ought to work (or at least be close to working).

    perl -E'sub Monkey::do{say$_,for@_,do{($monkey=[caller(0)]->[3])=~s{::}{ }and$monkey}}"Monkey say"->Monkey::do'
      Hi; Thank you so much..I feel like it's starting to make sense..BUT, this is the error I'm receiving now..

      PdfReportGenerator.java:20: cannot find symbol symbol : class FileInputStream location: class PdfReportGenerator InputStream template = new FileInputStream(template_filename); ^ PdfReportGenerator.java:21: cannot find symbol symbol : class OuputStream location: class PdfReportGenerator OuputStream report = new FileOutputStream(report_filename); ^ PdfReportGenerator.java:21: cannot find symbol symbol : class FileOutputStream location: class PdfReportGenerator OuputStream report = new FileOutputStream(report_filename); ^ PdfReportGenerator.java:22: cannot find symbol symbol : class FileInputStream location: class PdfReportGenerator InputStream xmlData = new FileInputStream(xmlData_filename);

      maybe the strings added to the streams need to happen sooner?

        Hi again; I can't tell you how excited I am!!

        I changed the import to "import java.io.*;"

        and it made the pdf file!

        However, it's empty..But, geez, I feel so close. Any thoughts on why it's not picking up the other 2 variables? If that is the problem..

Re^3: inline::java error
by cliffrubinmusic (Novice) on Jul 14, 2012 at 14:58 UTC
    Also, what is the something in the:

    $gen->generatePdfReport(..something..)

    is it ("template","report","xmlData")?