Absolutely. Thanks a lot for the help and sorry for the spam again.
________________________________ From: Russ Tremain <ru...@releasetools.org> To: David Wang <kuoweiw...@yahoo.com> Cc: Patrick LeBoutillier <patrick.leboutill...@gmail.com>; "inline@perl.org" <inline@perl.org> Sent: Friday, December 13, 2013 12:29 PM Subject: Re: New to Inline::Java and a quick question Re: New to Inline::Java and a quick question you should also always check for exceptions as per my previousl example. i.e., in your perlAPI.pm: sub new { my $self = {}; bless($self, $class); eval { $self->{CONNECTION} = new perlAPI::MyJAXB(); }; if ($@){ if (Inline::Java::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", $@; } return undef; } return $self; } your current code is ignoring the exception silently. Maybe Patrick can help on why Inline::Java is not catching the java exception, but at any rate, the error from eval is the same as the one from java. -Russ At 12:12 PM -0800 12/13/13, David Wang wrote: Hi Sorry for the spam. I found the solution. > In Perl, we need to add the class loader, can't use the default one. Therefore, to make the long story short, the code where is called in perlAPI.pm should look like the following. > ClassLoader cl = sample.ObjectFactory.class.getClassLoader(); > System.out.println("============================> checkpoint1"); JAXBContext context = JAXBContext.newInstance("sample", cl); System.out.println("==============================>checkpoint2"); > > > > >________________________________ > From: David Wang <kuoweiw...@yahoo.com> >To: Patrick LeBoutillier <patrick.leboutill...@gmail.com> >Cc: Russ Tremain <ru...@releasetools.org>; "inline@perl.org" <inline@perl.org> >Sent: Friday, December 13, 2013 11:28 AM >Subject: Re: New to Inline::Java and a quick question > > Hi Patrick and the rest > I made a very simple example. This example shows how a Main.java calls the JAXB stuff and the same calls in Perl script failed. > Once you download the file, untar, to compile and run in Java, you do javac -d classes Main.java java -cp .:classes Main > To run in perl perl main.pl > You will see that the following line always fails in perl . JAXBContext context = JAXBContext.newInstance("sample"); > JAXB is a very powerful utility in Java that saves lots of coding to parse XML (you basically don't need to write any code to parse, its all done automatically). I have way too many existing perl scripts that can take the advantage of JAXB if this would work. > Thanks for your help. > David > >________________________________ > From: Patrick LeBoutillier <patrick.leboutill...@gmail.com> >To: David Wang <kuoweiw...@yahoo.com> >Cc: Russ Tremain <ru...@releasetools.org>; "inline@perl.org" <inline@perl.org> >Sent: Friday, December 13, 2013 3:45 AM >Subject: Re: New to Inline::Java and a quick question > > Hi, > If I run this: > >use strict ; > >use Inline ( > Java => 'DATA', > DEBUG => 0, > AUTOSTUDY => 1, >); > > >my $t = new MyJAXB() ; > > >__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"); > > } >} > I get this: > >checkpoint1 >Unexpected exception of type 'javax.xml.bind.JAXBException': "com.example.foo" doesnt contain ObjectFactory.class or jaxb.index at /usr/local/lib64/perl5/site_perl/5.10.0/x86_64-linux-thread-multi/Inline/Java/Object.pm line 49 at t.pl line 10 > at t.pl line 10 > Don't know enough about JAXB to continue... > Patrick > > > > > On Fri, Dec 13, 2013 at 2:06 AM, David Wang <kuoweiw...@yahoo.com> 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 <ru...@releasetools.org> >>To: David Wang <kuoweiw...@yahoo.com> >> >Cc: "inline@perl.org" <inline@perl.org> >>Sent: Thursday, December 12, 2013 7:32 PM > >>Subject: 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 <ru...@releasetools.org> >>>To: David Wang <kuoweiw...@yahoo.com> >>>Cc: David Mertens <dcmertens.p...@gmail.com>; "inline@perl.org" >>><inline@perl.org> >>>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 <dcmertens.p...@gmail.com> >>>>To: David Wang <kuoweiw...@yahoo.com> >>>>Cc: "inline@perl.org" <inline@perl.org> >>>>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 <kuoweiw...@yahoo.com> 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 <kuoweiw...@yahoo.com> >>>>>To: "inline@perl.org" <inline@perl.org> >>>>>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 >>>> > >> > >> >> > > >-- >===================== >Patrick LeBoutillier >Rosemère, Québec, Canada