Hi Polly,

A collection of instances of the interface would just be:

    <collection field="m_dvdList" 
item-type="com.sosnoski.ws.library.jibx2wsdl.hd.Dvd" 
create-type="java.util.ArrayList"/>

though you could use a factory instead of a create-type.

  - 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



amphoras wrote:
> Hi Dennis,
>
> Thank you very much for taking the time to respond.  I studied the 
> example that you pointed out, and I finally found the mistake in my 
> mapping!  I knew it had to be something small and silly.  Turns out 
> that it was.  I simply forgot the namespace attribute in my mapping.  
> It should be like this:
>
>    <mapping ns="http://www.gmail.com/my"; name="myHeader"
>                class="com.my.Header"
>        extends="org.standard.Header">
>      <structure map-as="Header"/>
>      <value name="employeeId" field="employeeId" 
> ns="http://www.gmail.com/my"; />
>    </mapping>
>
> I have done some testing, and it finally looks like it's working!
>
> I have a follow up question though.  I haven't seen any examples 
> combining schema group substitution with a collection.  Using your 
> example, I need to have a List<Dvd>, which means it can contain 
> BluRayDvd or HdDvd objects.  What is the syntax for this?  I tried a 
> few things but keep getting binding errors.
>
> Thanks,
> Polly
>
>
> On Feb 4, 2008 1:10 AM, Dennis Sosnoski <[EMAIL PROTECTED] 
> <mailto:[EMAIL PROTECTED]>> wrote:
>
>     Hi Polly,
>
>     The differences between the different types of <mapping>s, when
>     you use
>     an abstract vs. concrete, and when you reference using a type name
>     vs. a
>     class name, can all be confusing issues. The tutorial has some
>     discussion of this at
>     http://jibx.sourceforge.net/tutorial/binding-mappings.html but some
>     parts are not as clear as they could be because new features were
>     added
>     over time and I was too lazy (or busy, if you want to be
>     charitable) to
>     rewrite the tutorial.
>
>     The Jibx2Wsdl code
>     (http://www.sosnoski.com/jibx-wiki/space/axis2-jibx/jibx2wsdl) has an
>     example (example4) which includes multiple layers of substitution
>     groups. The inheritance structure uses both interfaces and
>     subclassing,
>     with a base Item interface thats implemented by Book and Dvd, an IDvd
>     interface that extends Item and is implemented by another Dvd
>     class, and
>     several subclasses of the latter Dvd class. Here's part of the binding
>     generated for this:
>
>      <mapping abstract="true"
>     extends="com.sosnoski.ws.library.jibx2wsdl.Item"
>     class="com.sosnoski.ws.library.jibx2wsdl.hd.IDvd" name="IDvd">
>        <structure map-as="tns:IDvd"/>
>      </mapping>
>      <mapping abstract="true" type-name="tns:dvd1"
>     class="com.sosnoski.ws.library.jibx2wsdl.hd.Dvd">
>        <structure map-as="tns:IDvd"/>
>      </mapping>
>      <mapping abstract="true"
>     extends="com.sosnoski.ws.library.jibx2wsdl.hd.IDvd"
>     class="com.sosnoski.ws.library.jibx2wsdl.hd.Dvd" name="dvd1">
>        <structure map-as="tns:dvd1"/>
>      </mapping>
>      <mapping extends="com.sosnoski.ws.library.jibx2wsdl.hd.Dvd"
>     class="com.sosnoski.ws.library.jibx2wsdl.hd.HdDvd" name="hdDvd">
>        <structure map-as="tns:dvd1"/>
>        <value style="element" name="studio" get-method="getStudio"
>     set-method="setStudio" usage="optional"/>
>      </mapping>
>      <mapping extends="com.sosnoski.ws.library.jibx2wsdl.hd.Dvd"
>     class="com.sosnoski.ws.library.jibx2wsdl.hd.BluRayDvd"
>     name="bluRayDvd">
>        <structure map-as="tns:dvd1"/>
>        <value style="attribute" name="releaseYear"
>     get-method="getReleaseYear" set-method="setReleaseYear"/>
>      </mapping>
>      <mapping extends="com.sosnoski.ws.library.jibx2wsdl.hd.Dvd"
>     class="com.sosnoski.ws.library.jibx2wsdl.hd.Dvd$FutureDvd"
>     name="dvdFutureDvd">
>        <structure map-as="tns:dvd1"/>
>        <value style="element" name="format" get-method="getFormat"
>     set-method="setFormat" usage="optional"/>
>      </mapping>
>
>     The substitution group structure is shown by the <mapping>s with names
>     which extend other <mapping>s. So in this case, the mappings for
>     <hdDvd>, <bluRayDvd>, and <hdDvd> all extend the mapping for the
>     com.sosnoski.ws.library.jibx2wsdl.hd.Dvd base class, and that base
>     class
>     <mapping> in turn extends the <mapping> for the IDvd interface,
>     which in
>     turn extends the <mapping> for the Item interface.
>
>     That's how the substitution group handling works - you have a
>     <mapping>
>     for each element in the substitution group to some class, and that
>     <mapping> extends the class corresponding to the head of the
>     substitution group. If there are multiple layers in the
>     substitution you
>     just use multiple layers in the <mapping> extensions.
>
>     But when you do this you can't just invoke the base class <mapping>
>     using a <structure map-as='base-class"/>, because that would create a
>     new child element. So it's often convenient to have abstract mappings
>     with a type-name but no element name in parallel to the mappings with
>     names used by the substitution group structure. In the sample
>     above, the
>     second mapping definition is of this type. The type-name for this
>     mapping is then referenced inside the other mappings to handle the XML
>     structure matching the base complexType.
>
>     Hmmm. That still sounds confusing when I read over what I've written,
>     but hopefully it'll give you a start in the right direction. Feel free
>     to ask for clarification if needed.
>
>      - 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
>
>
>
>     amphoras wrote:
>     > Hi Joshua,
>     >
>     > Thank you so much for taking the time to help me with this.  I have
>     > spent countless hours on this until my eyes glazed over.  ;)
>     >
>     > The problem with my object model is that it's deeply
>     hierarchical and
>     > nested, and unfortunately I can't really change it.  That's why
>     we are
>     > using JiBX.  We figured that it's the only tool that can handle our
>     > crazy data structure.  It works as advertised for us for everything
>     > but the schema group substitution.
>     >
>     > Since I simplified my example earlier, I did not tell you that
>     > actually SuperHeader has four more levels of superclasses above it,
>     > and it has two subclasses, one of which is Header.  In addition,
>     > Container is contained by other objects as well.  This is why I
>     ended
>     > up "double-declaring" these elements.  So I tried to mimic your
>     > example as best as I could, following the way that you
>     double-declared
>     > the "Header" example.  I also noticed that sometimes you used
>     "map-as"
>     > with the classname and other times with the mapping type-name.  I
>     > think I read that they're supposed to be functionally
>     equivalent, but
>     > for some reason, I can only use the mapping type-name.  Using the
>     > classname causes all kinds of errors.
>     >
>     > Sadly, there's still something wrong.  The error that I get is:
>     >
>     > junit.framework.AssertionFailedError: Element
>     > "{http://www.gmail.com/my}Header
>     <http://www.gmail.com/my%7DHeader>" has no mapping that extends
>     > org.standard.Header
>     >       at junit.framework.Assert.fail(Assert.java:47)
>     >
>     > Normally, at this point I'll start to try different things.  But
>     after
>     > having done that for hours before and not getting anywhere, I don't
>     > think that I have a good enough understanding of JiBX to succeed
>     that
>     > way.  So I'm hoping that you or someone else can see what I'm doing
>     > wrong.
>     >
>     > Here's what I have:
>     >
>     > <binding>
>     >   <namespace uri="http://www.gmail.com/st"; default="elements"/>
>     >   <namespace uri="http://www.gmail.com/my"; default="none"
>     prefix="my"/>
>     >
>     >   <mapping type-name="SuperHeader" abstract="true"
>     >               class="org.standard.SuperHeader">
>     >     <structure map-as="SuperSuperHeader"/>
>     >   </mapping>
>     >
>     >   <mapping name="SuperHeader"
>     >               class="org.standard.SuperHeader"
>     >       extends="org.standard.SuperSuperHeader">
>     >     <structure map-as="SuperHeader"/>
>     >     <value name="companyId" field="companyId" />
>     >   </mapping>
>     >
>     >
>     >   <mapping type-name="Header" abstract="true"
>     >               class="org.standard.Header">
>     >     <structure map-as="Header"/>
>     >   </mapping>
>     >
>     >   <mapping name="Header"
>     >               class="org.standard.Header"
>     >       extends="org.standard.SuperSuperHeader">
>     >     <structure map-as="Header"/>
>     >     <value name="branchId" field="branchId" />
>     >   </mapping>
>     >
>     >
>     >   <mapping name="myHeader"
>     >               class="com.my.Header"
>     >       extends="org.standard.Header">
>     >     <structure map-as="Header"/>
>     >     <value name="employeeId" field="employeeId"
>     ns="http://www.gmail.com/my"; />
>     >   </mapping>
>     >
>     >
>     >   <mapping type-name="Container" abstract="true"
>     >               class="org.standard.Container">
>     >     <structure field="header"/>
>     >   </mapping>
>     >
>     >   <mapping name="Container"
>     >               class="org.standard.Container">
>     >     <structure map-as="Container" />
>     >   </mapping>
>     > </binding>
>     >
>     > Again, I really appreciate your time and any help that you or
>     anybody
>     > else can give me.
>     >
>     > Thanks!
>     > --Polly
>     >
>
> ------------------------------------------------------------------------
>
> -------------------------------------------------------------------------
> This SF.net email is sponsored by: Microsoft
> Defy all challenges. Microsoft(R) Visual Studio 2008.
> 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 2008.
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

Reply via email to