Re: New to Inline::Java and a quick question
[email protected] (Russ Tremain) Fri, 13 Dec 2013 12:10:25 -0800
| Newsgroups | perl.inline |
|---|---|
| Message-ID | <p06240805ced1097d06a7@[10.0.100.199]> |
The problem is your constructor is generating an
exception, which you are not catching in your
perl code. Try creating the following files and
then:
$ javac MyJAXB.java testMyJAXB.java
$ perl testjaxb.pl
hello world args length is 1
arg[0]=HELLO FROM PERL
checkpoint1
JAVA CAUGHT EXCEPTION: "com.example.foo" doesnt
contain ObjectFactory.class or jaxb.index
checkpoint1
PERL CAUGHT UNEXPECTED EXCEPTION: 'Unexpected
exception of type 'javax.xml.bind.JAXBException':
"com.example.foo" doesnt contain
ObjectFactory.class or jaxb.index at
/usr/local/perl/lib/site_perl/5.8.9/darwin-2level/Inline/Java/Object.pm
line 49.
at testjaxb.pl line 18.
at testjaxb.pl line 18.
'
Note that Inline::Java::caught() is *not*
catching the java exception. Possibly because
the MyJAXB object was never created, the
exception object was also destroyed.
-Russ
==> testjaxb.pl <==
package main;
use Inline::Java qw(caught);
use Inline (
Java => 'STUDY',
STUDY => ['testMyJAXB', 'MyJAXB'],
CLASSPATH => '.',
) ;
my $obj;
$obj = main::testMyJAXB->new();
$obj->main(["HELLO FROM PERL"]);
#now create MyJAXB, but catch the exception in perl instead of java:
eval {
$obj = main::MyJAXB->new();
};
if ($@){
if (caught("java.lang.Exception")) {
my $msg = $@->getMessage() ;
printf "PERL CAUGHT java exception: '%s'\n", $msg;
}
else{
#unexpected Inline::Java exception:
printf "PERL CAUGHT UNEXPECTED EXCEPTION: '%s'\n", $@;
}
}
==> MyJAXB.java <==
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.math.BigInteger;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import java.util.*;
public class MyJAXB {
public MyJAXB() throws
javax.xml.bind.JAXBException,
FileNotFoundException, SAXException
{
System.out.println("checkpoint1");
JAXBContext context =
JAXBContext.newInstance("com.example.foo:com.example.bar");
System.out.println("checkpoint2");
}
}
==> testMyJAXB.java <==
public class testMyJAXB {
public static void main(String[] args) {
System.out.println("hello world args length is " + args.length );
for (int ii=0; ii< args.length; ii++) {
System.out.println("arg["+ii+"]="+args[ii]);
}
try {
MyJAXB xx = new MyJAXB();
} catch (Exception e) {
System.out.println("CAUGHT EXCEPTION: " + e.getMessage());
}
return;
}
}
At 11:06 PM -0800 12/12/13, David Wang wrote:
>Hi Russ
>
>Thanks. Pls do the following
>
>In your perlAPI.pm add the following (in the same file).
>
>==> perl script calls
>
>eval {$self->{CONNECTION} = new perlAPI::MyJAXB();};
>
>==> The following is the Java JAXB stuff
>__DATA__
>__Java__
>import java.io.BufferedReader;
>import java.io.File;
>import java.io.FileInputStream;
>import java.io.FileNotFoundException;
>import java.io.FileReader;
>import java.io.IOException;
>import java.math.BigInteger;
>
>import javax.xml.bind.JAXBContext;
>import javax.xml.bind.JAXBException;
>import javax.xml.bind.Unmarshaller;
>import javax.xml.parsers.DocumentBuilder;
>import javax.xml.parsers.DocumentBuilderFactory;
>import org.w3c.dom.Document;
>import org.w3c.dom.NamedNodeMap;
>import org.w3c.dom.Node;
>import org.w3c.dom.NodeList;
>import org.xml.sax.SAXException;
>
>import java.util.*;
>
>public class MyJAXB {
> public MyJAXB() throws javax.xml.bind.JAXBException,
> FileNotFoundException, SAXException
> {
> System.out.println("checkpoint1");
> JAXBContext context =
>JAXBContext.newInstance("com.example.foo:com.example.bar");
> System.out.println("checkpoint2");
>
> }
>}
>
>
> "checkpoint2" will never be reached. If you do
>the DEBUG =>4, you will see the error
>
>>>[perl][3] perl doesn't know about
>>>'javax.xml.bind.JAXBException' ('perlAPI::javax::xml::bind::JAXBException')
>>>
>
>use Inline (
> Java => 'DATA',
> J2SDK => $ENV{JAVA_HOME},
> CLASSPATH => 'classes',
>
> DEBUG => 4,
>);
>
>Pls let me know how it goes. I really hope its
>something I did wrong meaning it works on your
>end.
>
>
>From: Russ Tremain <[email protected]>
>To: David Wang <[email protected]>
>Cc: "[email protected]" <[email protected]>
>Sent: Thursday, December 12, 2013 7:32 PM
>Subject: Re: New to Inline::Java and a quick question
>
>
>#yiv7039752953 #yiv7039752953 -- blockquote,
>#yiv7039752953 dl, #yiv7039752953 ul,
>#yiv7039752953 ol, #yiv7039752953 li
>{padding-top:0;padding-bottom:0;} #yiv7039752953
>Re: New to Inline::Java and a quick question
>can you publish your full example? I can try it
>my environment to see if it works for me.
>
>Also, when you installed inline::Java, did it pass all the tests?
>
>At 5:18 PM -0800 12/12/13, David Wang wrote:
>
>>Thanks. my perl version is v5.8.8 . It works
>>with Java fine. Just not with JAXB at this
>>current
>>
>>moment.
>>
>>
>>
>>From: Russ Tremain <[email protected]>
>>To: David Wang <[email protected]>
>>Cc: David Mertens <[email protected]>;
>>"[email protected]" <[email protected]>
>>Sent: Thursday, December 12, 2013 5:05 PM
>>Subject: Re: New to Inline::Java and a quick question
>>
>>
>>#yiv3571647833 #yiv3571647833 -- blockquote,
>>#yiv3571647833 dl, #yiv3571647833 ul,
>>#yiv3571647833 ol, #yiv3571647833 li
>>{padding-top:0;padding-bottom:0;}
>>#yiv3571647833 Re: New to Inline::Java and a
>>quick question
>>
>>one thing I can tell you is I have never gotten
>>Inline::Java to work with any perl later than
>>5.8.9.
>>
>>I have used it extensively with JDBC.pm. Example of this can be found here:
>>
>>
>> https://github.com/russt/sqlpj
>>
>>
>>best of luck!
>>
>>-Russ
>>
>>
>>
>>At 4:57 PM -0800 12/12/13, David Wang wrote:
>>
>>>Thanks
>>>
>>>
>>>I am not sure if anybody has any experience
>>>with perl Inline::Java to call Java JAXB .
>>>Basically, I have added some code in my perl
>>>script to call some of my Java API that calls
>>>JAXB.
>>>
>>>
>>>System.out.println("before·");
>>>
>>>JAXBContext context = JAXBContext.newInstance("SomeXMLPackage");
>>>
>>>System.out.println("after·");
>>>
>>>
>>>and it fails on the JAXB statement above. I
>>>then added Debug and AUTOSTUDY option in perl
>>>like below
>>>
>>>
>>>use Inline (
>>>
>>> Java => 'DATA',
>>>
>>> J2SDK => $ENV{JAVA_HOME},
>>>
>>> CLASSPATH => 'classes',
>>>
>>> AUTOSTUDY => 1,
>>>
>>> DEBUG => 4,
>>>
>>>);
>>>
>>>
>>>then I see
>>>
>>>[java][3] packet sent is ok java_object:1:1:javax.xml.bind.JAXBException
>>>
>>>[perl][3] packet recv is ok java_object:1:1:javax.xml.bind.JAXBException
>>>
>>>[perl][3] checking if stub is array...
>>>
>>>[perl][3] perl doesn't know about
>>>'javax.xml.bind.JAXBException'
>>>('perlAPI::javax::xml::bind::JAXBException')
>>>
>>>[perl][2] autostudying javax.xml.bind.JAXBException...
>>>
>>>[perl][3] perl doesn't know about
>>>'javax.xml.bind.JAXBException'
>>>('perlAPI::javax::xml::bind::JAXBException')
>>>
>>>[perl][3] reporting on javax.xml.bind.JAXBException
>>>
>>>
>>>I hope perl inline works with JAXB . BTW, my
>>>Java API works fine meaning I use a Java main
>>>to call this
>>>
>>>API and the xml file is loaded without problem.
>>>
>>>
>>>thanks,
>>>
>>>
>>>David
>>>
>>>
>>>
>>>
>>>
>>>
>>>From: David Mertens <[email protected]>
>>>To: David Wang <[email protected]>
>>>Cc: "[email protected]" <[email protected]>
>>>Sent: Thursday, December 12, 2013 5:37 AM
>>>Subject: Re: New to Inline::Java and a quick question
>>>
>>>
>>>Yep, as a rule, if you need to install a Perl
>>>module, a simple "cpan Module::Name" should do
>>>it. If you are on a Unixish system, you may
>>>have installation permission issues, in which
>>>case there are known work-arounds. But I'm
>>>sure you'll ask when you come to those. :-)
>>>
>>>Good luck, and don't be afraid to ask more questions as they come up!
>>>
>>>David
>>>
>>>
>>>
>>>On Wed, Dec 11, 2013 at 7:38 PM, David Wang
>>><<mailto:[email protected]>[email protected]>
>>>wrote:
>>>
>>>Ok, I figured it out. Hope it can be documented somewhere.
>>>
>>>
>>>Download Inline-0.53
>>>
>>>go to the dir
>>>
>>>cpan Inline::Java << was instructed by some nice guy
>>>
>>>
>>>Thanks
>>>
>>>
>>>David
>>>
>>>
>>>
>>>
>>>From: David Wang <<mailto:[email protected]>[email protected]>
>>>To: "<mailto:[email protected]>[email protected]"
>>><<mailto:[email protected]>[email protected]>
>>>Sent: Wednesday, December 11, 2013 4:25 PM
>>>Subject: New to Inline::Java and a quick question
>>>
>>>
>>>Hi
>>>
>>>
>>>I am very new to this stuff, just started to
>>>hear about it today. I looked around the web
>>>and I find the installation
>>>
>>>instructions for inline::c like the following
>>>
>>>
>>>perl Makefile.PL;
>>>
>>>make;
>>>
>>>make test;
>>>
>>>make install;
>>>
>>>
>>>But I can't find anywhere else that tells us
>>>how to install inline::Java ? BTW, I found the
>>>latest Inline is Inline-0.53.tar.gz and I use
>>>Redhat 5
>>>
>>>
>>>Thanks
>>>
>>>
>>>David
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>--
>>> "Debugging is twice as hard as writing the code in the first place.
>>> Therefore, if you write the code as cleverly as possible, you are,
>>> by definition, not smart enough to debug it." -- Brian Kernighan