I've had some luck using XMLBeans to produce classes corresponding to a schema. It is claimed that this handles all features of XML Schema. There is supposed to be a way (but I haven't read up on it or used it) to integrate those classes into the Axis serialization/deserialization mechanism. Most likely, you would download the XMLBeans libraries from their normal location (xmlbeans.apache.org), and Axis would provide some additional glue classes, apparently in the package org.apache.axis.encoding.ser.xbeans.
There's some indication in a quick Google search, that after generating the classes and the auxiliary information from the schema, you have to generate Axis-style type-mappings to guide the Axis serialization mechanism. Some people have wound up having to do it by hand, but it seems likely there is a way to automate it, or that the Axis glue classes could use the information produced by the XMLBeans compiler. Probably if you collect all the qnames of types, global elements and attributes in your schema (perhaps using the XML Schema API as provided by Xerces) and specify the XmlBeanSerializerFactory and XmlBeanDeserializerFactory as their serializer/deserializers in the type mappings, you'll be close. Jeff On 1/30/07, Amy Krause <[EMAIL PROTECTED]> wrote:
Hi, > Abstract types and substitution groups seem not to be well supported > in most web service machinery. Even if you find a supporting > platform, there may be interoperability problems if clients use other > platforms. That's interesting. I wasn't aware of that. > You might have an easier time getting something like this > to work: > > <element name="sequence" type="tns:Workflow"/> > <element name="parallel" type="tns:Workflow"/> > <element name="pipeline" type="tns:Pipeline"/> > > <complexType name="Workflow"> > <choice maxOccurs="unbounded"> > <element ref="sequence"/> > <element ref="parallel"/> > <element ref="pipeline"/> > </choice> > </complexType> > > <complexType name="Pipeline"> > ... > </complexType> > This is a far more elegant way of writing the schema, I agree - it's what I originally used. Unfortunately, WSDL2Java (Axis 1.4) doesn't seem to support the maxOccurs attribute on a choice element. The beans don't reflect it, there's only one member in the Java bean for each of the subelements. It is a complicated problem. Since the sequence, parallel and pipeline elements can occur in any order and multiplicity the bean would have to provide a List containing those objects. But then those objects need to be cast to the correct types ... This is why I tried to use substitutionGroups. Is there any other way of solving the problem? I hope I was wrong and it's possible to generate beans for the <choice maxOccurs="unbounded"> ... solution. Amy > On 1/29/07, Amy Krause <[EMAIL PROTECTED]> wrote: >> Hi, >> >> I'm having a very similar problem as described here: >> http://marc.theaimsgroup.com/?l=axis-user&m=113819830006177&w=2 >> >> My schema is included below. >> I'm trying to implement a composite pattern. There are three types derived >> from an abstract type as follows: >> >> Workflow (abstract) >> / | \ >> Parallel Sequence Pipeline >> >> Both parallel and sequence elements must contain nested Workflow elements >> (one or more of parallel, sequence or pipeline), whereas pipeline elements >> cannot - they form the leaves of the workflow tree. >> An example of a document would be: >> >> <perform> >> <sequence> >> <parallel> >> <pipeline> ... </pipeline> >> <pipeline> ... </pipeline> >> </parallel> >> <pipeline> ... </pipeline> >> </sequence> >> <perform> >> >> In the schema I've defined an abstract Workflow element and elements >> parallel, sequence and pipeline. These are substitution elements for the >> Workflow element. >> When I generate Java beans with WSDL2Java there is no trace of the >> parallel and sequence elements. There is a Java class called Composite >> which extends WorkflowComponent but there is no way of telling whether >> this Composite object used to be a sequence or a parallel element. How can >> I force Axis to generate Java beans corresponding to those elements? >> >> Any help with this would be appreciated. >> >> Thanks, >> Amy >> >> >> >> <!-- root element --> >> <xsd:element name="perform"> >> <xsd:complexType> >> <xsd:sequence> >> <xsd:element ref="tns:workflow"/> >> </xsd:sequence> >> </xsd:complexType> >> </xsd:element> >> >> <!-- work flow group and component --> >> >> <xsd:element name="workflow" abstract="true" >> type="tns:WorkflowComponent"> >> </xsd:element> >> >> <xsd:complexType name="WorkflowComponent"> >> </xsd:complexType> >> >> <xsd:element name="parallel" >> substitutionGroup="tns:workflow" >> type="tns:Composite"/> >> <xsd:element name="sequence" >> substitutionGroup="tns:workflow" >> type="tns:Composite"/> >> >> <xsd:complexType name="Composite"> >> <xsd:complexContent> >> <xsd:extension base="tns:WorkflowComponent"> >> <xsd:sequence> >> <xsd:element ref="tns:workflow" maxOccurs="unbounded"/> >> </xsd:sequence> >> </xsd:extension> >> </xsd:complexContent> >> </xsd:complexType> >> >> <xsd:element name="pipeline" >> substitutionGroup="tns:workflow" >> type="tns:Pipeline"/> >> >> <xsd:complexType name="Pipeline"> >> <xsd:complexContent> >> <xsd:extension base="tns:WorkflowComponent"> >> <xsd:sequence> >> <xsd:element ref="tns:activity" minOccurs="1" >> maxOccurs="unbounded"/> >> </xsd:sequence> >> </xsd:extension> >> </xsd:complexContent> >> </xsd:complexType> >> >> <xsd:element name="activity"> >> <!-- some definitions here ... --> >> </xsd:element> >> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: [EMAIL PROTECTED] >> For additional commands, e-mail: [EMAIL PROTECTED] >> >> > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > -- ------------------------------------------------------------ | Dr Amy Krause Applications Consultant | | |epcc|, The University of Edinburgh | | King's Buildings, Mayfield Road, Edinburgh EH9 3JZ, UK | | Tel: +44 (0)131 650 6718 --- email: [EMAIL PROTECTED] | ------------------------------------------------------------ --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]