I have been just using castor-1.1with no mapping file and using the
default source generated classes.
But that doesn't seem to be sufficient so here's what I'm facing now.
Problem number 1 - Mapping dates from a non-standard format
I have a basic type:
<xs:complexType name="itemType">
<xs:complexContent>
<xs:extension base="baseDomain">
<xs:sequence>
<xs:element ref="availabilityStart"/>
<xs:element ref="availabilityEnd"/>
</xs:sequence>
<xs:attribute name="title" type="xs:string"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="availabilityStart" type="xs:dateTime"/>
<xs:element name="availabilityEnd" type="xs:dateTime"/>
This is extended to a playlist object
<xs:element name="playlist">
<xs:complexType>
<xs:complexContent>
<xs:extension base="itemType">
<xs:sequence>
<xs:element ref="items"/>
<xs:element ref="canSortPlaylist"/>
<xs:element ref="canSetLanguage"/>
<xs:element ref="canRepeat"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
The availabilityStart and End dates come back as 01/01/2007 - 12:00:00
AM, which causes the unmarshalling to fail.
I followed the example online for field handlers
(http://www.castor.org/xml-fieldhandlers.html) and I can see it create
the handlers, but never access the methods when I map using this file:
(note AvailabilityStartHandler is a version of the first example, the
ItemTypeDateHandler is the generic version)
<?xml version="1.0"?>
<mapping>
<class name="com.fool.domain.Playlist">
<field name="availabilityStart" type="string"
handler="com.foo.domain.handler.AvailabilityStartHandler">
<bind-xml node="text"/>
</field>
<field name="availabilityEnd" type="string"
handler="com.foo.domain.handler.ItemTypeDateHandler">
<bind-xml node="text"/>
</field>
</class>
<class name="com.foo.domain.ItemType">
<field name="availabilityStart" type="string"
handler="com.disney.disl.domain.handler.ItemTypeDateHandler">
<bind-xml node="text"/>
</field>
<field name="availabilityEnd" type="string"
handler="com.foo.domain.handler.ItemTypeDateHandler">
<bind-xml node="text"/>
</field>
</class>
</mapping>
I get errors still on the mapping since it doesn't like the date
formats in the field by default. Is it possible to bind on the
ItemType class and have the mapping picked up by children classes
(e.g. Playlist) and others?
2nd problem - I don't know how to map this, but I have the complex
type items that contains a series of arrays (videos, audios,
playlists, games) and a set of attributes that are the array size. How
do I map videos.size to the videos attribute?
<xs:element name="items">
<xs:complexType>
<xs:sequence>
<xs:element name="video"
type="videoType" minOccurs="0"
maxOccurs="unbounded"/>
<xs:element name="game" type="gameType"
minOccurs="0"
maxOccurs="unbounded"/>
<xs:element name="audio"
type="audioType" minOccurs="0"
maxOccurs="unbounded"/>
<xs:element name="playlist"
type="playlistType" minOccurs="0"
maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="games" type="xs:int"/>
<xs:attribute name="audios" type="xs:int"/>
<xs:attribute name="videos" type="xs:int"/>
<xs:attribute name="playlists" type="xs:int"/>
</xs:complexType>
</xs:element>
Thanks!
On 2/16/07, Werner Guttmann <[EMAIL PROTECTED]> wrote:
Hi Drew,
can you please provide us with a bit more information, such as what the
relevant XML schema (fragment) and the binding file looks like ?
Regards
Werner
Drew Beechum wrote:
> Hi,
>
> I've just been handed a project that needs to support pulling in and
> manipulating an xml response from a legacy service. I've got most
> everything bound in, but I'm running into a few problems and I don't
> know how to resolve them. For the record I'm using castor 1.1 and the
> ant sourcegen tools to build the classes.
>
> sample xml looks like this
>
> <playlist id=123>
> <id>123</id>
> <items videos=1 playlists=1>
> <video id=124>
> <id>124</id>
> </video>
> <playlist id=125>
> <id>125</id>
> </playlist>
> </items>
> </playlist>
>
> Do source generation with the id attribute in place in the schema causes
> a conflict error. Big surprise, right? Is there anyway to resolve this?
> Preferably I'd like to map to the same member in the class, but every
> time I try to do "/[EMAIL PROTECTED]" it fails.
>
> Is there a clean way to populate the videos/playlists count attributes
> with the ArrayList<video>.size()?
>
> Thanks
---------------------------------------------------------------------
To unsubscribe from this list please visit:
http://xircles.codehaus.org/manage_email
---------------------------------------------------------------------
To unsubscribe from this list please visit:
http://xircles.codehaus.org/manage_email