Hi
Have got unmarshalling to work! Well ... from the JibX side of things -
thank to everyone for there help. :)
Have come up against another hurdle in that the Struts2 RESTful plug-in
instantiates the object to be populated by the XML Handler.
The standard xml handler which comes with Struts2 uses XStream.
XStream has an overloaded "fromXML" method which takes an already
instantiated object as a parameter and then populates it's
attributes/and remaining object graph from the XML, as if XStream had
created the object itself.
I much prefer JibX hence writing my own XML Handler for the Strut2
RESTful plug-in. My first draft of the XML Handler's toObject is/was:
public void toObject(Reader in, Object target)
{
init();
try
{
IUnmarshallingContext umc = bf.createUnmarshallingContext();
target = umc.unmarshalDocument(in, null);
}
catch (JiBXException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
But I really need to have my handler work in the following fashion:
public void toObject(Reader in, Object *target*)
{
init();
try
{
IUnmarshallingContext umc = bf.createUnmarshallingContext();
umc.unmarshalDocument(in, null, *target*);
}
catch (JiBXException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Where target is an already instantiated passed in to toObject by the
Struts2 framework.
Is there a way to unmarshall like this? If not then I think it'd be a
great feature for JibX and would encourage people using Struts2 to
implement their XML Handlers using JibX
Jon
Mahen Perera wrote:
Not sure whether this will help you.
http://jibx.sourceforge.net/tutorial/binding-custom.html
in this link you find the following information:
"Besides the two constructor variations shown in this example, you can
also define constructors that take an additional String parameter. If
the binding compiler finds a constructor of this type it will pass the
name of the object class that the marshaller/unmarshaller is used with
in the binding when calling the constructor. This feature can be used
to implement polymorphic marshaller/unmarshallers"
------------------------------------------------------------------------
*From:* [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] *On Behalf Of *Jon
Little
*Sent:* 09 June 2008 03:45
*To:* Dennis Sosnoski
*Cc:* JiBX users
*Subject:* Re: [jibx-users] Struts, jibx and unmarshalling
Hi Dennis
Thanks for your reply.
I have taken your advice of having a single binding for all classes.
However, I still confused when it comes to unmarshalling.
The Struts XML Handler has:
public void toObject(Reader in, Object target)
The example on the JibX website gets a binding factory by passing in a
class name. In my situation when toObject is called I will have no
idea what class[es]/object[s] will be contained in the XML.
How can I /getFactory/ in this situation?
Or is there one factory per binding file??
Cheers
Jon
Dennis Sosnoski wrote:
Hi Jon,
Just to clarify, the normal way of using JiBX would be to have a single
binding which includes <mapping> definitions for all the classes you're
going to be marshalling/unmarshalling as root objects.
If you really need to use a separate binding for each class you can make
that work, too, but it'll be more work to keep track of the various
bindings (which seemed to be what you were asking in your original
email). Is there a reason you want to do it this way?
- Dennis
Dennis M. Sosnoski
SOA and Web Services in Java
Training and Consulting
http://www.sosnoski.com - http://www.sosnoski.co.nz
Seattle, WA +1-425-939-0576 - Wellington, NZ +64-4-298-6117
Varghese C V wrote:
What i meant was to keep the binding factory as an instance variable in
the xml handler, that is looked up during the initialization of the xml
handler.
Does this clear things?
Jon Little wrote:
Hi
Thanks for your reply but I must admit the I do not comprehend what
you mean.
Jon
Varghese C V wrote:
The BindingFactory need not be looked up every time.
During the Xml Handler initialization look the binding factory once
with a class that is part of the binding.
Looking up a binding factory from any class that is part of the
binding definition would return the same binding factory.
The binding factory is threadsafe.
Personally, I use spring to inject a binding factory lookup class to
a xml handler.
Hope this helps
Varghese C V
Jon Little wrote:
Hi
I'm new to jibx but i love the concept.
I'm planning on using jibx for the xml translator on struts.
Each class will have a binding,
The xml handler has two pre-defined methods - fromObject and toObject.
The fromObject method is pretty straightforward (and I hope the
toObject will be too):
public String fromObject(Object obj, String resultCode, Writer out)
throws IOException
{
if (obj != null)
{
try
{
IBindingFactory bf =
BindingDirectory.getFactory(obj.getClass());
IMarshallingContext mc = bf.createMarshallingContext();
mc.marshalDocument(obj, null, null, out);
}
catch (JiBXException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return null;
}
The toObject method has the following signature:
public void toObject(Reader in, Object target)
My question is given that each class will have it's own binding and
I don't know the class of the object that is about to be
unmarshalled how do I call BindingDirectory.getFactory to get the
correct binding?
Thinking you in advance.
Jon
-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://sourceforge.net/services/buy/index.php
_______________________________________________
jibx-users mailing list
jibx-users@lists.sourceforge.net <mailto:jibx-users@lists.sourceforge.net>
https://lists.sourceforge.net/lists/listinfo/jibx-users
-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://sourceforge.net/services/buy/index.php
_______________________________________________
jibx-users mailing list
jibx-users@lists.sourceforge.net <mailto:jibx-users@lists.sourceforge.net>
https://lists.sourceforge.net/lists/listinfo/jibx-users
The information contained in this email is strictly confidential and
for the use of the addressee only, unless otherwise indicated. If you
are not the intended recipient, please do not read, copy, use or
disclose to others this message or any attachment. Please also notify
the sender by replying to this email or by telephone (+44 (0)20 7896
0011) and then delete the email and any copies of it. Opinions,
conclusions (etc.) that do not relate to the official business of this
company shall be understood as neither given nor endorsed by it. IG
Index plc is a company registered in England and Wales under number
01190902. VAT registration number 761 2978 07. Registered Office:
Friars House, 157-168 Blackfriars Road, London SE1 8EZ. Authorised and
regulated by the Financial Services Authority. FSA Register number 114059.
------------------------------------------------------------------------
-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://sourceforge.net/services/buy/index.php
------------------------------------------------------------------------
_______________________________________________
jibx-users mailing list
jibx-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jibx-users
-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://sourceforge.net/services/buy/index.php
_______________________________________________
jibx-users mailing list
jibx-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jibx-users