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

Reply via email to