Forum: JRuby xml binding for JRuby?..

Posted by Eric Schmitt (filthyrich)
on 2010-08-15 06:08
Does anyone here know how to get JAXB working with JRuby? I'm having
trouble with it. It keeps giving me a: "syntax error, unexpected
tIDENTIFIER (SyntaxError)"

The specific location its complaining about is the line where I use:

sgbc = (SomeGeneratedBindingClass) unmarshaller.unmarshal(file)

The tutorials I'm using for JAXB gave me this Java code:

JAXBContext context = JAXBContext.newInstance("net.some.package.name");
Unmarshaller unmarshaller = context.createUnmarshaller();
GeneratedBindingClass gbc = (GeneratedBindingClass)
unmarshaller.unmarshal(file);
xmlValueOfInterest = gbc.getXMLValueOfInterest();

so, it seemed reasonable to use the following Ruby/JRuby implementation
of JAXB:

context = JAXBContext.newInstance("net.some.package.name")
unmarshaller = context.createUnmarshaller()
gbc = (GeneratedBindingClass) unmarshaller.unmarshal(file)
xmlValueOfInterest = gbc.getXMLValueOfInterest()
puts xmlValueOfInterest

I've used "include Java" and java_import 'java.some.package' where
applicable... just can't seem to get the rest of the syntax right. Can
anybody spot what I'm missing?

Cheers,
Eric
Posted by kristian (Guest)
on 2010-08-15 06:21
(Received via mailing list)
in JRUBY you do not need to cast any objects. so just leave the cast
'(GeneratedBindingClass)' away.

that should help. regards Kristian

On Sun, Aug 15, 2010 at 9:38 AM, Eric Schmitt <lists@ruby-forum.com> 
wrote:
> JAXBContext context = JAXBContext.newInstance("net.some.package.name");
> gbc = (GeneratedBindingClass) unmarshaller.unmarshal(file)
> Posted via http://www.ruby-forum.com/.
>
> ---------------------------------------------------------------------
> To unsubscribe from this list, please visit:
>
>    http://xircles.codehaus.org/manage_email
>
>
>

---------------------------------------------------------------------
To unsubscribe from this list, please visit:

    http://xircles.codehaus.org/manage_email
Posted by Eric Schmitt (filthyrich)
on 2010-08-16 05:39
Thanks Kristian... I think I'll just try and write the xml binding, 
using the JAXB binding libraries, in straight java. Then use a simple 
java class to access the attributes, that way I can just import the .jar 
and use some simple calls to a basic java class... maybe that'll get the 
job done. JRuby seems to be choking on some of the example code that 
I've been trying to implement. And I'm not savvy enough to figure out 
how write it differently. Anyhow, thanks again!

Cheers,
Eric
Posted by Eric Schmitt (filthyrich)
on 2010-08-16 20:59
Eric Schmitt wrote:
> Thanks Kristian... I think I'll just try and write the xml binding, 
> using the JAXB binding libraries, in straight java. Then use a simple 
> java class to access the attributes, that way I can just import the .jar 
> and use some simple calls to a basic java class... maybe that'll get the 
> job done. JRuby seems to be choking on some of the example code that 
> I've been trying to implement. And I'm not savvy enough to figure out 
> how write it differently. Anyhow, thanks again!
> 
> Cheers,
> Eric

Okay,

Here's an update for anyone who's following in my footsteps... If you're 
using JRuby, it seems best practice to minimize your use of Java inline 
with Ruby. It can't handle things like casting and such, so don't even 
bother with it. I created a basic accessor class, and placed all the 
unmarshalling JAXB code in the constructor, and used it to initialize 
the variables that matched the tags in the xml document. Then in my 
JRuby code I just did the following:

include Java
require 'path/to/my/xml/binding/jar/file'
import 'my.accessor.class.package.MyAccessorClass'

ac = AccessorClass.new(java.io.File("path/to/xml/file"))
# now you can output your xml values, or store in a database, etc..
puts ac.someAttribute

Yes, its that easy folks! I was making it way harder than it needed to 
be. If anyone has any problems with this, don't hesitate to ask. I think 
I understand it pretty well now.

Cheers,
Eric
Posted by Eric Schmitt (filthyrich)
on 2010-08-16 21:03
Eric Schmitt wrote:
> Eric Schmitt wrote:
>> Thanks Kristian... I think I'll just try and write the xml binding, 
>> using the JAXB binding libraries, in straight java. Then use a simple 
>> java class to access the attributes, that way I can just import the .jar 
>> and use some simple calls to a basic java class... maybe that'll get the 
>> job done. JRuby seems to be choking on some of the example code that 
>> I've been trying to implement. And I'm not savvy enough to figure out 
>> how write it differently. Anyhow, thanks again!
>> 
>> Cheers,
>> Eric
> 
> Okay,
> 
> Here's an update for anyone who's following in my footsteps... If you're 
> using JRuby, it seems best practice to minimize your use of Java inline 
> with Ruby. It can't handle things like casting and such, so don't even 
> bother with it. I created a basic accessor class, and placed all the 
> unmarshalling JAXB code in the constructor, and used it to initialize 
> the variables that matched the tags in the xml document. Then in my 
> JRuby code I just did the following:
> 
> include Java
> require 'path/to/my/xml/binding/jar/file'
> import 'my.accessor.class.package.MyAccessorClass'
> 
> ac = AccessorClass.new(java.io.File("path/to/xml/file"))
> # now you can output your xml values, or store in a database, etc..
> puts ac.someAttribute
> 
> Yes, its that easy folks! I was making it way harder than it needed to 
> be. If anyone has any problems with this, don't hesitate to ask. I think 
> I understand it pretty well now.
> 
> Cheers,
> Eric

Oops, caught a typo:

include Java
require 'path/to/my/xml/binding/jar/file'
import 'my.accessor.class.package.MyAccessorClass'

myac = MyAccessorClass.new(java.io.File("path/to/xml/file"))
# now you can output your xml values, or store in a database, etc..
puts myac.someAttribute

Now go enjoy a tasty beverage...  :D
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.