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 <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
#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 <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
<<mailto:kuoweiw...@yahoo.com>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 <<mailto:kuoweiw...@yahoo.com>kuoweiw...@yahoo.com>
To: "<mailto:inline@perl.org>inline@perl.org"
<<mailto: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