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

Reply via email to