You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jaxme-dev@ws.apache.org by jo...@apache.org on 2006/11/24 13:15:06 UTC

svn commit: r478855 [16/21] - in /webservices/jaxme/branches/MAVEN/jaxme-xs: ./ src/ src/main/ src/main/java/ src/main/java/org/ src/main/java/org/apache/ src/main/java/org/apache/ws/ src/main/java/org/apache/ws/jaxme/ src/main/java/org/apache/ws/jaxme...

Added: webservices/jaxme/branches/MAVEN/jaxme-xs/src/main/java/org/apache/ws/jaxme/xs/xml/impl/XsTTopLevelElementImpl.java
URL: http://svn.apache.org/viewvc/webservices/jaxme/branches/MAVEN/jaxme-xs/src/main/java/org/apache/ws/jaxme/xs/xml/impl/XsTTopLevelElementImpl.java?view=auto&rev=478855
==============================================================================
--- webservices/jaxme/branches/MAVEN/jaxme-xs/src/main/java/org/apache/ws/jaxme/xs/xml/impl/XsTTopLevelElementImpl.java (added)
+++ webservices/jaxme/branches/MAVEN/jaxme-xs/src/main/java/org/apache/ws/jaxme/xs/xml/impl/XsTTopLevelElementImpl.java Fri Nov 24 04:14:48 2006
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2003, 2004  The Apache Software Foundation
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+
+ */
+package org.apache.ws.jaxme.xs.xml.impl;
+
+import org.apache.ws.jaxme.xs.xml.*;
+
+
+/** <p>Interface of the <code>xs:topLevelElement</code> type, with
+ * the following specification:
+ * <pre>
+ *  <xs:complexType name="topLevelElement">
+ *    <xs:complexContent>
+ *      <xs:restriction base="xs:element">
+ *        <xs:sequence>
+ *          <xs:element ref="xs:annotation" minOccurs="0"/>
+ *          <xs:choice minOccurs="0">
+ *            <xs:element name="simpleType" type="xs:localSimpleType"/>
+ *            <xs:element name="complexType" type="xs:localComplexType"/>
+ *          </xs:choice>
+ *          <xs:group ref="xs:identityConstraint" minOccurs="0" maxOccurs="unbounded"/>
+ *        </xs:sequence>
+ *        <xs:attribute name="ref" use="prohibited"/>
+ *        <xs:attribute name="form" use="prohibited"/>
+ *        <xs:attribute name="minOccurs" use="prohibited"/>
+ *        <xs:attribute name="maxOccurs" use="prohibited"/>
+ *        <xs:attribute name="name" use="required" type="xs:NCName"/>
+ *      </xs:restriction>
+ *    </xs:complexContent>
+ * </xs:complexType>
+ *</pre></p>
+ *
+ * @author <a href="mailto:joe@ispsoft.de">Jochen Wiedmann</a>
+ */
+public class XsTTopLevelElementImpl extends XsTElementImpl implements XsTTopLevelElement {
+  protected XsTTopLevelElementImpl(XsObject pParent) {
+    super(pParent);
+  }
+
+  public boolean isGlobal() { return true; }
+}

Added: webservices/jaxme/branches/MAVEN/jaxme-xs/src/main/java/org/apache/ws/jaxme/xs/xml/impl/XsTWildcardImpl.java
URL: http://svn.apache.org/viewvc/webservices/jaxme/branches/MAVEN/jaxme-xs/src/main/java/org/apache/ws/jaxme/xs/xml/impl/XsTWildcardImpl.java?view=auto&rev=478855
==============================================================================
--- webservices/jaxme/branches/MAVEN/jaxme-xs/src/main/java/org/apache/ws/jaxme/xs/xml/impl/XsTWildcardImpl.java (added)
+++ webservices/jaxme/branches/MAVEN/jaxme-xs/src/main/java/org/apache/ws/jaxme/xs/xml/impl/XsTWildcardImpl.java Fri Nov 24 04:14:48 2006
@@ -0,0 +1,102 @@
+/*
+ * Copyright 2003, 2004  The Apache Software Foundation
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+
+ */
+package org.apache.ws.jaxme.xs.xml.impl;
+
+import org.apache.ws.jaxme.xs.xml.*;
+import org.apache.ws.jaxme.xs.xml.XsNamespaceList.Basic;
+import org.apache.ws.jaxme.xs.xml.XsNamespaceList.Other;
+
+
+/** <p>Implementation of the <code>xs:wildcard</code> type, with the
+ * following specification:
+ * <pre>
+ *  &lt;xs:complexType name="wildcard"&gt;
+ *    &lt;xs:complexContent&gt;
+ *      &lt;xs:extension base="xs:annotated"&gt;
+ *        &lt;xs:attribute name="namespace" type="xs:namespaceList" use="optional" default="##any"/&gt;
+ *        &lt;xs:attribute name="processContents" use="optional" default="strict"
+ *          &lt;xs:simpleType&gt;
+ *            &lt;xs:restriction base="xs:NMTOKEN"&gt;
+ *              &lt;xs:enumeration value="skip"/&gt;
+ *              &lt;xs:enumeration value="lax"/&gt;
+ *              &lt;xs:enumeration value="strict"/&gt;
+ *            &lt;/xs:restriction&gt;
+ *          &lt;/xs:simpleType&gt;
+ *        &lt;/xs:attribute&gt;
+ *      &lt;/xs:extension&gt;
+ *    &lt;/xs:complexContent&gt;
+ *  &lt;/xs:complexType&gt;
+ * </pre></p>
+ *
+ * @author <a href="mailto:joe@ispsoft.de">Jochen Wiedmann</a>
+ */
+public class XsTWildcardImpl extends XsTAnnotatedImpl implements XsTWildcard {
+	private XsNamespaceList namespaceList = XsNamespaceList.ANY;
+	private ProcessContents processContents = STRICT;
+	
+	protected XsTWildcardImpl(XsObject pParent) {
+		super(pParent);
+	}
+	
+	public void setNamespace(final String pNamespaceList) {
+        if (getXsESchema().getTargetNamespace() == null) {
+            // The target can be changed, when importing this schema,
+            // thus we have to return a mutable object.
+            XsAnyURI pTargetNamespace = getXsESchema().getTargetNamespace();
+            if ("##any".equals(pNamespaceList)) {
+                namespaceList = XsNamespaceList.ANY;
+            } else if ("##other".equals(pNamespaceList)) {
+                namespaceList = new Other(pTargetNamespace){
+                    public XsAnyURI[] getUris() {
+                        XsAnyURI targetNamespace = getXsESchema().getTargetNamespace();
+                        if (targetNamespace == null) {
+                            return super.getUris();
+                        } else {
+                            return new XsAnyURI[]{targetNamespace};
+                        }
+                    }
+                };
+            } else {
+                namespaceList = new Basic(pNamespaceList, pTargetNamespace){
+                    public XsAnyURI[] getUris() {
+                        XsAnyURI targetNamespace = getXsESchema().getTargetNamespace();
+                        if (targetNamespace == null) {
+                            return super.getUris();
+                        } else {
+                            return XsNamespaceList.valueOf(pNamespaceList, targetNamespace).getUris();
+                        }
+                    }
+                };
+            };
+        } else {
+            // The target cannot be changed, so we return an immutable object.
+            namespaceList = XsNamespaceList.valueOf(pNamespaceList, getXsESchema().getTargetNamespace());
+        }
+	}
+	
+	public XsNamespaceList getNamespace() {
+		return namespaceList;
+	}
+	
+	public void setProcessContents(ProcessContents pProcessContents) {
+		processContents = pProcessContents;
+	}
+	
+	public ProcessContents getProcessContents() {
+		return processContents;
+	}
+}

Added: webservices/jaxme/branches/MAVEN/jaxme-xs/src/main/java/org/apache/ws/jaxme/xs/xml/impl/package.html
URL: http://svn.apache.org/viewvc/webservices/jaxme/branches/MAVEN/jaxme-xs/src/main/java/org/apache/ws/jaxme/xs/xml/impl/package.html?view=auto&rev=478855
==============================================================================
--- webservices/jaxme/branches/MAVEN/jaxme-xs/src/main/java/org/apache/ws/jaxme/xs/xml/impl/package.html (added)
+++ webservices/jaxme/branches/MAVEN/jaxme-xs/src/main/java/org/apache/ws/jaxme/xs/xml/impl/package.html Fri Nov 24 04:14:48 2006
@@ -0,0 +1,29 @@
+<!--
+
+ Copyright 2004 The Apache Software Foundation.
+ 
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+ 
+      http://www.apache.org/licenses/LICENSE-2.0
+ 
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+-->
+<html>
+    <head>
+        <title>
+Package Documentation for org.apache.ws.jaxme.xs.xml.impl Package
+    </title>
+</head>
+    <body bgcolor="white">
+        <p>
+Contains an implementation of the <code>JaxMeXS</code> schema object model type.
+    </p>
+</body>
+</html>

Added: webservices/jaxme/branches/MAVEN/jaxme-xs/src/main/java/org/apache/ws/jaxme/xs/xml/package.html
URL: http://svn.apache.org/viewvc/webservices/jaxme/branches/MAVEN/jaxme-xs/src/main/java/org/apache/ws/jaxme/xs/xml/package.html?view=auto&rev=478855
==============================================================================
--- webservices/jaxme/branches/MAVEN/jaxme-xs/src/main/java/org/apache/ws/jaxme/xs/xml/package.html (added)
+++ webservices/jaxme/branches/MAVEN/jaxme-xs/src/main/java/org/apache/ws/jaxme/xs/xml/package.html Fri Nov 24 04:14:48 2006
@@ -0,0 +1,31 @@
+<!--
+
+ Copyright 2004 The Apache Software Foundation.
+ 
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+ 
+      http://www.apache.org/licenses/LICENSE-2.0
+ 
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+-->
+<html>
+    <head>
+        <title>
+Package Documentation for org.apache.ws.jaxme.xs.xml Package
+    </title>
+</head>
+    <body bgcolor="white">
+        <p>
+Contains schema object model type interfaces for 
+<a href='http://ws.apache.org/jaxme/xs/'>JaxMeXS</a>: the <code>JaxMe</code> 
+parser for XML Schema.
+    </p>
+</body>
+</html>

Added: webservices/jaxme/branches/MAVEN/jaxme-xs/src/test/java/org/apache/ws/jaxme/xs/junit/ClaesLarssonTest.java
URL: http://svn.apache.org/viewvc/webservices/jaxme/branches/MAVEN/jaxme-xs/src/test/java/org/apache/ws/jaxme/xs/junit/ClaesLarssonTest.java?view=auto&rev=478855
==============================================================================
--- webservices/jaxme/branches/MAVEN/jaxme-xs/src/test/java/org/apache/ws/jaxme/xs/junit/ClaesLarssonTest.java (added)
+++ webservices/jaxme/branches/MAVEN/jaxme-xs/src/test/java/org/apache/ws/jaxme/xs/junit/ClaesLarssonTest.java Fri Nov 24 04:14:48 2006
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2003, 2004  The Apache Software Foundation
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+
+ */
+package org.apache.ws.jaxme.xs.junit;
+
+import org.apache.ws.jaxme.xs.XSComplexType;
+import org.apache.ws.jaxme.xs.XSElement;
+import org.apache.ws.jaxme.xs.XSGroup;
+import org.apache.ws.jaxme.xs.XSParticle;
+import org.apache.ws.jaxme.xs.XSSchema;
+import org.apache.ws.jaxme.xs.XSType;
+import org.apache.ws.jaxme.xs.xml.XsQName;
+
+
+/**
+ * Test for some sample schemas, supplied by Claes Larsson.
+ */
+public class ClaesLarssonTest extends XSTestCase {
+	/**
+	 * Basic test.
+	 */
+	public void testParse() throws Exception {
+		XSSchema schema = parseLogical("Claes_Larsson/schema.xsd");
+
+		// Print the names of all global elements:
+		XSElement[] elements = schema.getElements();
+		assertEquals(154, elements.length);
+
+		XSElement localTransformationElement = schema.getElement(new XsQName((String) null, "local_transformation"));
+		assertNotNull(localTransformationElement);
+		XSType localTransformationType = localTransformationElement.getType();
+		assertTrue(!localTransformationType.isSimple());
+		XSComplexType localTransformationComplexType = localTransformationType.getComplexType();
+		assertTrue(!localTransformationComplexType.hasSimpleContent());
+		XSParticle localTransformationParticle = localTransformationComplexType.getParticle();
+		XSGroup localTransformationGroup = localTransformationParticle.getGroup();
+		XSParticle[] particles = localTransformationGroup.getParticles();
+		assertEquals(0, particles[0].getMinOccurs());
+		assertEquals(1, particles[0].getMaxOccurs());
+	}
+}
\ No newline at end of file

