Thanks alot Günther for sticking with me on this, much appreciated. Well it seems I can either use jibx with axis2 web services or Marshall outside of it - not both yet. Please see my comments inline:
On Nov 18, 2007 3:50 PM, Günther Wieser <[EMAIL PROTECTED]> wrote: > hi robert, > > i've never used jibx2wsdl before, but what this tool does in terms of > jibx will be "normal" marshalling and unmarshalling, i guess. > > when i look at your binding a see that the mapping for > ExchangePermissionBO is abstract, which means it can NEVER be the root > element in your xml. furthermore, as it is abstract, it doesn't hold > any information what the resulting tag will be named. > > from my point of view, the <mapping> entry must look like this: > > <mapping name="ENTER_THE_TAG_NAME_HERE" abstract="true" type- > name="tns:exchangePermissionBO" > class="com.wazollc.alphatheory.hibernate.bo.ExchangePermissionBO"> > .... > Seemingly you can either have type-name OR name but not both. I tried pretty hard via my custom.xml that I pass to jibx2wsdl to not make the mapping abstract, including map-abstract=false. No luck though. > then the code to create XML from this object would be: > IBindingFactory bfact = BindingDirectory.getFactory("binding", > ExchangePermissionBO.class); > IMarshallingContext mctx = bfact.createMarshallingContext(); > mctx.marshalDocument(bo, "UTF-8", null, new > FileOutputStream("filename.xml")); > > br, > günther > BindingDirectory.getFactory is pretty confusing to me in that "binding" is the name attribute of the binding element and not a filename, just "binding" has other references in the classloader somewhere, I seemingly can't customize the generated binding name, and there's no public method to find a list from BindingDirectory what names are lurking in its list and where they came from. Probably good reasons for all that, I'm just a newbie. Anyways, I tried the above code without it being abstract, and while it works, I need something that can both work with axis2 and outside of it - the latter I mean by uploading an xml file from the file system or browser and marshalling it with a type-name and being abstract. I'm looking at the axis2 code gen for my original binding to see if I can tweak it to work without a soap message. Any ideas on how to get marshalling to work with type-name and not just name? I'm going thru axis2 codegen / jibx source and unit tests to see I can solve this. Thanks! Robert > Am 16.11.2007 um 11:36 schrieb robert lazarski: > > > > I'm confused to Günther, please bear with me. Well lets focus on > > marshalling right now. I'm starting from code, ie, jib2wsdl . I have a > > binding file it generates. My classes exist before I call any jibx > > tools. I've read all the docs about 10 times - but I'm a newbie so > > please bear with me. jibx has a binding file which is particular to > > jibx, and does marshalling without a schema. This is unlike xmlbeans / > > adb / jaxb etc - what I know well. > > > > Say I have this binding file: > > > > <binding xmlns:tns="http://wazollc.com/alphatheory/hibernate/bo" > > name="binding" package="com.wazollc.alphatheory.hibernate.bo" > > force-classes="true"> > > <namespace uri="http://wazollc.com/alphatheory/hibernate/bo" > > default="elements" prefix="ns1"/> > > <namespace > > uri="http://wazollc.com/alphatheory/webservices/ATWSServer/ATWSServer > > " > > prefix="ns2"/> > > <mapping abstract="true" type-name="tns:exchangePermissionBO" > > class="com.wazollc.alphatheory.hibernate.bo.ExchangePermissionBO"> > > <value style="attribute" name="id" get-method="getId" > > set-method="setId" usage="optional"/> > > <value style="attribute" name="version" get-method="getVersion" > > set-method="setVersion" usage="optional"/> <value style="element" > > name="name" get-method="getName" set-method="setName" > > usage="optional"/> > > <value style="element" name="code" get-method="getCode" > > set-method="setCode" usage="optional"/> > > </mapping> > > </binding> > > > > And lets say I retrieved > > com.wazollc.alphatheory.hibernate.bo.ExchangePermissionBO from a > > hibernate query. I now want to marshall this ExchangePermissionBO into > > xml. My best guess on how to do this is: > > > > com.wazollc.alphatheory.hibernate.bo.ExchangePermissionBO bo = > > getFromHibernate(); > > > > IBindingFactory ibf = > > org.jibx.runtime.BindingDirectory.getFactory("binding", > > "com.wazollc.alphatheory.hibernate.bo", > > EntityMarshaller.class.getClassLoader()); > > org.jibx.runtime.IMarshallable mctx = > > (org.jibx.runtime.IMarshallable)bo; > > org.apache.axiom.om.OMDataSource result = new > > org.apache.axis2.jibx.JiBXDataSource(mctx, ibf); > > StringWriter writer = new StringWriter(); > > result > > .serialize > > (XMLOutputFactory.newInstance().createXMLStreamWriter(writer)); > > writer.flush(); > > System.out.println("Response: " + writer.toString()); > > > > Yet 'ExchangePermissionBO bo' doesn't implement IMarshallable. You say > > it doesn't need to. ok, so I'm approaching this wrong. What's the > > right way - or any way - to do this? > > > > Please help, > > Robert > > > > On Nov 16, 2007 11:16 PM, Günther Wieser <[EMAIL PROTECTED]> > > wrote: > >> hi robert, > >> > >> i'm confused about the things you write in your emails. i need to ask > >> you if you've read the documentation carefully on the jibx homepage? > >> there is NO NEED for extending a jibx class or implementing an > >> interface of jibx. jibx is straight forward, but the problem might be > >> that you try to marshal/unmarshal only parts of an XML that you have > >> defined in your mappings. > >> > >> jibx takes an xml document, and the root element of this xml needs to > >> be defined as the root in your jibx binding. you cannot unmarshal an > >> XML that only holds a substructure of this root binding that you > >> defined. > >> > >> e.g. > >> <client> > >> <name>Blablabla</name> > >> <account> > >> <id>1231234</id> > >> <account> > >> <client> > >> > >> if you define a mapping for this xml stucture, client will be the > >> root > >> element in your xml and your binding. you can unmarshal this XML > >> easily as long as your binding is ok. but you cannot unmarshal the > >> following document: > >> <account> > >> <id>345345</id> > >> </account> > >> as this is NOT a defined root element in your mapping! > >> > >> br, > >> günther > >> > >> Am 16.11.2007 um 03:10 schrieb robert lazarski: > >> > >> > >>> Still struggling here, any help would be highly appreciated. My > >>> areas > >>> of confusion are: > >>> > >>> 1) I've used 'code first' with hibernate objects and Jibx2Wsdl to > >>> create my schema and wsdl. I think I need to have JiBX use get/set > >>> methods rather than directly access fields with working with > >>> Hibernate, so I have referenced in a file that I pass to Jibx2Wsdl: > >>> > >>> <custom force-classes="true" strip-prefixes="m_" property- > >>> access="true"> > >>> </custom> > >>> > >>>> From an axis2 standpoint, this all works fine on my first simple > >>>> service. > >>> > >>> 2) Now I need to marshall / unmarshall xml files to and from my > >>> hibernate entities, outside of axis2 - basically importing and > >>> exporting entire xml based data graphs into and out of a db > >>> controled > >>> by hibernate. I need to validate these operations, so I'm using jaxp > >>> against the xml schema that jibx2wsdl created. > >>> > >>> Step 2 is where I'm stuck: > >>> > >>> 2a) jibx marshalling / unmarshalling doesn't appear to be xml schema > >>> based, but rather jibx binding based. > >>> > >>> 2b) jibx marshalling / unmarshalling of an object seems to require > >>> that the object extends MarshallingContext and > >>> UnmarshallingContext or > >>> implement its interface. This would tightly couple my hibernate > >>> objects to jibx and perhaps needs some custom coding(not just > >>> automatic), but I'd do it it if solved my problem. I tried: > >>> > >>> public class ExchangePermissionBO extends MarshallingContext > >>> implements java.io.Serializable { > >>> ... > >>> } > >>> > >>> But I get: > >>> > >>> [echo] Running Jibx2Wsdl tool > >>> [java] Exception in thread "main" java.lang.IllegalStateException: > >>> No way to handle type 'java.lang.Object' > >>> [java] at > >>> org > >>> .jibx > >>> .binding > >>> .generator.BindingGenerator.expandReferences(BindingGenerator.java: > >>> 191) > >>> [java] at > >>> org > >>> .jibx > >>> .binding > >>> .generator.BindingGenerator.expandReferences(BindingGenerator.java: > >>> 207) > >>> [java] at > >>> org > >>> .jibx > >>> .binding > >>> .generator.BindingGenerator.findReferences(BindingGenerator.java: > >>> 983) > >>> [java] at > >>> org > >>> .jibx > >>> .binding > >>> .generator.BindingGenerator.generateSpecified(BindingGenerator.java: > >>> 1123) > >>> [java] at org.jibx.ws.wsdl.Jibx2Wsdl.generate(Jibx2Wsdl.java: > >>> 484) > >>> [java] at org.jibx.ws.wsdl.Jibx2Wsdl.main(Jibx2Wsdl.java:588) > >>> > >>> I get the feeling I'm aproaching the xml import / export requirement > >>> the wrong way. Please help, > >>> Robert > >>> > >>> On Nov 14, 2007 12:45 PM, robert lazarski <[EMAIL PROTECTED]> > >>> wrote: > >>>> Ahh, just noticed - my mapping is abstract! I'm still confused > >>>> about > >>>> if my entity needs to be cast to IMarshallable, and what I need to > >>>> do. > >>>> Thanks! > >>>> > >>>> Robert > >>>> > >>>> > >>>> On Nov 14, 2007 12:40 PM, robert lazarski > >>>> <[EMAIL PROTECTED]> wrote: > >>>>> Thanks for the reply Günther Wieser, > >>>>> > >>>>> These additional binding classes, when you say runtime, do I need > >>>>> these in the classloader when marshalling? Or are they just for > >>>>> the > >>>>> code gen stage of jibx? > >>>>> > >>>>> What's strange to me is that in my jibx based axis2 code it > >>>>> handles my > >>>>> objects just fine. In my working axis2 code, the code gen casts to > >>>>> IMarshallable. What I may need to do is this: > >>>>> > >>>>> IBindingFactory ibf = > >>>>> org.jibx.runtime.BindingDirectory.getFactory("binding", > >>>>> "com.wazollc.alphatheory.hibernate.bo", > >>>>> EntityMarshaller.class.getClassLoader()); > >>>>> org.jibx.runtime.IMarshallable mctx = > >>>>> (org.jibx.runtime.IMarshallable)bo; > >>>>> > >>>>> But my hibernate objects would then be tied to jibx. Is that > >>>>> what I > >>>>> have to do? Here's my simple mapping - AFAICT I'm doing things as > >>>>> you > >>>>> say I need to - do you see something wrong? Thanks for the help!!! > >>>>> > >>>>> <binding xmlns:tns="http://wazollc.com/alphatheory/hibernate/bo" > >>>>> name="binding" package="com.wazollc.alphatheory.hibernate.bo" > >>>>> force-classes="true"> > >>>>> <namespace uri="http://wazollc.com/alphatheory/hibernate/bo" > >>>>> default="elements" prefix="ns1"/> > >>>>> <namespace > >>>>> uri="http://wazollc.com/alphatheory/webservices/ATWSServer/ATWSServer > >>>>> " > >>>>> prefix="ns2"/> > >>>>> <mapping abstract="true" type-name="tns:exchangePermissionBO" > >>>>> class="com.wazollc.alphatheory.hibernate.bo.ExchangePermissionBO"> > >>>>> <value style="attribute" name="id" get-method="getId" > >>>>> set-method="setId" usage="optional"/> > >>>>> <value style="attribute" name="version" get-method="getVersion" > >>>>> set-method="setVersion" usage="optional"/> <value > >>>>> style="element" > >>>>> name="name" get-method="getName" set-method="setName" > >>>>> usage="optional"/> > >>>>> <value style="element" name="code" get-method="getCode" > >>>>> set-method="setCode" usage="optional"/> > >>>>> </mapping> > >>>>> </binding> > >>>>> > >>>> > >>> > >>> ------------------------------------------------------------------------- > >>> This SF.net email is sponsored by: Microsoft > >>> Defy all challenges. Microsoft(R) Visual Studio 2005. > >>> http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ > >>> _______________________________________________ > >>> jibx-users mailing list > >>> jibx-users@lists.sourceforge.net > >>> https://lists.sourceforge.net/lists/listinfo/jibx-users > >>> > >> > >> > >> > >> -- > >> Günther Wieser > >> creative-it > >> Guglgasse 6/1/11/1 > >> A-1110 Wien > >> [EMAIL PROTECTED] > >> http://www.creative-it.com > >> > >> > >> > >> > >> ------------------------------------------------------------------------- > >> This SF.net email is sponsored by: Microsoft > >> Defy all challenges. Microsoft(R) Visual Studio 2005. > >> http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ > >> > >> _______________________________________________ > >> jibx-users mailing list > >> jibx-users@lists.sourceforge.net > >> https://lists.sourceforge.net/lists/listinfo/jibx-users > >> > > > > ------------------------------------------------------------------------- > > This SF.net email is sponsored by: Microsoft > > Defy all challenges. Microsoft(R) Visual Studio 2005. > > http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ > > _______________________________________________ > > jibx-users mailing list > > jibx-users@lists.sourceforge.net > > https://lists.sourceforge.net/lists/listinfo/jibx-users > > > > > > -- > Günther Wieser > creative-it > Guglgasse 6/1/11/1 > A-1110 Wien > [EMAIL PROTECTED] > http://www.creative-it.com > > > > > ------------------------------------------------------------------------- > This SF.net email is sponsored by: Microsoft > Defy all challenges. Microsoft(R) Visual Studio 2005. > http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ > _______________________________________________ > jibx-users mailing list > jibx-users@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/jibx-users > ------------------------------------------------------------------------- This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2005. http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ _______________________________________________ jibx-users mailing list jibx-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/jibx-users