src/share/jaxws_classes/com/sun/tools/internal/xjc/model/CTypeRef.java
Print this page
@@ -23,19 +23,21 @@
* questions.
*/
package com.sun.tools.internal.xjc.model;
+import javax.xml.XMLConstants;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import javax.xml.namespace.QName;
import com.sun.tools.internal.xjc.model.nav.NClass;
import com.sun.tools.internal.xjc.model.nav.NType;
import com.sun.tools.internal.xjc.reader.xmlschema.BGMBuilder;
import com.sun.xml.internal.bind.v2.model.core.PropertyInfo;
import com.sun.xml.internal.bind.v2.model.core.TypeRef;
import com.sun.xml.internal.bind.v2.runtime.RuntimeUtil;
+import com.sun.xml.internal.xsom.XSType;
import com.sun.xml.internal.xsom.XmlString;
import com.sun.xml.internal.xsom.XSElementDecl;
import com.sun.istack.internal.Nullable;
/**
@@ -72,15 +74,38 @@
public QName getTypeName() {
return typeName;
}
public static QName getSimpleTypeName(XSElementDecl decl) {
- if(decl==null) return null;
- QName typeName = null;
- if(decl.getType().isSimpleType())
- typeName = BGMBuilder.getName(decl.getType());
- return typeName;
+ if(decl==null || !decl.getType().isSimpleType())
+ return null; // null if not simple type
+ return resolveSimpleTypeName(decl.getType());
+ }
+
+ /**
+ * Recursively search for type name.
+ *
+ * This is needed to find correct type for refs like:
+ *
+ *<xs:simpleType name="parent">
+ * <xs:restriction base="xs:date"/>
+ *</xs:simpleType>
+ *<xs:simpleType name="child">
+ * <xs:restriction base="parent"/>
+ *</xs:simpleType>
+ *
+ *<xs:element name="testField" type="child"/>
+ *
+ * @param declType given type
+ * @return simpleTypeName or null
+ */
+ private static QName resolveSimpleTypeName(XSType declType) {
+ QName name = BGMBuilder.getName(declType);
+ if (name != null && !XMLConstants.W3C_XML_SCHEMA_NS_URI.equals(name.getNamespaceURI()))
+ return resolveSimpleTypeName(declType.getBaseType());
+ else
+ return name;
}
public CTypeRef(CNonElement type, QName elementName, QName typeName, boolean nillable, XmlString defaultValue) {
assert type!=null;
assert elementName!=null;