Added: webservices/jaxme/branches/MAVEN/jaxme-xs/src/test/java/org/apache/ws/jaxme/xs/junit/DTDParserTest.java
URL: http://svn.apache.org/viewvc/webservices/jaxme/branches/MAVEN/jaxme-xs/src/test/java/org/apache/ws/jaxme/xs/junit/DTDParserTest.java?view=auto&rev=478855
==============================================================================
--- webservices/jaxme/branches/MAVEN/jaxme-xs/src/test/java/org/apache/ws/jaxme/xs/junit/DTDParserTest.java (added)
+++ webservices/jaxme/branches/MAVEN/jaxme-xs/src/test/java/org/apache/ws/jaxme/xs/junit/DTDParserTest.java Fri Nov 24 04:14:48 2006
@@ -0,0 +1,15 @@
+package org.apache.ws.jaxme.xs.junit;
+
+import org.apache.ws.jaxme.xs.util.DTDParser;
+
+
+/** A unit test for the
+ *  {@link org.apache.ws.jaxme.xs.util.DTDParser}.
+ */
+public class DTDParserTest extends XSTestCase {
+    /** Parses the file XMLSchema.dtd.
+     */
+	public void testXMLSchemaDtd() throws Exception {
+        new DTDParser().parse(asInputSource("XMLSchema.dtd"));
+    }
+}

Added: webservices/jaxme/branches/MAVEN/jaxme-xs/src/test/java/org/apache/ws/jaxme/xs/junit/DumpUtils.java
URL: http://svn.apache.org/viewvc/webservices/jaxme/branches/MAVEN/jaxme-xs/src/test/java/org/apache/ws/jaxme/xs/junit/DumpUtils.java?view=auto&rev=478855
==============================================================================
--- webservices/jaxme/branches/MAVEN/jaxme-xs/src/test/java/org/apache/ws/jaxme/xs/junit/DumpUtils.java (added)
+++ webservices/jaxme/branches/MAVEN/jaxme-xs/src/test/java/org/apache/ws/jaxme/xs/junit/DumpUtils.java Fri Nov 24 04:14:48 2006
@@ -0,0 +1,207 @@
+/*
+ * Copyright 2004  The Apache Software Foundation
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+
+ */
+package org.apache.ws.jaxme.xs.junit;
+
+import org.apache.ws.jaxme.xs.XSAttributable;
+import org.apache.ws.jaxme.xs.XSAttribute;
+import org.apache.ws.jaxme.xs.XSComplexType;
+import org.apache.ws.jaxme.xs.XSElement;
+import org.apache.ws.jaxme.xs.XSElementOrAttrRef;
+import org.apache.ws.jaxme.xs.XSGroup;
+import org.apache.ws.jaxme.xs.XSIdentityConstraint;
+import org.apache.ws.jaxme.xs.XSKeyRef;
+import org.apache.ws.jaxme.xs.XSParticle;
+import org.apache.ws.jaxme.xs.XSType;
+import org.xml.sax.SAXException;
+
+
+/** 
+ * Debug tool. Prints an XS data object to standard out.
+ *
+ * @author <a href="mailto:mrck1996@yahoo.co.uk">Chris Kirk</a>
+ */
+public class DumpUtils  {
+ private static void dumpElements( XSElement[] elements, String prefix ) 
+    throws SAXException 
+  {
+    int numElements = elements.length;
+
+    for ( int i=0; i<numElements; i++ ) {
+      dumpElement( elements[i], prefix );
+    }
+  }
+
+  private static void dumpElement( XSElement element, String prefix ) 
+    throws SAXException 
+  {
+    String indented = "  " + prefix;
+    System.out.println( 
+      prefix + "Element "+System.identityHashCode(element)
+      + ": " + element.getName() 
+    );
+
+    dumpType( element.getType(), indented );
+    dumpIdentityConstraints( element.getIdentityConstraints(), indented );
+    dumpKeyRefs( element.getKeyRefs(), indented );
+   }
+
+  private static void dumpType( XSType type, String prefix ) 
+    throws SAXException 
+  {
+    String indented = "  " + prefix;
+    System.out.print( prefix + "Type: " );
+
+    if ( type.isSimple() ) {
+      System.out.println( "simple - " + type.getName() );
+    } else {
+      System.out.println( "complex - " + type.getName() );
+
+      dumpComplexType( type.getComplexType(), indented );
+    }
+  }
+
+  private static void dumpComplexType( XSComplexType type, String prefix ) 
+    throws SAXException 
+  {
+    String indented = prefix;
+    XSAttributable[] attributables = type.getAttributes();
+    int numAttribables = attributables.length;
+
+    for ( int i=0; i<numAttribables; i++ ) {
+      dumpAttributable( attributables[i], indented );
+    }
+
+    if ( !type.isEmpty() ) {
+      dumpParticle( type.getParticle(), indented ); 
+    }
+  }
+
+  private static void dumpIdentityConstraints( 
+    XSIdentityConstraint[] constraints,
+    String prefix 
+  ) {
+    int numConstraints = constraints.length;
+
+    for ( int i=0; i<numConstraints; i++ ) {
+      dumpIdentityConstraint( constraints[i], prefix );
+    }
+  }
+
+  private static void dumpKeyRefs( XSKeyRef[] keyRefs, String prefix ) {
+    int numKeyRefs = keyRefs == null ? 0 : keyRefs.length;
+
+    for ( int i=0; i<numKeyRefs; i++ ) {
+      dumpKeyRef( keyRefs[i], prefix );
+    }
+  }
+
+  private static void dumpIdentityConstraint(
+    XSIdentityConstraint constraint,
+    String prefix
+  ) {
+    System.out.println( 
+      prefix + "constraint: " + constraint.getName() 
+      + (constraint.isUnique() ? " (unique)" : "")
+    );
+
+    dumpMatchCriteria( constraint.getMatchCriteria(), prefix + "  " );
+  }
+
+  private static void dumpKeyRef( XSKeyRef keyRef, String prefix ) {
+    System.out.println( 
+      prefix + "keyref: " + keyRef.getName() + ": refers " 
+      + keyRef.getIdentityConstraint()
+    );
+
+    dumpMatchCriteria( keyRef.getMatchCriteria(), prefix + "  " );
+  }
+
+  private static void dumpMatchCriteria( 
+    XSElementOrAttrRef[][] criteria,
+    String prefix
+  ) {
+    int numKeyParts = criteria.length;
+
+    for ( int i=0; i<numKeyParts; i++ ) {
+      XSElementOrAttrRef[] keys = criteria[i];
+
+      int numOptions = keys.length;
+      for ( int j=0; j<numOptions; j++ ) {
+        dumpElementOrAttrRef( keys[j], i + ": " );
+      }
+    }
+  }
+
+  private static void dumpElementOrAttrRef(
+    XSElementOrAttrRef ref, String prefix
+  ) {
+    if ( ref.isAttributeRef() ) {
+      System.out.println( prefix + ref.getAttribute().getName() + " (attr) " );
+    } else {
+      System.out.println( prefix + ref.getElement().getName() + " (ele) " );
+    }
+  }
+
+  private static void dumpAttributable( 
+    XSAttributable attributable, 
+    String prefix
+  ) throws SAXException {
+    if ( attributable instanceof XSAttribute ) {
+      XSAttribute attr = (XSAttribute) attributable;
+      System.out.println( 
+        prefix + "attribute " + System.identityHashCode(attr) + ": " 
+        + attr.getName() + " " 
+        + (attr.getType().isSimple() ? "simple" : "complex!!!")
+        + (attr.isOptional() ? " optional" : " required")
+      );
+    } else {
+      System.out.println( prefix + "??? attrributable " + attributable );
+    }
+  }
+
+  private static void dumpParticle( XSParticle particle, String prefix ) 
+    throws SAXException 
+  {
+    String indented = "  " + prefix;
+    System.out.print( 
+      prefix + " particle: min=" + particle.getMinOccurs()
+      + " max=" + particle.getMaxOccurs() + " particle_type=" 
+      + particle.getType()
+    );
+
+    if ( particle.isElement() ) {
+      System.out.println( " element" );
+      dumpElement( particle.getElement(), indented );
+    } else if ( particle.isGroup() ) {
+      System.out.println( " group" );
+      dumpGroup( particle.getGroup(), indented );
+    } else if ( particle.isWildcard() ) {
+      System.out.println( " wildcard" );
+    }
+  }
+
+  private static void dumpGroup( XSGroup group, String prefix ) throws SAXException {
+    String indented = "  " + prefix;
+    System.out.println( prefix + "group: name=" + group.getName() );
+
+    XSParticle[] particles = group.getParticles();
+    int numParticles = particles.length;
+    for ( int i=0; i<numParticles; i++ ) {
+      dumpParticle( particles[i], indented );
+    }
+  }
+}

Added: webservices/jaxme/branches/MAVEN/jaxme-xs/src/test/java/org/apache/ws/jaxme/xs/junit/FormatTest.java
URL: http://svn.apache.org/viewvc/webservices/jaxme/branches/MAVEN/jaxme-xs/src/test/java/org/apache/ws/jaxme/xs/junit/FormatTest.java?view=auto&rev=478855
==============================================================================
--- webservices/jaxme/branches/MAVEN/jaxme-xs/src/test/java/org/apache/ws/jaxme/xs/junit/FormatTest.java (added)
+++ webservices/jaxme/branches/MAVEN/jaxme-xs/src/test/java/org/apache/ws/jaxme/xs/junit/FormatTest.java Fri Nov 24 04:14:48 2006
@@ -0,0 +1,200 @@
+/*
+ * Copyright 2004  The Apache Software Foundation
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+
+ */
+package org.apache.ws.jaxme.xs.junit;
+
+import java.text.Format;
+import java.text.ParseException;
+import java.util.Calendar;
+import java.util.TimeZone;
+
+import org.apache.ws.jaxme.xs.util.XsDateFormat;
+import org.apache.ws.jaxme.xs.util.XsDateTimeFormat;
+import org.apache.ws.jaxme.xs.util.XsTimeFormat;
+
+import junit.framework.TestCase;
+
+/** <p>Test case for the various instances of {@link java.text.Format},
+ * which are being used to parse special types like <code>xs:dateTime</code>.</p>
+ *
+ * @author <a href="mailto:joe@ispsoft.de">Jochen Wiedmann</a>
+ */
+public class FormatTest extends TestCase {
+    /** Creates a new test with the given name.
+     */
+    public FormatTest(String pName) {
+        super(pName);
+    }
+
+    private Calendar getCalendar(TimeZone pTimeZone) {
+        Calendar cal = Calendar.getInstance(pTimeZone);
+        cal.set(2004, 01-1, 14, 03, 12, 07);
+        cal.set(Calendar.MILLISECOND, 0);
+        return cal;
+    }
+
+    /** Test for
+     * {@link org.apache.ws.jaxme.xs.util.XsDateTimeFormat#format(Object, StringBuffer, java.text.FieldPosition)}.
+     */
+    public void testFormatDateTime() {
+        Calendar cal = getCalendar(TimeZone.getTimeZone("GMT"));
+        assertEquals(0, cal.get(Calendar.MILLISECOND));
+        XsDateTimeFormat format = new XsDateTimeFormat();
+        String got = format.format(cal);
+        String expect = "2004-01-14T03:12:07Z";
+        assertEquals(expect, got);
+
+        cal = getCalendar(TimeZone.getTimeZone("GMT-03:00"));
+        assertEquals(0, cal.get(Calendar.MILLISECOND));
+        got = format.format(cal);
+        expect = "2004-01-14T03:12:07-03:00";
+        assertEquals(expect, got);
+    }
+
+    /** Test for
+     * {@link org.apache.ws.jaxme.xs.util.XsDateTimeFormat#parseObject(String, java.text.ParsePosition)}.
+     */
+    public void testParseDateTime() throws ParseException {
+        String[] dateTimes = new String[]{
+			"2004-01-14T03:12:07.000Z",
+			"2004-01-14T03:12:07",
+			"2004-01-14T03:12:07-00:00",
+			"2004-01-14T03:12:07+00:00",
+		};
+        XsDateTimeFormat format = new XsDateTimeFormat();
+        Calendar expect = getCalendar(TimeZone.getTimeZone("GMT"));
+        for (int i = 0;  i < dateTimes.length;  i++) {
+            Calendar got = (Calendar) format.parseObject(dateTimes[0]);
+            assertEquals(expect, got);
+        }
+
+        String dateTime = "2004-01-14T03:12:07.000-03:00";
+        expect = getCalendar(TimeZone.getTimeZone("GMT-03:00"));
+        Calendar got = (Calendar) format.parseObject(dateTime);
+        assertEquals(expect, got);
+    }
+
+    /** Test for
+     * {@link org.apache.ws.jaxme.xs.util.XsDateFormat#format(Object, StringBuffer, java.text.FieldPosition)}.
+     */
+    public void testFormatDate() {
+        Calendar cal = getCalendar(TimeZone.getTimeZone("GMT"));
+        assertEquals(0, cal.get(Calendar.MILLISECOND));
+        XsDateFormat format = new XsDateFormat();
+        String got = format.format(cal);
+        String expect = "2004-01-14Z";
+        assertEquals(expect, got);
+
+        cal = getCalendar(TimeZone.getTimeZone("GMT-03:00"));
+        assertEquals(0, cal.get(Calendar.MILLISECOND));
+        got = format.format(cal);
+        expect = "2004-01-14-03:00";
+        assertEquals(expect, got);
+    }
+
+    protected void assertEqualDate(Calendar pExpect, Calendar pGot) {
+        assertEquals(pExpect.get(Calendar.YEAR), pGot.get(Calendar.YEAR));
+        assertEquals(pExpect.get(Calendar.MONTH), pGot.get(Calendar.MONTH));
+        assertEquals(pExpect.get(Calendar.DAY_OF_MONTH), pGot.get(Calendar.DAY_OF_MONTH));
+        assertEquals(pExpect.getTimeZone(), pGot.getTimeZone());
+    }
+
+    protected void assertEqualTime(Calendar pExpect, Calendar pGot) {
+        assertEquals(pExpect.get(Calendar.HOUR_OF_DAY), pGot.get(Calendar.HOUR_OF_DAY));
+        assertEquals(pExpect.get(Calendar.MINUTE), pGot.get(Calendar.MINUTE));
+        assertEquals(pExpect.get(Calendar.SECOND), pGot.get(Calendar.SECOND));
+        assertEquals(pExpect.get(Calendar.MILLISECOND), pGot.get(Calendar.MILLISECOND));
+        assertEquals(pExpect.getTimeZone(), pGot.getTimeZone());
+    }
+
+    /** Test for
+     * {@link org.apache.ws.jaxme.xs.util.XsDateFormat#parseObject(String, java.text.ParsePosition)}.
+     */
+    public void testParseDate() throws ParseException {
+        String[] dateTimes = new String[]{
+			"2004-01-14Z",
+			"2004-01-14",
+			"2004-01-14+00:00",
+			"2004-01-14-00:00",
+        };
+        XsDateFormat format = new XsDateFormat();
+        Calendar expect = getCalendar(TimeZone.getTimeZone("GMT"));
+        for (int i = 0;  i < dateTimes.length;  i++) {
+            Calendar got = (Calendar) format.parseObject(dateTimes[0]);
+            assertEqualDate(expect, got);
+        }
+
+        String dateTime = "2004-01-14-03:00";
+        expect = getCalendar(TimeZone.getTimeZone("GMT-03:00"));
+        Calendar got = (Calendar) format.parseObject(dateTime);
+        assertEqualDate(expect, got);
+    }
+
+    /** Test for
+     * {@link org.apache.ws.jaxme.xs.util.XsTimeFormat#format(Object, StringBuffer, java.text.FieldPosition)}.
+     */
+    public void testFormatTime() {
+        Calendar cal = getCalendar(TimeZone.getTimeZone("GMT"));
+        assertEquals(0, cal.get(Calendar.MILLISECOND));
+        XsTimeFormat format = new XsTimeFormat();
+        String got = format.format(cal);
+        String expect = "03:12:07Z";
+        assertEquals(expect, got);
+
+        cal = getCalendar(TimeZone.getTimeZone("GMT-03:00"));
+        assertEquals(0, cal.get(Calendar.MILLISECOND));
+        got = format.format(cal);
+        expect = "03:12:07-03:00";
+        assertEquals(expect, got);
+    }
+
+    /** Test for
+     * {@link org.apache.ws.jaxme.xs.util.XsTimeFormat#parseObject(String, java.text.ParsePosition)}.
+     */
+    public void testParseTime() throws ParseException {
+        String[] dateTimes = new String[]{
+			"03:12:07.000Z",
+			"03:12:07",
+			"03:12:07-00:00",
+			"03:12:07+00:00",
+        };
+        XsTimeFormat format = new XsTimeFormat();
+        Calendar expect = getCalendar(TimeZone.getTimeZone("GMT"));
+        for (int i = 0;  i < dateTimes.length;  i++) {
+            Calendar got = (Calendar) format.parseObject(dateTimes[0]);
+            assertEqualTime(expect, got);
+        }
+
+        String dateTime = "03:12:07.000-03:00";
+        expect = getCalendar(TimeZone.getTimeZone("GMT-03:00"));
+        Calendar got = (Calendar) format.parseObject(dateTime);
+        assertEqualTime(expect, got);
+    }
+
+    /** Tests, whether e zero as suffix matters in milliseconds.
+     */
+    public void testZeroSuffix() throws Exception {
+        Format format = new XsDateTimeFormat();
+        Calendar c1 = (Calendar) format.parseObject("2006-05-03T15:29:17.15Z");
+        Calendar c2 = (Calendar) format.parseObject("2006-05-03T15:29:17.150Z");
+        assertEquals(c1, c2);
+
+        format = new XsTimeFormat();
+        c1 = (Calendar) format.parseObject("15:29:17.15Z");
+        c2 = (Calendar) format.parseObject("15:29:17.150Z");
+        assertEquals(c1, c2);
+    }
+}

