[prev in list] [next in list] [prev in thread] [next in thread] 

List:       jaxme-dev
Subject:    svn commit: r478855 [16/21] - in /webservices/jaxme/branches/MAVEN/jaxme-xs:
From:       jochen () apache ! org
Date:       2006-11-24 12:15:06
Message-ID: 20061124121521.B91861A9876 () eris ! apache ! org
[Download RAW message or body]

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/j \
ava/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


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic