Hi Richard, You don't need to know the index of the object class to make your code work, you can just cast the instance of the class to IMarshallable and call the marshal() method on the object instance. This interface is added by JiBX as part of the binding compile.
Aside from that, in order for the result to be a valid XML document you're going to need to add a wrapper element around all these individual roots. Writing text directly to the output stream is generally not a great way of doing things - another alternative would be to just add writing the XML declaration and the wrapper element start tag inside your loop (after you've gotten the marshalling context, and only when i == 0), then finish with the wrapper element end tag when after writing the root at i == roots.length-1. - Dennis Dennis M. Sosnoski SOA, Web Services, and XML Training and Consulting http://www.sosnoski.com - http://www.sosnoski.co.nz Seattle, WA +1-425-296-6194 - Wellington, NZ +64-4-298-6117 Richard Rodgers wrote: > Hello: > > I have what I think is a straightforward operation I don't know how to > accomplish in JiBX - I want to marshall several different objects into a > single > document, but the objects may have different marshalling contexts. > > For example, the code (where 'out' is an OutputStream) > > IBindingFactory bFact = BindingDirectory.getFactory( object.getClass() ); > IMarshallingContext mCtx = bFact.createMarshallingContext(); > mCtx.setIndent( 4 ); > mCtx.marshalDocument( object, "UTF-8", null, out ); > > works fine if the document file will contain only the object rooted at > 'object'; > but if I have several such objects, where the call to 'getFactory' might > return > a different factory, I gather I have to do something like this to build a > document > (with Object[] roots ): > > 1 // manually construct the XML declaration > 2 out.write( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n".getBytes() ); > 3 > 4 // loop thru all objects > 5 for ( int i = 0; i < roots.length; i++ ) { > 6 IBindingFactory bFact = BindingDirectory.getFactory( roots[i].getClass() > ); > 7 IMarshallingContext mCtx = bFact.createMarshallingContext(); > 8 mCtx.setIndent( 4 ); > 9 mCtx.setOutput( out, "UTF-8" ); > 10 > 11 if ( i < roots.length - 1 ) { > 12 // this invocation won't call 'endDocument', so I can add other > objects > 13 IMarshaller mr = mCtx.getMarshaller( index, > roots[i].getClass().getName() > ); > 14 mr.marshal( object, mCtx ); > 15 } > 16 else { > 17 // this final invocation will call 'endDocument' and properly close > file > 18 mCtx.marshallDocument( roots[i] ); > 19 } > 20 } > > The problem is in line 13: I don't know how to get the correct value for > 'index'. > The JavaDoc says 'class index for marshalling definition' but I have no idea > what that means, > much less how to obtain it programmatically. I searched in vain for sample > code that works like this. > > Any help much appreciated, either in explaining this API, or even an > alternate > approach that > skins the cat another way... > > Thanks a lot, > > Richard Rodgers > > > ------------------------------------------------------------------------- > Using Tomcat but need to do more? Need to support web services, security? > Get stuff done quickly with pre-integrated technology to make your job easier > Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo > http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 > _______________________________________________ > jibx-users mailing list > jibx-users@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/jibx-users > > ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys -- and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ jibx-users mailing list jibx-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/jibx-users