Added: webservices/jaxme/branches/MAVEN/jaxme-xs/src/test/java/org/apache/ws/jaxme/xs/junit/JAXBParserTest.java
URL: http://svn.apache.org/viewvc/webservices/jaxme/branches/MAVEN/jaxme-xs/src/test/java/org/apache/ws/jaxme/xs/junit/JAXBParserTest.java?view=auto&rev=478855
==============================================================================
--- webservices/jaxme/branches/MAVEN/jaxme-xs/src/test/java/org/apache/ws/jaxme/xs/junit/JAXBParserTest.java (added)
+++ webservices/jaxme/branches/MAVEN/jaxme-xs/src/test/java/org/apache/ws/jaxme/xs/junit/JAXBParserTest.java Fri Nov 24 04:14:48 2006
@@ -0,0 +1,917 @@
+/*
+ * Copyright 2003, 2004  The Apache Software Foundation
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+
+ */
+package org.apache.ws.jaxme.xs.junit;
+
+import java.io.StringReader;
+import java.util.Iterator;
+
+import org.apache.ws.jaxme.xs.XSAttributable;
+import org.apache.ws.jaxme.xs.XSComplexType;
+import org.apache.ws.jaxme.xs.XSElement;
+import org.apache.ws.jaxme.xs.XSEnumeration;
+import org.apache.ws.jaxme.xs.XSGroup;
+import org.apache.ws.jaxme.xs.XSParticle;
+import org.apache.ws.jaxme.xs.XSSimpleType;
+import org.apache.ws.jaxme.xs.XSType;
+import org.apache.ws.jaxme.xs.jaxb.JAXBAttribute;
+import org.apache.ws.jaxme.xs.jaxb.JAXBClass;
+import org.apache.ws.jaxme.xs.jaxb.JAXBElement;
+import org.apache.ws.jaxme.xs.jaxb.JAXBEnumeration;
+import org.apache.ws.jaxme.xs.jaxb.JAXBGlobalBindings;
+import org.apache.ws.jaxme.xs.jaxb.JAXBGroup;
+import org.apache.ws.jaxme.xs.jaxb.JAXBJavaType;
+import org.apache.ws.jaxme.xs.jaxb.JAXBJavadoc;
+import org.apache.ws.jaxme.xs.jaxb.JAXBProperty;
+import org.apache.ws.jaxme.xs.jaxb.JAXBSchema;
+import org.apache.ws.jaxme.xs.jaxb.JAXBSchemaBindings;
+import org.apache.ws.jaxme.xs.jaxb.JAXBSimpleType;
+import org.apache.ws.jaxme.xs.jaxb.JAXBType;
+import org.apache.ws.jaxme.xs.jaxb.JAXBTypesafeEnumClass;
+import org.apache.ws.jaxme.xs.jaxb.JAXBTypesafeEnumMember;
+import org.apache.ws.jaxme.xs.jaxb.impl.JAXBParser;
+import org.apache.ws.jaxme.xs.types.XSDateTime;
+import org.apache.ws.jaxme.xs.types.XSNCName;
+import org.apache.ws.jaxme.xs.types.XSString;
+import org.apache.ws.jaxme.xs.xml.XsQName;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+
+/**
+ * @author <a href="mailto:joe@ispsoft.de">Jochen Wiedmann</a>
+ */
+public class JAXBParserTest extends ParserTest {
+  public void testJAXBGlobalBindingsDefaults() throws Exception {
+    // Parse a schema without globalBindings; it should have the default
+    // settings.
+    final String schemaSource =
+      "<?xml version='1.0'?>\n" +
+      "<xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema'/>\n";
+    
+    JAXBParser parser = newJAXBParser();
+    InputSource isource = new InputSource(new StringReader(schemaSource));
+    isource.setSystemId("testGlobalBindingsDefaults.xsd");
+    JAXBSchema schema = (JAXBSchema) parser.parse(isource);
+    JAXBGlobalBindings globalBindings = schema.getJAXBGlobalBindings();
+    String collectionType = globalBindings.getCollectionType();
+    assertNull(collectionType);
+    JAXBJavaType[] javaTypes = globalBindings.getJavaType();
+    assertNotNull(javaTypes);
+    assertEquals(0, javaTypes.length);
+    XsQName[] typesafeEnumBase = globalBindings.getTypesafeEnumBase();
+    assertNotNull(typesafeEnumBase);
+    assertEquals(1, typesafeEnumBase.length);
+    XsQName qName = typesafeEnumBase[0];
+    assertEquals(XSNCName.getInstance().getName(), qName);
+    boolean bindingStyleModelGroup = globalBindings.isBindingStyleModelGroup();
+    assertTrue(!bindingStyleModelGroup);
+    boolean choiceContentProperty = globalBindings.isChoiceContentProperty();
+    assertTrue(!choiceContentProperty);
+    boolean enableFailFastCheck = globalBindings.isEnableFailFastCheck();
+    assertTrue(!enableFailFastCheck);
+    boolean enableJavaNamingConventions = globalBindings.isEnableJavaNamingConventions();
+    assertTrue(enableJavaNamingConventions);
+    boolean fixedAttributeAsConstantProperty = globalBindings.isFixedAttributeAsConstantProperty();
+    assertTrue(!fixedAttributeAsConstantProperty);
+    boolean generateIsSetMethod = globalBindings.isGenerateIsSetMethod();
+    assertTrue(!generateIsSetMethod);
+    JAXBGlobalBindings.UnderscoreBinding underscoreBinding = globalBindings.getUnderscoreBinding();
+    assertEquals(JAXBGlobalBindings.UnderscoreBinding.AS_WORD_SEPARATOR, underscoreBinding);
+  }
+
+  public void testJAXBGlobalBindings() throws Exception {
+    // Parse a schema with globalBindings
+    final String schemaSource =
+      "<?xml version='1.0'?>\n" +
+      "<xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema'>\n" +
+      "  <xs:annotation>\n" +
+      "    <xs:appinfo>\n" +
+      "      <jaxb:globalBindings xmlns:jaxb='" + JAXBParser.JAXB_SCHEMA_URI + "'\n" +
+      "          collectionType='java.util.ArrayList'\n" +
+      "          typesafeEnumBase='xs:string xs:NCName'\n" +
+      "          bindingStyle='modelGroupBinding'\n" +
+      "          choiceContentProperty='true'\n" +
+      "          enableFailFastCheck='1'\n" +
+      "          enableJavaNamingConventions='false'\n" +
+      "          fixedAttributeAsConstantProperty='true'\n" +
+      "          generateIsSetMethod='1'\n" +
+      "          underscoreBinding='asCharInWord'/>\n" +
+      "    </xs:appinfo\n>" +
+      "  </xs:annotation>\n" +
+      "</xs:schema>";
+    
+    JAXBParser parser = newJAXBParser();
+    InputSource isource = new InputSource(new StringReader(schemaSource));
+    isource.setSystemId("testGlobalBindingsDefaults.xsd");
+    JAXBSchema schema = (JAXBSchema) parser.parse(isource);
+    JAXBGlobalBindings globalBindings = schema.getJAXBGlobalBindings();
+    String collectionType = globalBindings.getCollectionType();
+    assertEquals("java.util.ArrayList", collectionType);
+  
+    XsQName[] typesafeEnumBase = globalBindings.getTypesafeEnumBase();
+    assertNotNull(typesafeEnumBase);
+    assertEquals(2, typesafeEnumBase.length);
+    XsQName qName = typesafeEnumBase[0];
+    assertEquals(qName, XSString.getInstance().getName());
+    qName = typesafeEnumBase[1];
+    assertEquals(qName, XSNCName.getInstance().getName());
+  
+    boolean bindingStyleModelGroup = globalBindings.isBindingStyleModelGroup();
+    assertTrue(bindingStyleModelGroup);
+  
+    boolean choiceContentProperty = globalBindings.isChoiceContentProperty();
+    assertTrue(choiceContentProperty);
+  
+    boolean enableFailFastCheck = globalBindings.isEnableFailFastCheck();
+    assertTrue(enableFailFastCheck);
+  
+    boolean enableJavaNamingConventions = globalBindings.isEnableJavaNamingConventions();
+    assertTrue(!enableJavaNamingConventions);
+  
+    boolean fixedAttributeAsConstantProperty = globalBindings.isFixedAttributeAsConstantProperty();
+    assertTrue(fixedAttributeAsConstantProperty);
+  
+    boolean generateIsSetMethod = globalBindings.isGenerateIsSetMethod();
+    assertTrue(generateIsSetMethod);
+  
+    JAXBGlobalBindings.UnderscoreBinding underscoreBinding = globalBindings.getUnderscoreBinding();
+    assertEquals(JAXBGlobalBindings.UnderscoreBinding.AS_CHAR_IN_WORD, underscoreBinding);
+  
+    JAXBJavaType[] javaTypes = globalBindings.getJavaType();
+    assertNotNull(javaTypes);
+    assertEquals(0, javaTypes.length);
+  }
+
+  public void testJAXBSchemaBindingsDefaults() throws Exception {
+    // Parse a schema without schemaBindings; it should have the default
+    // settings.
+    final String schemaSource =
+      "<?xml version='1.0'?>\n" +
+      "<xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema'>\n" +
+      "  <xs:complexType name='a'>\n" +
+      "    <xs:sequence>\n" +
+      "      <xs:element name='b' type='xs:string'/>\n" +
+      "    </xs:sequence>\n" +
+      "  </xs:complexType>\n" +
+      "</xs:schema>";
+    
+    JAXBParser parser = newJAXBParser();
+    InputSource isource = new InputSource(new StringReader(schemaSource));
+    isource.setSystemId("testSchemaBindingsDefaults.xsd");
+    JAXBSchema schema = (JAXBSchema) parser.parse(isource);
+    JAXBType a = (JAXBType) schema.getType(new XsQName((String) null, "a"));
+    assertNotNull(a);
+    assertComplexType(a);
+  
+    JAXBSchemaBindings schemaBindings = a.getJAXBSchemaBindings();
+    JAXBSchemaBindings.NameXmlTransform[] nameXmlTransforms = schemaBindings.getNameXmlTransform();
+    assertNotNull(nameXmlTransforms);
+    assertEquals(0, nameXmlTransforms.length);
+    assertNull(schemaBindings.getPackage());
+  }
+
+  public void testJAXBSchemaBindings() throws Exception {
+    final String myPackageName = "org.apache.ws.jaxme.somepackage";
+  
+    final String schemaSource =
+      "<?xml version='1.0'?>\n" +
+      "<xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema'>\n" +
+      "  <xs:annotation>\n" +
+      "    <xs:appinfo>\n" +
+      "      <jaxb:schemaBindings xmlns:jaxb='" + JAXBParser.JAXB_SCHEMA_URI + "'>\n" +
+      "        <jaxb:package name='" + myPackageName + "'>\n" +
+      "          <jaxb:javadoc>Test documentation</jaxb:javadoc>\n" +
+      "        </jaxb:package>\n" +
+      "        <jaxb:nameXmlTransform>\n" +
+      "          <jaxb:typeName prefix='b' suffix='a'/>\n" +
+      "        </jaxb:nameXmlTransform>\n" +
+      "      </jaxb:schemaBindings>\n" +
+      "    </xs:appinfo>\n" +
+      "  </xs:annotation>\n" +
+      "  <xs:complexType name='a'>\n" +
+      "    <xs:sequence>\n" +
+      "      <xs:element name='x' type='xs:int'/>\n" +
+      "    </xs:sequence>\n" +
+      "    <xs:attribute name='y' type='xs:string'/>\n" +
+      "  </xs:complexType>\n" +
+      "  <xs:element name='b' type='a'/>\n" +
+      "</xs:schema>";
+    
+    JAXBParser parser = newJAXBParser();
+    InputSource isource = new InputSource(new StringReader(schemaSource));
+    isource.setSystemId("testSchemaBindings.xsd");
+    JAXBSchema schema = (JAXBSchema) parser.parse(isource);
+    JAXBType a = (JAXBType) schema.getType(new XsQName((String) null, "a"));
+    JAXBSchemaBindings schemaBindings = a.getJAXBSchemaBindings();
+  
+    JAXBSchemaBindings.Package schemaPackage = schemaBindings.getPackage();
+    assertNotNull(schemaPackage);
+    assertEquals(myPackageName, schemaPackage.getName());
+    JAXBJavadoc javadoc = schemaPackage.getJavadoc();
+    assertNotNull(javadoc);
+    assertEquals("Test documentation", javadoc.getText());
+  
+    JAXBSchemaBindings.NameXmlTransform[] nameXmlTransforms = schemaBindings.getNameXmlTransform();
+    assertNotNull(nameXmlTransforms);
+    assertEquals(1, nameXmlTransforms.length);
+    JAXBSchemaBindings.NameXmlTransform nameXmlTransform = nameXmlTransforms[0];
+    assertNotNull(nameXmlTransform);
+    JAXBSchemaBindings.NameTransformation transformation = nameXmlTransform.getTypeName();
+    assertEquals("a", transformation.getSuffix());
+    assertEquals("b", transformation.getPrefix());
+  }
+
+  public void testJAXBClass() throws Exception {
+    {
+      final String schemaSource =
+        "<?xml version='1.0'?>\n" +
+        "<xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema'" +
+        "           xmlns:jaxb='" + JAXBParser.JAXB_SCHEMA_URI + "'>\n" +
+        "  <xs:complexType name='a'>\n" +
+        "    <xs:annotation>\n" +
+        "      <xs:appinfo>\n" +
+        "        <jaxb:class name='b' implClass='com.b.c'/>\n" +
+        "      </xs:appinfo>\n" +
+        "    </xs:annotation>\n" +
+        "    <xs:sequence>\n" +
+        "      <xs:element name='x' type='xs:int'/>\n" +
+        "      <xs:element name='f' type='xs:string'>\n" +
+        "        <xs:annotation><xs:appinfo>\n" +
+        "            <jaxb:class name='x'/>\n" +
+        "        </xs:appinfo></xs:annotation>\n" +
+        "      </xs:element>\n" +
+        "    </xs:sequence>\n" +
+        "    <xs:attribute name='y' type='xs:string'/>\n" +
+        "  </xs:complexType>\n" +
+        "  <xs:element name='g' type='xs:string'/>\n" +
+        "  <xs:group name='m'>\n" +
+        "    <xs:annotation>\n" +
+        "      <xs:appinfo>\n" +
+        "        <jaxb:class name='k' implClass='com.b.i'/>\n" +
+        "      </xs:appinfo>\n" +
+        "    </xs:annotation>\n" +
+        "    <xs:sequence>\n" +
+        "      <xs:element name='n' type='xs:float'/>\n" +
+        "    </xs:sequence>\n" +
+        "  </xs:group>\n" +
+        "</xs:schema>";
+  
+      JAXBParser parser = newJAXBParser();
+      InputSource isource = new InputSource(new StringReader(schemaSource));
+      isource.setSystemId("testClass1.xsd");
+      JAXBSchema schema = (JAXBSchema) parser.parse(isource);
+      JAXBType a = (JAXBType) schema.getType(new XsQName((String) null, "a"));
+      assertNotNull(a);
+      JAXBClass jaxbClass = a.getJAXBClass();
+      assertNotNull(jaxbClass);
+      assertEquals("b", jaxbClass.getName());
+      assertEquals("com.b.c", jaxbClass.getImplClass());
+      XSParticle p1 = assertComplexContent(assertComplexType(a));
+      XSGroup group = assertGroup(p1);
+      XSParticle[] particles = group.getParticles();
+      assertEquals(2, particles.length);
+      JAXBElement f = (JAXBElement) assertElement(particles[1]);
+      jaxbClass = f.getJAXBClass();
+      assertNotNull(jaxbClass);
+      assertEquals("x", jaxbClass.getName());
+      assertNull(jaxbClass.getImplClass());
+
+
+      JAXBElement g = (JAXBElement) schema.getElement(new XsQName((String) null, "g"));
+      assertNotNull(g);
+      assertNull(g.getJAXBClass());
+
+      JAXBGroup m = (JAXBGroup) schema.getGroup(new XsQName((String) null, "m"));
+      jaxbClass = m.getJAXBClass();
+      assertNotNull(jaxbClass);
+      assertEquals("k", jaxbClass.getName());
+      assertEquals("com.b.i", jaxbClass.getImplClass());
+    }
+
+    {
+      final String schemaSource =
+        "<?xml version='1.0'?>\n" +
+        "<xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema'" +
+        "           xmlns:jaxb='" + JAXBParser.JAXB_SCHEMA_URI + "'>\n" +
+        "  <xs:complexType name='d'>\n" +
+        "    <xs:sequence>\n" +
+        "      <xs:element name='e'>\n" +
+        "        <xs:complexType name='a'>\n" +
+        "          <xs:annotation>\n" +
+        "            <xs:appinfo>\n" +
+        "              <jaxb:class name='b'/>\n" +
+        "            </xs:appinfo>\n" +
+        "          </xs:annotation>\n" +
+        "          <xs:sequence>\n" +
+        "            <xs:element name='x' type='xs:int'/>\n" +
+        "          </xs:sequence>\n" +
+        "          <xs:attribute name='y' type='xs:string'/>\n" +
+        "        </xs:complexType>\n" +
+        "      </xs:element>\n" +
+        "      <xs:element name='f' type='xs:string'>\n" +
+        "        <xs:annotation>\n" +
+        "          <xs:appinfo>\n" +
+        "            <jaxb:class name='x'/>\n" +
+        "          </xs:appinfo>\n" +
+        "        </xs:annotation>\n" +
+        "      </xs:element>\n" +
+        "      <xs:element name='g' type='xs:string'/>\n" +
+        "    </xs:sequence>\n" +
+        "  </xs:complexType>\n" +
+        "</xs:schema>";
+  
+      JAXBParser parser = newJAXBParser();
+      InputSource isource = new InputSource(new StringReader(schemaSource));
+      isource.setSystemId("testJAXBClass2.xsd");
+      JAXBSchema schema = (JAXBSchema) parser.parse(isource);
+      JAXBType d = (JAXBType) schema.getType(new XsQName((String) null, "d"));
+      assertNotNull(d);
+      XSGroup dGroup = assertGroup(assertComplexContent(assertComplexType(d)));
+      assertSequence(dGroup);
+      XSParticle[] particles = dGroup.getParticles();
+      assertEquals(3, particles.length);
+      JAXBElement e = (JAXBElement) assertElement(particles[0]);
+      JAXBType a = (JAXBType) e.getType();
+      JAXBClass jaxbClass = a.getJAXBClass();
+      assertNotNull(jaxbClass);
+      assertEquals("b", jaxbClass.getName());
+      assertNull(jaxbClass.getImplClass());
+
+      JAXBElement f = (JAXBElement) assertElement(particles[1]);
+      assertEquals(new XsQName((String) null, "f"), f.getName());
+      assertNotNull(f);
+      jaxbClass = f.getJAXBClass();
+      assertNotNull(jaxbClass);
+      assertEquals("x", jaxbClass.getName());
+      assertNull(jaxbClass.getImplClass());
+
+      JAXBElement g = (JAXBElement) assertElement(particles[2]);
+      assertEquals(new XsQName((String) null, "g"), g.getName());
+      assertNotNull(g);
+      assertNull(g.getJAXBClass());
+    }
+
+    {
+      final String schemaSource =
+        "<?xml version='1.0'?>\n" +
+        "<xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema'" +
+        "           xmlns:jaxb='" + JAXBParser.JAXB_SCHEMA_URI + "'>\n" +
+        "  <xs:element name='x'>\n" +
+        "    <xs:annotation><xs:appinfo>\n" +
+        "      <jaxb:class name='b' implClass='com.b.c'/>\n" +
+        "    </xs:appinfo></xs:annotation>\n" +
+        "    <xs:complexType>\n" +
+        "      <xs:sequence>\n" +
+        "        <xs:element name='e'>\n" +
+        "          <xs:complexType>\n" +
+        "            <xs:sequence>\n" +
+        "              <xs:element name='x' type='xs:int'/>\n" +
+        "            </xs:sequence>\n" +
+        "            <xs:attribute name='y' type='xs:string'/>\n" +
+        "          </xs:complexType>\n" +
+        "        </xs:element>\n" +
+        "      </xs:sequence>\n" +
+        "    </xs:complexType>\n" +
+        "  </xs:element>\n" +
+        "</xs:schema>";
+  
+      JAXBParser parser = newJAXBParser();
+      InputSource isource = new InputSource(new StringReader(schemaSource));
+      isource.setSystemId("testJAXBClass3.xsd");
+      boolean haveException = false;
+      try {
+        parser.parse(isource);
+      } catch (SAXException e) {
+        haveException = true;
+        assertTrue(e.getMessage().indexOf("[JAXB 6.7.3.4]") >= 0);
+      }
+      assertTrue(haveException);
+    }
+  }
+
+  public void testJAXBProperty1() throws Exception {
+    final String schemaSource =
+      "<?xml version='1.0'?>\n" +
+      "<xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema'" +
+      "           xmlns:jaxb='" + JAXBParser.JAXB_SCHEMA_URI + "'>\n" +
+      "  <xs:complexType name='ct'>\n" +
+      "    <xs:sequence>\n" +
+      "    </xs:sequence>\n" +
+      "    <xs:attribute name='a' type='xs:dateTime'>\n" +
+      "      <xs:annotation><xs:appinfo>\n" +
+      "        <jaxb:property name='ap' collectionType='indexed'\n" +
+      "            fixedAttributeAsConstantProperty='true'\n" +
+      "            generateIsSetMethod='false'\n" +
+      "            enableFailFastCheck='1'>\n" +
+      "          <jaxb:baseType>\n" +
+      "            <jaxb:javaType name='java.math.BigDecimal'\n" +
+      "                parseMethod='javax.xml.bind.DatatypeConverter.parseInteger'\n" +
+      "                printMethod='javax.xml.bind.DatatypeConverter.printInteger'/>\n" +
+      "          </jaxb:baseType>\n" +
+      "        </jaxb:property>\n" +
+      "      </xs:appinfo></xs:annotation>\n" +
+      "    </xs:attribute>" +
+      "  </xs:complexType>\n" +
+      "</xs:schema>\n";
+
+    JAXBParser parser = newJAXBParser();
+    InputSource isource = new InputSource(new StringReader(schemaSource));
+    isource.setSystemId("testJAXBProperty1.xsd");
+    JAXBSchema schema = (JAXBSchema) parser.parse(isource);
+    XSType type = schema.getType(new XsQName((String) null, "ct"));
+    XSComplexType complexType = assertComplexType(type);
+    XSAttributable[] attributes = complexType.getAttributes();
+    assertNotNull(attributes);
+    assertEquals(1, attributes.length);
+    JAXBAttribute a1 = (JAXBAttribute) attributes[0];
+    assertEquals(XSDateTime.getInstance(), a1.getType());
+    JAXBProperty ap1 = a1.getJAXBProperty();
+    assertNotNull(ap1);
+    assertEquals("ap", ap1.getName());
+    assertEquals("indexed", ap1.getCollectionType());
+    Boolean b = ap1.isFixedAttributeAsConstantProperty();
+    assertTrue(b != null  &&  b.booleanValue());
+    b = ap1.isGenerateIsSetMethod();
+    assertTrue(b != null  &&  !b.booleanValue());
+    b = ap1.isEnableFailFastCheck();
+    assertTrue(b != null  &&  b.booleanValue());
+    JAXBProperty.BaseType apbt1 = ap1.getBaseType();
+    assertNotNull(apbt1);
+    JAXBJavaType apjt1 = apbt1.getJavaType();
+    assertNotNull(apjt1);
+    assertEquals("java.math.BigDecimal", apjt1.getName());
+    assertEquals("javax.xml.bind.DatatypeConverter.parseInteger", apjt1.getParseMethod());
+    assertEquals("javax.xml.bind.DatatypeConverter.printInteger", apjt1.getPrintMethod());
+  }
+
+  public void testJAXBProperty2() throws Exception {
+    final String schemaSource =
+      "<?xml version='1.0'?>\n" +
+      "<xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema'" +
+      "           xmlns:jaxb='" + JAXBParser.JAXB_SCHEMA_URI + "'>\n" +
+      "  <xs:attribute name='a' type='xs:dateTime'>\n" +
+      "    <xs:annotation><xs:appinfo>\n" +
+      "      <jaxb:property name='ap' collectionType='indexed'\n" +
+      "          fixedAttributeAsConstantProperty='true'\n" +
+      "          generateIsSetMethod='false'\n" +
+      "          enableFailFastCheck='1'>\n" +
+      "        <jaxb:baseType>\n" +
+      "          <jaxb:javaType name='java.math.BigDecimal'\n" +
+      "              parseMethod='javax.xml.bind.DatatypeConverter.parseInteger'\n" +
+      "              printMethod='javax.xml.bind.DatatypeConverter.printInteger'/>\n" +
+      "        </jaxb:baseType>\n" +
+      "      </jaxb:property>\n" +
+      "    </xs:appinfo></xs:annotation>\n" +
+      "  </xs:attribute>" +
+      "</xs:schema>\n";
+
+    JAXBParser parser = newJAXBParser();
+    InputSource isource = new InputSource(new StringReader(schemaSource));
+    isource.setSystemId("testJAXBProperty2.xsd");
+    boolean haveException = false;
+    try {
+      parser.parse(isource);
+    } catch (SAXException e) {
+      haveException = true;
+      assertTrue(e.getMessage().indexOf("[JAXB 6.8.1.2.1]") >= 0);
+    }
+    assertTrue(haveException);
+  }
+
+  public void testJAXBProperty3() throws Exception {
+    final String schemaSource =
+      "<?xml version='1.0'?>\n" +
+      "<xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema'" +
+      "           xmlns:jaxb='" + JAXBParser.JAXB_SCHEMA_URI + "'>\n" +
+      "  <xs:attribute name='a' type='xs:dateTime'>\n" +
+      "    <xs:annotation><xs:appinfo>\n" +
+      "      <jaxb:property name='ap' collectionType='indexed'\n" +
+      "          fixedAttributeAsConstantProperty='true'\n" +
+      "          generateIsSetMethod='false'\n" +
+      "          enableFailFastCheck='1'>\n" +
+      "      </jaxb:property>\n" +
+      "    </xs:appinfo></xs:annotation>\n" +
+      "  </xs:attribute>" +
+      "  <xs:complexType name='ct'>\n" +
+      "    <xs:sequence>\n" +
+      "    </xs:sequence>\n" +
+      "    <xs:attribute ref='a'/>\n" +
+      "  </xs:complexType>\n" +
+      "</xs:schema>\n";
+
+    JAXBParser parser = newJAXBParser();
+    InputSource isource = new InputSource(new StringReader(schemaSource));
+    isource.setSystemId("testJAXBProperty1.xsd");
+    JAXBSchema schema = (JAXBSchema) parser.parse(isource);
+    XSAttributable[] outerAttr = schema.getAttributes();
+    assertEquals(1, outerAttr.length);
+    JAXBAttribute outerA = (JAXBAttribute) outerAttr[0];
+    
+    XSType ct = schema.getType(new XsQName((String) null, "ct"));
+    XSAttributable[] attributes = assertComplexType(ct).getAttributes();
+    assertNotNull(attributes);
+    assertEquals(1, attributes.length);
+    JAXBAttribute a1 = (JAXBAttribute) attributes[0];
+    assertEquals(XSDateTime.getInstance(), a1.getType());
+    JAXBProperty ap1 = a1.getJAXBProperty();
+    assertEquals(ap1, outerA.getJAXBProperty());
+    assertNotNull(ap1);
+    assertEquals("ap", ap1.getName());
+    assertEquals("indexed", ap1.getCollectionType());
+    Boolean b = ap1.isFixedAttributeAsConstantProperty();
+    assertTrue(b != null  &&  b.booleanValue());
+    b = ap1.isGenerateIsSetMethod();
+    assertTrue(b != null  &&  !b.booleanValue());
+    b = ap1.isEnableFailFastCheck();
+    assertTrue(b != null  &&  b.booleanValue());
+    assertNull(ap1.getBaseType());
+  }
+
+  public void testJAXBJavaType1() throws Exception {
+    final String schemaSource =
+      "<?xml version='1.0'?>\n" +
+      "<xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema'" +
+      "           xmlns:jaxb='" + JAXBParser.JAXB_SCHEMA_URI + "'>\n" +
+      "  <xs:simpleType name='a'>\n" +
+      "    <xs:annotation><xs:appinfo>\n" +
+      "      <jaxb:javaType name='java.math.BigDecimal'\n" +
+      "          hasNsContext='0'\n" +
+      "          parseMethod='javax.xml.bind.DatatypeConverter.parseInteger'\n" +
+      "          printMethod='javax.xml.bind.DatatypeConverter.printInteger'/>\n" +
+      "    </xs:appinfo></xs:annotation>\n" +
+      "    <xs:restriction base='xs:string'/>\n" +
+      "  </xs:simpleType>\n" +
+      "  <xs:element name='b'>\n" +
+      "    <xs:simpleType>\n" +
+      "      <xs:restriction base='a'/>\n" +
+      "    </xs:simpleType>\n" +
+      "  </xs:element>\n" +
+      "  <xs:element name='c'>\n" +
+      "    <xs:simpleType>\n" +
+      "    <xs:annotation><xs:appinfo>\n" +
+      "      <jaxb:javaType name='java.math.BigInteger'\n" +
+      "          hasNsContext='true'\n" +
+      "          parseMethod='javax.xml.bind.DatatypeConverter.parseInt'\n" +
+      "          printMethod='javax.xml.bind.DatatypeConverter.printInt'/>\n" +
+      "    </xs:appinfo></xs:annotation>\n" +
+      "      <xs:restriction base='a'/>\n" +
+      "    </xs:simpleType>\n" +
+      "  </xs:element>\n" +
+      "</xs:schema>\n";
+
+    JAXBParser parser = newJAXBParser();
+    InputSource isource = new InputSource(new StringReader(schemaSource));
+    isource.setSystemId("testJAXBJavaType1.xsd");
+    JAXBSchema schema = (JAXBSchema) parser.parse(isource);
+    XSType a = schema.getType(new XsQName((String) null, "a"));
+    JAXBSimpleType ast = (JAXBSimpleType) assertSimpleType(a);
+    JAXBJavaType ajjt = ast.getJAXBJavaType();
+    assertEquals("java.math.BigDecimal", ajjt.getName());
+    assertEquals("javax.xml.bind.DatatypeConverter.parseInteger", ajjt.getParseMethod());
+    assertEquals("javax.xml.bind.DatatypeConverter.printInteger", ajjt.getPrintMethod());
+    assertTrue(!ajjt.hasNsContext());
+
+    XSElement b = schema.getElement(new XsQName((String) null, "b"));
+    XSType bt = b.getType();
+    JAXBSimpleType bst = (JAXBSimpleType) assertSimpleType(bt);
+    assertEquals(a, assertRestriction(bst));
+    assertNull(bst.getJAXBJavaType());
+
+    XSElement c = schema.getElement(new XsQName((String) null, "c"));
+    XSType ct = c.getType();
+    JAXBSimpleType cst = (JAXBSimpleType) assertSimpleType(ct);
+    assertEquals(a, assertRestriction(cst));
+    JAXBJavaType cjjt = cst.getJAXBJavaType();
+    assertEquals("java.math.BigInteger", cjjt.getName());
+    assertEquals("javax.xml.bind.DatatypeConverter.parseInt", cjjt.getParseMethod());
+    assertEquals("javax.xml.bind.DatatypeConverter.printInt", cjjt.getPrintMethod());
+    assertTrue(cjjt.hasNsContext());
+  }
+
+  private void checkJAXBTypesafeEnumClass1AType(XSType pType) throws SAXException {
+    JAXBSimpleType ast = (JAXBSimpleType) assertSimpleType(pType);
+    JAXBTypesafeEnumClass aec = ast.getJAXBTypesafeEnumClass();
+    assertEquals("USStateAbbr", aec.getName());
+    assertTrue(!aec.getTypesafeEnumMember().hasNext());
+    XSEnumeration[] enumerations = ast.getEnumerations();
+    assertEquals(2, enumerations.length);
+    JAXBEnumeration e1 = (JAXBEnumeration) enumerations[0];
+    assertEquals("AK", e1.getValue());
+    JAXBTypesafeEnumMember m1 = e1.getJAXBTypesafeEnumMember();
+    assertEquals("STATE_AK", m1.getName());
+    JAXBEnumeration e2 = (JAXBEnumeration) enumerations[1];
+    JAXBTypesafeEnumMember m2 = e2.getJAXBTypesafeEnumMember();
+    assertEquals("STATE_AL", m2.getName());
+    assertEquals("AL", e2.getValue());
+  }
+
+  private void checkJAXBTypesafeEnumClass1BType(XSType pType) throws SAXException {
+    JAXBSimpleType bst = (JAXBSimpleType) assertSimpleType(pType);
+    JAXBTypesafeEnumClass bec = bst.getJAXBTypesafeEnumClass();
+    assertEquals("USStateAbbr2", bec.getName());
+    Iterator iter = bec.getTypesafeEnumMember();
+    assertTrue(iter.hasNext());
+    JAXBTypesafeEnumMember iem = (JAXBTypesafeEnumMember) iter.next();
+    assertEquals("STATE2_AK", iem.getName());
+    assertEquals("AK", iem.getValue());
+    assertTrue(iter.hasNext());
+    iem = (JAXBTypesafeEnumMember) iter.next();
+    assertEquals("STATE2_AL", iem.getName());
+    assertEquals("AL", iem.getValue());
+    assertTrue(!iter.hasNext());
+    XSEnumeration[] enumerations = bst.getEnumerations();
+    assertEquals(2, enumerations.length);
+    JAXBEnumeration be1 = (JAXBEnumeration) enumerations[0];
+    assertEquals("AK", be1.getValue());
+    assertNull(be1.getJAXBTypesafeEnumMember());
+    JAXBEnumeration be2 = (JAXBEnumeration) enumerations[1];
+    assertEquals("AL", be2.getValue());
+    assertNull(be2.getJAXBTypesafeEnumMember());
+  }
+
+  public void testJAXBTypesafeEnumClass1() throws Exception {
+    final String schemaSource =
+      "<?xml version='1.0'?>\n" +
+      "<xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema'" +
+      "           xmlns:jaxb='" + JAXBParser.JAXB_SCHEMA_URI + "'>\n" +
+      "  <xs:simpleType name='a'>\n" +
+      "    <xs:annotation><xs:appinfo>\n" +
+      "      <jaxb:typesafeEnumClass name='USStateAbbr'/>\n" +
+      "    </xs:appinfo></xs:annotation>\n" +
+      "    <xs:restriction base='xs:NCName'>\n" +
+      "      <xs:enumeration value='AK'>\n" +
+      "        <xs:annotation><xs:appinfo>\n" +
+      "          <jaxb:typesafeEnumMember name='STATE_AK'/>\n" +
+      "        </xs:appinfo></xs:annotation>\n" +
+      "      </xs:enumeration>\n" +
+      "      <xs:enumeration value='AL'>\n" +
+      "        <xs:annotation><xs:appinfo>\n" +
+      "          <jaxb:typesafeEnumMember name='STATE_AL'/>\n" +
+      "        </xs:appinfo></xs:annotation>\n" +
+      "      </xs:enumeration>\n" +
+      "    </xs:restriction>\n" +
+      "  </xs:simpleType>\n" +
+      "  <xs:simpleType name='b'>\n" +
+      "    <xs:annotation><xs:appinfo>\n" +
+      "      <jaxb:typesafeEnumClass name='USStateAbbr2'>\n" +
+      "        <jaxb:typesafeEnumMember name='STATE2_AK' value='AK'/>\n" +
+      "        <jaxb:typesafeEnumMember name='STATE2_AL' value='AL'/>\n" +
+      "      </jaxb:typesafeEnumClass>\n" +
+      "    </xs:appinfo></xs:annotation>\n" +
+      "    <xs:restriction base='xs:NCName'>\n" +
+      "      <xs:enumeration value='AK'/>\n" +
+      "      <xs:enumeration value='AL'/>\n" +
+      "    </xs:restriction>\n" +
+      "  </xs:simpleType>\n" +
+      "\n" +
+      "  <xs:element name='allTypes'>\n" +
+      "    <xs:complexType>\n" +
+      "      <xs:sequence>\n" +
+      "        <xs:element name='aElement' type='a'/>\n" +
+      "        <xs:element name='bElement' type='b'/>\n" +
+      "      </xs:sequence>\n" +
+      "    </xs:complexType>\n" +
+      "  </xs:element>\n" +
+      "</xs:schema>\n";
+
+    JAXBParser parser = newJAXBParser();
+    InputSource isource = new InputSource(new StringReader(schemaSource));
+    isource.setSystemId("testJAXBJavaTypesafeEnumClass1.xsd");
+    JAXBSchema schema = (JAXBSchema) parser.parse(isource);
+    XSType a = schema.getType(new XsQName((String) null, "a"));
+    checkJAXBTypesafeEnumClass1AType(a);
+
+    XSType b = schema.getType(new XsQName((String) null, "b"));
+    checkJAXBTypesafeEnumClass1BType(b);
+
+    XSElement[] elements = schema.getElements();
+    assertEquals(1, elements.length);
+    XSElement allTypesElement = elements[0];
+    XSGroup allTypesGroup = assertGroup(assertComplexContent(assertComplexType(allTypesElement.getType())));
+    assertSequence(allTypesGroup);
+    XSParticle[] allTypesChilds = allTypesGroup.getParticles();
+    assertEquals(2, allTypesChilds.length);
+    checkJAXBTypesafeEnumClass1AType(assertElement(allTypesChilds[0]).getType());
+    checkJAXBTypesafeEnumClass1BType(assertElement(allTypesChilds[1]).getType());    
+  }
+
+  public void testJAXBTypesafeEnumClass2() throws Exception {
+    final String schemaSource =
+      "<xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema' xml:lang='EN'\n" +
+      "    targetNamespace='http://ws.apache.org/jaxme/examples/misc/enumeration'\n" +
+      "    xmlns:ex='http://ws.apache.org/jaxme/examples/misc/enumeration'\n" +
+      "    xmlns:jaxb='http://java.sun.com/xml/ns/jaxb'\n" +
+      "    elementFormDefault='qualified'\n" +
+      "    attributeFormDefault='unqualified'>\n" +
+      "  <xs:annotation>\n" +
+      "    <xs:documentation>\n" +
+      "      Demonstration of a complex type with all sorts of enumeration values\n" +
+      "    </xs:documentation>\n" +
+      "    <xs:appinfo>\n" +
+      "      <jaxb:globalBindings typesafeEnumBase='xs:string xs:int xs:long xs:short xs:double xs:float'/>\n" +
+      "    </xs:appinfo>\n" +
+      "  </xs:annotation>\n" +
+      "\n" +
+      "  <!-- In this example the typesafeEnumMember instances are part of the\n" +
+      "       typesafeEnumClass. -->\n" +
+      "  <xs:simpleType name='StringType'>\n" +
+      "    <xs:annotation>\n" +
+      "      <xs:appinfo>\n" +
+      "        <jaxb:typesafeEnumClass name='MyStringTypeClass'>\n" +
+      "          <jaxb:typesafeEnumMember name='FOO' value='FOO'/>\n" +
+      "          <jaxb:typesafeEnumMember name='BAR' value='BAR'/>\n" +
+      "        </jaxb:typesafeEnumClass>\n" +
+      "      </xs:appinfo>\n" +
+      "    </xs:annotation>\n" +
+      "    <xs:restriction base='xs:string'>\n" +
+      "      <xs:enumeration value='FOO'/>\n" +
+      "      <xs:enumeration value='BAR'/>\n" +
+      "    </xs:restriction>\n" +
+      "  </xs:simpleType>\n" +
+      "\n" +
+      "  <!-- Here's another case: The typesafeEnumMember instances are part\n" +
+      "       of their respective values. Choose your own style. -->\n" +
+      "  <xs:simpleType name='IntType'>\n" +
+      "    <xs:annotation><xs:appinfo>\n" +
+      "      <jaxb:typesafeEnumClass name='MyIntTypeClass'/>\n" +
+      "    </xs:appinfo></xs:annotation>\n" +
+      "    <xs:restriction base='xs:int'>\n" +
+      "      <xs:enumeration value='3'>\n" +
+      "        <xs:annotation><xs:appinfo>\n" +
+      "          <jaxb:typesafeEnumMember name='INT3'/>\n" +
+      "        </xs:appinfo></xs:annotation>\n" +
+      "      </xs:enumeration>\n" +
+      "      <xs:enumeration value='0'>\n" +
+      "        <xs:annotation><xs:appinfo>\n" +
+      "          <jaxb:typesafeEnumMember name='INT0'/>\n" +
+      "        </xs:appinfo></xs:annotation>\n" +
+      "      </xs:enumeration>\n" +
+      "      <xs:enumeration value='-7'>\n" +
+      "        <xs:annotation><xs:appinfo>\n" +
+      "          <jaxb:typesafeEnumMember name='INT_7'/>\n" +
+      "        </xs:appinfo></xs:annotation>\n" +
+      "      </xs:enumeration>\n" +
+      "    </xs:restriction>\n" +
+      "  </xs:simpleType>\n" +
+      "\n" +
+      "  <!-- I personally prefer the former style, for shortness. So we\n" +
+      "       revert to this style. -->\n" +
+      "  <xs:simpleType name='LongType'>\n" +
+      "    <xs:annotation><xs:appinfo>\n" +
+      "      <jaxb:typesafeEnumClass name='MyLongTypeClass'>\n" +
+      "        <jaxb:typesafeEnumMember name='LONG_POSITIVE' value='987298379879887'/>\n" +
+      "        <jaxb:typesafeEnumMember name='LONG_ZERO' value='0'/>\n" +
+      "        <jaxb:typesafeEnumMember name='LONG_NEGATIVE' value='-23987982739273989'/>\n" +
+      "      </jaxb:typesafeEnumClass>\n" +
+      "    </xs:appinfo></xs:annotation>\n" +
+      "    <xs:restriction base='xs:long'>\n" +
+      "      <xs:enumeration value='987298379879887'/>\n" +
+      "      <xs:enumeration value='0'/>\n" +
+      "      <xs:enumeration value='-23987982739273989'/>\n" +
+      "    </xs:restriction>\n" +
+      "  </xs:simpleType>\n" +
+      "\n" +
+      "  <xs:simpleType name='ShortType'>\n" +
+      "    <xs:annotation><xs:appinfo>\n" +
+      "      <jaxb:typesafeEnumClass name='MyShortTypeClass'>\n" +
+      "        <jaxb:typesafeEnumMember name='SHORT_POSITIVE' value='3468'/>\n" +
+      "        <jaxb:typesafeEnumMember name='SHORT_ZERO' value='0'/>\n" +
+      "        <jaxb:typesafeEnumMember name='SHORT_NEGATIVE' value='-23'/>\n" +
+      "      </jaxb:typesafeEnumClass>\n" +
+      "    </xs:appinfo></xs:annotation>\n" +
+      "    <xs:restriction base='xs:short'>\n" +
+      "      <xs:enumeration value='3468'/>\n" +
+      "      <xs:enumeration value='0'/>\n" +
+      "      <xs:enumeration value='-23'/>\n" +
+      "    </xs:restriction>\n" +
+      "  </xs:simpleType>\n" +
+      "\n" +
+      "  <xs:simpleType name='DoubleType'>\n" +
+      "    <xs:annotation><xs:appinfo>\n" +
+      "      <jaxb:typesafeEnumClass name='MyDoubleTypeClass'>\n" +
+      "        <jaxb:typesafeEnumMember name='DOUBLE_POSITIVE' value='3249239847982.234'/>\n" +
+      "        <jaxb:typesafeEnumMember name='DOUBLE_ZERO' value='0'/>\n" +
+      "        <jaxb:typesafeEnumMember name='DOUBLE_NEGATIVE' value='-324234.234'/>\n" +
+      "      </jaxb:typesafeEnumClass>\n" +
+      "    </xs:appinfo></xs:annotation>\n" +
+      "    <xs:restriction base='xs:double'>\n" +
+      "      <xs:enumeration value='3249239847982.234'/>\n" +
+      "      <xs:enumeration value='0'/>\n" +
+      "      <xs:enumeration value='-324234.234'/>\n" +
+      "    </xs:restriction>\n" +
+      "  </xs:simpleType>\n" +
+      "\n" +
+      "  <xs:simpleType name='FloatType'>\n" +
+      "    <xs:annotation><xs:appinfo>\n" +
+      "      <jaxb:typesafeEnumClass name='MyFloatTypeClass'>\n" +
+      "        <jaxb:typesafeEnumMember name='FLOAT_POSITIVE' value='47982.234'/>\n" +
+      "        <jaxb:typesafeEnumMember name='FLOAT_ZERO' value='0'/>\n" +
+      "        <jaxb:typesafeEnumMember name='FLOAT_NEGATIVE' value='-24234.234'/>\n" +
+      "      </jaxb:typesafeEnumClass>\n" +
+      "    </xs:appinfo></xs:annotation>\n" +
+      "    <xs:restriction base='xs:float'>\n" +
+      "      <xs:enumeration value='47982.234'/>\n" +
+      "      <xs:enumeration value='0'/>\n" +
+      "      <xs:enumeration value='-24234.234'/>\n" +
+      "    </xs:restriction>\n" +
+      "  </xs:simpleType>\n" +
+      "\n" +
+      "  <xs:complexType name='AllSimpleTypes'>\n" +
+      "    <xs:sequence>\n" +
+      "      <xs:element name='StringElem' type='ex:StringType'/>\n" +
+      "      <xs:element name='IntElem' type='ex:IntType'/>\n" +
+      "      <xs:element name='LongElem' type='ex:LongType'/>\n" +
+      "      <xs:element name='ShortElem' type='ex:ShortType'/>\n" +
+      "      <xs:element name='DoubleElem' type='ex:DoubleType'/>\n" +
+      "      <xs:element name='FloatElem' type='ex:FloatType'/>\n" +
+      "      <xs:element name='DateTimeElem' minOccurs='0'>\n" +
+      "        <xs:simpleType>\n" +
+      "          <xs:restriction base='xs:dateTime'>\n" +
+      "            <xs:enumeration value='2002-12-17T12:23:11'/>\n" +
+      "            <xs:enumeration value='2002-12-16T12:00:11'/>\n" +
+      "          </xs:restriction>\n" +
+      "        </xs:simpleType>\n" +
+      "      </xs:element>\n" +
+      "      <xs:element name='DateElem' minOccurs='0'>\n" +
+      "        <xs:simpleType>\n" +
+      "          <xs:restriction base='xs:date'>\n" +
+      "            <xs:enumeration value='2002-12-17'/>\n" +
+      "            <xs:enumeration value='2002-12-16'/>\n" +
+      "          </xs:restriction>\n" +
+      "        </xs:simpleType>\n" +
+      "      </xs:element>\n" +
+      "      <xs:element name='TimeElem' minOccurs='0'>\n" +
+      "        <xs:simpleType>\n" +
+      "          <xs:restriction base='xs:time'>\n" +
+      "            <xs:enumeration value='12:23:11'/>\n" +
+      "            <xs:enumeration value='12:00:11'/>\n" +
+      "          </xs:restriction>\n" +
+      "        </xs:simpleType>\n" +
+      "      </xs:element>\n" +
+      "    </xs:sequence>\n" +
+      "  </xs:complexType>\n" +
+      "\n" +
+      "  <xs:element name='AllTypesElement'>\n" +
+      "    <xs:complexType>\n" +
+      "      <xs:sequence>\n" +
+      "        <xs:element type='ex:AllSimpleTypes' name='AllSimpleTypesElement'/>\n" +
+      "      </xs:sequence>\n" +
+      "    </xs:complexType>\n" +
+      "  </xs:element>\n" +
+      "</xs:schema>\n";
+
+    JAXBParser parser = newJAXBParser();
+    InputSource isource = new InputSource(new StringReader(schemaSource));
+    isource.setSystemId("testJAXBJavaTypesafeEnumClass2.xsd");
+    JAXBSchema schema = (JAXBSchema) parser.parse(isource);
+
+    XSType[] types = schema.getTypes();
+    assertEquals(7, types.length);
+
+
+    XSType stringType = types[0];
+    checkJAXBTypesafeEnumClass2StringType(stringType);
+
+    XSElement[] elements = schema.getElements();
+    assertEquals(1, elements.length);
+
+    XSElement allTypesElement = elements[0];
+    XSParticle allTypesElementParticle = assertComplexContent(assertComplexType(allTypesElement.getType()));
+    XSGroup group = allTypesElementParticle.getGroup();
+    assertSequence(group);
+    XSParticle[] allTypesElementsChilds = group.getParticles();
+    assertEquals(1, allTypesElementsChilds.length);
+    XSElement allSimpleTypesElement = assertElement(allTypesElementsChilds[0]);
+    XSParticle allSimpleTypesElementParticle = assertComplexContent(assertComplexType(allSimpleTypesElement.getType()));
+    XSGroup allSimpleTypesElementGroup = allSimpleTypesElementParticle.getGroup();
+    assertSequence(allSimpleTypesElementGroup);
+    XSParticle[] allSimpleTypesElementChilds = allSimpleTypesElementGroup.getParticles();
+    assertEquals(9, allSimpleTypesElementChilds.length);
+
+    XSElement stringTypeElement = assertElement(allSimpleTypesElementChilds[0]);
+    checkJAXBTypesafeEnumClass2StringType(stringTypeElement.getType());
+  }
+
+  private void checkJAXBTypesafeEnumClass2StringType(XSType pType) throws SAXException {
+    XSSimpleType stStringType = assertSimpleType(pType);
+    assertEquals(XSString.getInstance(), assertRestriction(stStringType));
+    assertTrue(stStringType instanceof JAXBSimpleType);
+    JAXBSimpleType jaxbStringType = (JAXBSimpleType) stStringType;
+    JAXBTypesafeEnumClass typesafeEnumClass = jaxbStringType.getJAXBTypesafeEnumClass();
+    assertNotNull(typesafeEnumClass);
+    assertEquals("MyStringTypeClass", typesafeEnumClass.getName());
+  }
+}

Added: webservices/jaxme/branches/MAVEN/jaxme-xs/src/test/java/org/apache/ws/jaxme/xs/junit/JiraTest.java
URL: http://svn.apache.org/viewvc/webservices/jaxme/branches/MAVEN/jaxme-xs/src/test/java/org/apache/ws/jaxme/xs/junit/JiraTest.java?view=auto&rev=478855
==============================================================================
--- webservices/jaxme/branches/MAVEN/jaxme-xs/src/test/java/org/apache/ws/jaxme/xs/junit/JiraTest.java (added)
+++ webservices/jaxme/branches/MAVEN/jaxme-xs/src/test/java/org/apache/ws/jaxme/xs/junit/JiraTest.java Fri Nov 24 04:14:48 2006
@@ -0,0 +1,253 @@
+package org.apache.ws.jaxme.xs.junit;
+
+import java.io.IOException;
+import java.io.StringReader;
+import java.util.Calendar;
+import java.util.TimeZone;
+
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.apache.ws.jaxme.xs.XSAttributable;
+import org.apache.ws.jaxme.xs.XSAttribute;
+import org.apache.ws.jaxme.xs.XSComplexType;
+import org.apache.ws.jaxme.xs.XSElement;
+import org.apache.ws.jaxme.xs.XSEnumeration;
+import org.apache.ws.jaxme.xs.XSParser;
+import org.apache.ws.jaxme.xs.XSParticle;
+import org.apache.ws.jaxme.xs.XSSchema;
+import org.apache.ws.jaxme.xs.XSSimpleContentType;
+import org.apache.ws.jaxme.xs.XSSimpleType;
+import org.apache.ws.jaxme.xs.XSType;
+import org.apache.ws.jaxme.xs.types.XSID;
+import org.apache.ws.jaxme.xs.types.XSString;
+import org.apache.ws.jaxme.xs.util.XsDateTimeFormat;
+import org.apache.ws.jaxme.xs.xml.XsAnyURI;
+import org.apache.ws.jaxme.xs.xml.XsQName;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+
+
+/** Collection of schemas from Jira.
+ */
+public class JiraTest extends ParserTestBase {
+    private XSSchema parse(String pSchema, String pName)
+            throws ParserConfigurationException, SAXException, IOException {
+        InputSource isource = new InputSource(new StringReader(pSchema));
+        isource.setSystemId(pName);
+        XSParser parser = new XSParser();
+        parser.setValidating(false);
+        return parser.parse(isource);
+    }
+
+    /** Test for JAXME-34 in Jira.
+     */
+    public void testJira34() throws Exception {
+    	final String schemaSpec =
+            "<xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema'>\n"
+          + "  <xs:complexType name='mixedType' mixed='true'>\n"
+          + "    <xs:attribute name='foo' type='xs:string'/>\n"
+          + "  </xs:complexType>\n"
+          + "</xs:schema>";
+        XSSchema schema = parse(schemaSpec, "jira34.xsd");
+        XSType[] types = schema.getTypes();
+        assertEquals(1, types.length);
+        XSComplexType ct = assertComplexType(types[0]);
+        assertTrue(ct.isMixed());
+    }
+
+    /** Test for JAXME-42 in Jira.
+     */
+    public void testJira42() throws Exception {
+    	XsDateTimeFormat f = new XsDateTimeFormat();
+        Calendar cal = (Calendar) f.parseObject("2004-10-15T13:00:00Z");
+        assertEquals(2004, cal.get(Calendar.YEAR));
+        assertEquals(9, cal.get(Calendar.MONTH));
+        assertEquals(15, cal.get(Calendar.DAY_OF_MONTH));
+        assertEquals(13, cal.get(Calendar.HOUR_OF_DAY));
+        assertEquals(0, cal.get(Calendar.MINUTE));
+        assertEquals(0, cal.get(Calendar.SECOND));
+        assertEquals(0, cal.get(Calendar.MILLISECOND));
+        assertEquals(TimeZone.getTimeZone("GMT"), cal.getTimeZone());
+
+        String s = f.format(cal);
+        assertEquals("2004-10-15T13:00:00Z", s);
+    }
+
+    /** Test for JAXME-44 in Jira.
+     */
+    public void testJira44() throws Exception {
+        final String schemaSpec =
+            "<xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema'>\n"
+            + "  <xs:simpleType name='threeOrFour'>\n"
+            + "    <xs:restriction base='xs:string'>\n"
+            + "      <xs:enumeration value='3'/>\n"
+            + "      <xs:enumeration value='4'/>\n"
+            + "    </xs:restriction>\n"
+            + "  </xs:simpleType>\n"
+            + "\n"
+            + "  <xs:complexType name='outerType1'>\n"
+            + "    <xs:simpleContent>\n"
+            + "      <xs:extension base='threeOrFour'>\n"
+            + "        <xs:attribute name='isOctal' type='xs:boolean'/>\n"
+            + "      </xs:extension>"
+            + "    </xs:simpleContent>\n"
+            + "  </xs:complexType>\n"
+            + "\n"
+            + "  <xs:complexType name='outerType2'>\n"
+            + "    <xs:simpleContent>\n"
+            + "      <xs:restriction base='outerType1'>\n"
+            + "        <xs:enumeration value='4'/>\n"
+            + "      </xs:restriction>\n"
+            + "    </xs:simpleContent>\n"
+            + "  </xs:complexType>\n"
+            + "</xs:schema>";
+
+        XSSchema schema = parse(schemaSpec, "jira44.xsd");
+        XSType[] types = schema.getTypes();
+        assertEquals(3, types.length);
+        XSType threeOrFourType = types[0];
+        XSSimpleType threeOrFourSimpleType = assertSimpleType(threeOrFourType);
+        XSType restrictedType = assertRestriction(threeOrFourSimpleType);
+        XSEnumeration[] threeOrFourTypeEnums = threeOrFourSimpleType.getEnumerations();
+        assertEquals(2, threeOrFourTypeEnums.length);
+        assertEquals("3", threeOrFourTypeEnums[0].getValue());
+        assertEquals("4", threeOrFourTypeEnums[1].getValue());
+        assertEquals(XSString.getInstance(), restrictedType);
+        XSType outerType1 = types[1];
+        assertEquals(new XsQName((XsAnyURI) null, "outerType1"), outerType1.getName());
+        XSComplexType outerType1complexType = assertComplexType(outerType1);
+        XSSimpleContentType outerType1simpleContentType = assertSimpleContent(outerType1complexType);
+        XSType outerType1contentType = outerType1simpleContentType.getType();
+        assertEquals(threeOrFourType, outerType1contentType);
+        XSType outerType2 = types[2];
+        assertEquals(new XsQName((XsAnyURI) null, "outerType2"), outerType2.getName());
+        XSComplexType outerType2complexType = assertComplexType(outerType2);
+        XSSimpleContentType outerType2simpleContentType = assertSimpleContent(outerType2complexType);
+        XSType outerType2contentType = outerType2simpleContentType.getType();
+        assertEquals(threeOrFourType, assertRestriction(outerType2contentType.getSimpleType()));
+        XSEnumeration[] outerType2Enums = outerType2contentType.getSimpleType().getEnumerations();
+        assertEquals(1, outerType2Enums.length);
+        assertEquals("4", outerType2Enums[0].getValue());
+    }
+
+    /** Test for JAXME-46 in Jira.
+     */
+    public void testJira46() throws Exception {
+        final String uri = "http://www.cnipa.it/schemas/2003/eGovIT/Busta1_0/";
+        final String schemaSpec =
+            "<xs:schema targetNamespace='" + uri + "'\n" +
+            "    xmlns:eGov_IT='" + uri + "'\n" +
+            "    xmlns:xs='http://www.w3.org/2001/XMLSchema'>\n" +
+            "  <xs:element name='Riferimento'>\n" +
+            "    <xs:complexType>\n" +
+            "      <xs:sequence/>\n" +
+            "      <xs:attribute ref='eGov_IT:id' use='required'/>\n" +
+            "    </xs:complexType>\n" +
+            "  </xs:element>\n" +
+            "  <xs:attribute name='id' type='xs:ID'/>\n" +
+            "</xs:schema>\n";
+        XSSchema schema = parse(schemaSpec, "jira46.xsd");
+        XSAttribute[] attrs = schema.getAttributes();
+        assertEquals(1, attrs.length);
+        XSAttribute idAttr = attrs[0];
+        assertEquals(new XsQName(uri, "id"), idAttr.getName());
+        assertEquals(XSID.getInstance(), idAttr.getType());
+        assertTrue(idAttr.isOptional());
+        XSElement[] elements = schema.getElements();
+        assertEquals(1, elements.length);
+        XSElement rifElem = elements[0];
+        XSComplexType ct = assertComplexType(rifElem.getType());
+        XSAttributable[] rifAttrs = ct.getAttributes();
+        assertEquals(1, rifAttrs.length);
+        XSAttribute idRef = (XSAttribute) rifAttrs[0];
+        assertFalse(idRef.equals(idAttr));
+        assertEquals(new XsQName(uri, "id"), idAttr.getName());
+        assertEquals(XSID.getInstance(), idAttr.getType());
+        assertFalse(idRef.isOptional());
+    }
+
+	/** Test for <a href="http://issues.apache.org/jira/browse/JAXME-63">JAXME-63</a>.
+	 */
+	public void testJAXME63() throws Exception {
+		final String xml =
+			"<xs:schema\n"
+			+ "    xmlns:xs='http://www.w3.org/2001/XMLSchema'\n"
+			+ "    elementFormDefault='qualified'>\n"
+			+ "  <xs:group name='params'>\n"
+			+ "    <xs:choice>\n"
+			+ "      <xs:element name='string' type='xs:string'/>\n"
+			+ "      <xs:element name='int' type='xs:int'/>\n"
+			+ "      <xs:element name='boolean' type='xs:boolean'/>\n"
+			+ "    </xs:choice>\n"
+			+ "  </xs:group>\n"
+			+ "  <xs:element name='call'>\n"
+			+ "    <xs:complexType>\n"
+			+ "      <xs:group ref='params' maxOccurs='unbounded'/>\n"
+			+ "    </xs:complexType>\n"
+			+ "  </xs:element>\n"
+			+ "</xs:schema>";
+        XSSchema schema = parse(xml, "jaxme63.xsd");
+        XSElement[] elements = schema.getElements();
+        assertEquals(1, elements.length);
+        XSElement call = elements[0];
+        assertEquals(new XsQName((String) null, "call"), call.getName());
+        XSComplexType type = assertComplexType(call.getType());
+        XSParticle particle = assertComplexContent(type);
+        assertTrue(particle.isGroup());
+        assertChoice(particle.getGroup());
+        assertEquals(1, particle.getMinOccurs());
+        assertEquals(-1, particle.getMaxOccurs());
+	}
+
+    /** Test for <a href="http://issues.apache.org/jira/browse/JAXME-84">JAXME-84</a>.
+     */
+    public void testJAXME84() throws Exception {
+        final String xml =
+            "<xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema' targetNamespace='http://namespaces.softwareag.com/de/s/xDWS/soap-api'\n"
+            + "    xmlns:xdws='http://namespaces.softwareag.com/de/s/xDWS/soap-api' elementFormDefault='qualified'\n"
+            + "    attributeFormDefault='unqualified'>\n"
+            + "  <xs:complexType name='xdwsResultInfo'>\n"
+            + "    <xs:attribute name='rc' type='xs:int' use='required'/>\n"
+            + "    <xs:attribute name='message' type='xs:string' use='optional'/>\n"
+            + "    <xs:attribute name='details' type='xs:string' use='optional'/>\n"
+            + "  </xs:complexType>\n"
+            + "  <xs:element name='xdwsResponse'>\n"
+            + "    <xs:complexType>\n"
+            + "      <xs:sequence>\n"
+            + "        <xs:element name='response' minOccurs='0' maxOccurs='unbounded'>\n"
+            + "          <xs:complexType>\n"
+            + "            <xs:complexContent>\n"
+            + "              <xs:extension base='xdws:xdwsResultInfo'>\n"
+            + "                <xs:choice minOccurs='0'>\n"
+            + "                  <xs:element name='a' type='xs:string'/>\n"
+            + "                  <xs:element name='b' type='xs:string'/>\n"
+            + "                </xs:choice>\n"
+            + "              </xs:extension>\n"
+            + "            </xs:complexContent>\n"
+            + "          </xs:complexType>\n"
+            + "        </xs:element>\n"
+            + "        <xs:element name='result' type='xdws:xdwsResultInfo'/>\n"
+            + "      </xs:sequence>\n"
+            + "      <xs:attribute name='version' type='xs:int' use='required' />\n"
+            + "    </xs:complexType>\n"
+            + "  </xs:element>\n"
+            + "</xs:schema>\n";
+        XSSchema schema = parse(xml, "jaxme84.xsd");
+        XSElement[] elements = schema.getElements();
+        assertEquals(1, elements.length);
+        XSElement xdwsResponseElement = elements[0];
+        XSParticle[] xdwsResponseParticles = assertGroup(assertComplexContent(assertComplexType(xdwsResponseElement.getType()))).getParticles();
+        assertEquals(2, xdwsResponseParticles.length);
+        XSElement responseElement = assertElement(xdwsResponseParticles[0]);
+        XSComplexType responseType = assertComplexType(responseElement.getType());
+        XSParticle particle = responseType.getParticle();
+        assertEquals(0, particle.getMinOccurs());
+        assertEquals(1, particle.getMaxOccurs());
+        XSParticle[] particles = assertGroup(particle).getParticles();
+        assertEquals(2, particles.length);
+        XSElement a = assertElement(particles[0]);
+        assertEquals(new XsQName("http://namespaces.softwareag.com/de/s/xDWS/soap-api", "a"), a.getName());
+        XSElement b = assertElement(particles[1]);
+        assertEquals(new XsQName("http://namespaces.softwareag.com/de/s/xDWS/soap-api", "b"), b.getName());
+    }
+}



---------------------------------------------------------------------
To unsubscribe, e-mail: jaxme-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: jaxme-dev-help@ws.apache.org