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>
+ * <xs:complexType name="wildcard">
+ * <xs:complexContent>
+ * <xs:extension base="xs:annotated">
+ * <xs:attribute name="namespace" type="xs:namespaceList" use="optional" default="##any"/>
+ * <xs:attribute name="processContents" use="optional" default="strict"
+ * <xs:simpleType>
+ * <xs:restriction base="xs:NMTOKEN">
+ * <xs:enumeration value="skip"/>
+ * <xs:enumeration value="lax"/>
+ * <xs:enumeration value="strict"/>
+ * </xs:restriction>
+ * </xs:simpleType>
+ * </xs:attribute>
+ * </xs:extension>
+ * </xs:complexContent>
+ * </xs:complexType>
+ * </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