bug 346989 - add jaxb bindings schema
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.core/build.properties b/jaxb/plugins/org.eclipse.jpt.jaxb.core/build.properties
index 30afd4a..5d3012c 100644
--- a/jaxb/plugins/org.eclipse.jpt.jaxb.core/build.properties
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.core/build.properties
@@ -14,6 +14,8 @@
                META-INF/,\
                about.html,\
                plugin.xml,\
-               plugin.properties
+               plugin.properties,\
+               schemas/
 jars.compile.order = .
-src.includes = schema/
+src.includes = schema/,\
+			   schemas/
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.core/plugin.xml b/jaxb/plugins/org.eclipse.jpt.jaxb.core/plugin.xml
index 6be37f5..ec47f92 100644
--- a/jaxb/plugins/org.eclipse.jpt.jaxb.core/plugin.xml
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.core/plugin.xml
@@ -352,5 +352,16 @@
 		</validator>
 		
 	</extension>
+	
+	
+	<extension point="org.eclipse.wst.xml.core.catalogContributions">
+		
+		<catalogContribution id="default">
+			<uri
+				name="http://java.sun.com/xml/ns/jaxb/bindingschema_2_0.xsd"
+				uri="schemas/bindingschema_2_0.xsd"/>
+		</catalogContribution>
+		
+	</extension>
 		
 </plugin>
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.core/schemas/bindingschema_2_0.xsd b/jaxb/plugins/org.eclipse.jpt.jaxb.core/schemas/bindingschema_2_0.xsd
new file mode 100644
index 0000000..f9a884c
--- /dev/null
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.core/schemas/bindingschema_2_0.xsd
@@ -0,0 +1,362 @@
+<?xml version = "1.0" encoding = "UTF-8"?>

+<xs:schema

+   targetNamespace = "http://java.sun.com/xml/ns/jaxb"

+   xmlns:jaxb = "http://java.sun.com/xml/ns/jaxb"

+   xmlns:xs = "http://www.w3.org/2001/XMLSchema"

+   elementFormDefault = "qualified"

+   attributeFormDefault = "unqualified">

+  <xs:annotation><xs:documentation>

+  Schema for JAXB 2.0 binding declarations.

+  </xs:documentation></xs:annotation>

+  <xs:group name = "declaration">

+    <xs:annotation><xs:documentation>

+Model group that represents a binding declaration. Each new binding

+declaration added to the jaxb namespace that is not restricted to 

+globalBindings should be added as a child element to this model group.

+    </xs:documentation></xs:annotation>

+    <!-- each new binding declaration, not restricted to

+           globalBindings, should be added here -->

+    <xs:choice>

+      <xs:element ref = "jaxb:globalBindings"/>

+      <xs:element ref = "jaxb:schemaBindings"/>

+      <xs:element ref = "jaxb:class"/>

+      <xs:element ref = "jaxb:property"/>

+      <xs:element ref = "jaxb:typesafeEnumClass"/>

+      <xs:element ref = "jaxb:typesafeEnumMember"/>

+      <xs:element ref = "jaxb:javaType"/>

+      <xs:element ref = "jaxb:dom"/>

+      <xs:element ref = "jaxb:inlineBinaryData"/>

+      <xs:any namespace = "##other" processContents = "lax"/>

+    </xs:choice>

+  </xs:group>

+  <xs:attribute name = "version" type="xs:token" >

+    <xs:annotation><xs:documentation>

+Used to specify the version of the binding schema on the schema element for 

+inline annotations or jaxb:bindings for external binding.

+    </xs:documentation></xs:annotation>

+  </xs:attribute>

+  <xs:attributeGroup name = "propertyAttributes">

+      <xs:annotation><xs:documentation>

+Attributes used for property customization. The attribute group can be 

+referenced either from the globalBindings declaration or from the 

+property declaration. The following defaults are defined by the JAXB

+specification in global scope only. Thus they apply when the 

+propertyAttributes group is referenced from the globalBindings declaration 

+but not when referenced from the property declaration.

+          collectionType            a class that implements java.util.List.

+          fixedAttributeAsConstantProperty  false

+          enableFailFastCheck        false

+          generateIsSetMethod        false

+	  optionalProperty           wrapper

+	  generateElementProperty    false

+          attachmentRef              default

+      </xs:documentation></xs:annotation>

+    <xs:attribute name = "collectionType" type="jaxb:referenceCollectionType"/>

+    <xs:attribute name = "fixedAttributeAsConstantProperty" type = "xs:boolean"/>

+    <xs:attribute name = "enableFailFastCheck" type = "xs:boolean"/>

+    <xs:attribute name = "generateIsSetMethod" type = "xs:boolean"/>

+    <xs:attribute name = "optionalProperty">

+	<xs:simpleType>

+	    <xs:restriction base="xs:NCName">

+		<xs:enumeration value="wrapper"/>

+		<xs:enumeration value="primitive"/>

+		<xs:enumeration value="isSet"/>

+	    </xs:restriction>

+	</xs:simpleType>

+    </xs:attribute>

+    <xs:attribute name = "generateElementProperty" type="xs:boolean"/>

+    <xs:attribute name = "attachmentRef">

+      <xs:simpleType>

+        <xs:restriction base="xs:NCName">

+	  <xs:enumeration value="resolve"/>

+	  <xs:enumeration value="doNotResolve"/>

+	  <xs:enumeration value="default"/>

+        </xs:restriction>

+      </xs:simpleType>

+   </xs:attribute>

+  </xs:attributeGroup>

+  <xs:attributeGroup name = "XMLNameToJavaIdMappingDefaults">

+    <xs:annotation><xs:documentation>Customize XMLNames to Java id mapping 

+    </xs:documentation></xs:annotation>

+    <xs:attribute name = "underscoreBinding" default = "asWordSeparator" type = "jaxb:underscoreBindingType"/>

+  </xs:attributeGroup>

+  <xs:attributeGroup name = "typesafeEnumClassDefaults">

+    <xs:attribute name = "typesafeEnumMemberName" default = "skipGeneration" type = "jaxb:typesafeEnumMemberNameType"/>

+    <xs:attribute name = "typesafeEnumBase" default = "xs:string" type = "jaxb:typesafeEnumBaseType"/>

+    <xs:attribute name = "typesafeEnumMaxMembers" type="xs:int" default="256"/>

+  </xs:attributeGroup>

+  <xs:element name = "globalBindings">

+      <xs:annotation><xs:documentation>Customization values defined in global scope.</xs:documentation></xs:annotation>

+    <xs:complexType>

+      <xs:sequence minOccurs = "0">

+        <xs:element ref = "jaxb:javaType" minOccurs = "0" maxOccurs = "unbounded"/>

+        <xs:element ref = "jaxb:serializable" minOccurs = "0"/>

+        <xs:any namespace = "##other" processContents = "lax">

+          <xs:annotation> <xs:documentation>allows extension binding declarations to be specified.</xs:documentation></xs:annotation>

+        </xs:any>

+      </xs:sequence>

+      <xs:attributeGroup ref = "jaxb:XMLNameToJavaIdMappingDefaults"/>

+      <xs:attributeGroup ref = "jaxb:typesafeEnumClassDefaults"/>

+      <xs:attributeGroup ref = "jaxb:propertyAttributes"/>

+      <xs:attribute name="generateValueClass" type="xs:boolean" 	

+		    default= "true"/>

+      <xs:attribute name="generateElementClass" type="xs:boolean" 	

+		    default= "false"/>

+      <xs:attribute name="mapSimpleTypeDef" type="xs:boolean" 	

+		    default= "false"/>

+      <xs:attribute name="localScoping" default= "nested">

+	<xs:simpleType>

+	   <xs:restriction base="xs:NCName">

+  		<xs:enumeration value="nested"/>

+		<xs:enumeration value="toplevel"/>

+           </xs:restriction>

+        </xs:simpleType>

+      </xs:attribute>

+      <xs:attribute name = "enableJavaNamingConventions" default = "true" type = "xs:boolean"/>

+<!--  Removed from JAXB 2.0

+      <xs:attribute name = "bindingStyle" default = "elementBinding" type = "jaxb:bindingStyleType"/>

+-->

+      <xs:attribute name = "choiceContentProperty" default = "false" type = "xs:boolean"/>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name = "schemaBindings">

+    <xs:annotation><xs:documentation>Customization values with schema scope</xs:documentation></xs:annotation>

+    <xs:complexType>

+      <xs:all>

+        <xs:element name = "package" type = "jaxb:packageType" minOccurs = "0"/>

+        <xs:element name = "nameXmlTransform" type = "jaxb:nameXmlTransformType" minOccurs = "0"/>

+      </xs:all>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name = "class">

+    <xs:annotation><xs:documentation>Customize interface and implementation class.</xs:documentation></xs:annotation>

+    <xs:complexType>

+      <xs:sequence>

+        <xs:element name = "javadoc" type = "xs:string" minOccurs = "0"/>

+      </xs:sequence>

+      <xs:attribute name = "name" type = "jaxb:javaIdentifierType">

+        <xs:annotation><xs:documentation>Java class name without package prefix.</xs:documentation></xs:annotation>

+      </xs:attribute>

+      <xs:attribute name = "implClass" type = "jaxb:javaIdentifierType">

+        <xs:annotation><xs:documentation>Implementation class name including package prefix.</xs:documentation></xs:annotation>

+      </xs:attribute>

+      <xs:attribute name="generateValueClass" type="xs:boolean">

+        <xs:annotation><xs:documentation>Default value derived from [jaxb:globalBindings]@generateValueClass.</xs:documentation></xs:annotation>

+      </xs:attribute>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name = "property">

+      <xs:annotation><xs:documentation>Customize property.</xs:documentation></xs:annotation>

+    <xs:complexType>

+      <xs:all>

+        <xs:element name = "javadoc" type = "xs:string" minOccurs="0"/>

+        <xs:element name = "baseType" type="jaxb:propertyBaseType" minOccurs="0"/>

+      </xs:all>

+      <xs:attribute name = "name" type = "jaxb:javaIdentifierType"/>

+      <xs:attributeGroup ref = "jaxb:propertyAttributes"/>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name = "javaType">

+    <xs:annotation><xs:documentation>Data type conversions; overriding builtins</xs:documentation></xs:annotation>

+    <xs:complexType>

+      <xs:attribute name = "name" use = "required" type = "jaxb:javaIdentifierType">

+        <xs:annotation><xs:documentation>name of the java type to which xml type is to be bound.</xs:documentation></xs:annotation>

+      </xs:attribute>

+      <xs:attribute name = "xmlType" type = "xs:QName">

+        <xs:annotation><xs:documentation> xml type to which java datatype has to be bound.Must be present when javaType is scoped to globalBindings</xs:documentation></xs:annotation>

+      </xs:attribute>

+      <xs:attribute name = "parseMethod" type = "jaxb:javaIdentifierType"/>

+      <xs:attribute name = "printMethod" type = "jaxb:javaIdentifierType"/>

+      <xs:attribute name = "hasNsContext" default = "false" type = "xs:boolean" >

+        <xs:annotation><xs:documentation>

+If true, the parsMethod and printMethod must reference a method

+signtature that has a second parameter of type NamespaceContext.

+        </xs:documentation></xs:annotation>

+      </xs:attribute>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name = "typesafeEnumClass">

+    <xs:annotation><xs:documentation> Bind to a type safe enumeration class.</xs:documentation></xs:annotation>

+    <xs:complexType>

+      <xs:sequence>

+        <xs:element name = "javadoc" type = "xs:string" minOccurs = "0"/>

+        <xs:element ref = "jaxb:typesafeEnumMember" minOccurs = "0" maxOccurs = "unbounded"/>

+      </xs:sequence>

+      <xs:attribute name = "name" type = "jaxb:javaIdentifierType"/>

+      <xs:attribute name = "map" type = "xs:boolean" default = "true"/>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name = "typesafeEnumMember">

+    <xs:annotation><xs:documentation> Enumeration member name in a type safe enumeration class.</xs:documentation></xs:annotation>

+    <xs:complexType>

+      <xs:sequence>

+        <xs:element name = "javadoc" type = "xs:string" minOccurs = "0"/>

+      </xs:sequence>

+      <xs:attribute name = "value" type="xs:anySimpleType"/>

+      <xs:attribute name = "name" use = "required" type = "jaxb:javaIdentifierType"/>

+    </xs:complexType>

+  </xs:element>

+  

+  <!-- TYPE DEFINITIONS -->

+

+  <xs:complexType name = "propertyBaseType">

+    <xs:all>

+      <xs:element ref = "jaxb:javaType" minOccurs = "0"/>

+    </xs:all>

+      <xs:attribute name = "name" type = "jaxb:javaIdentifierType">

+        <xs:annotation><xs:documentation>

+The name attribute for [baseType] enables more precise control over the actual base type for a JAXB property. This customization enables specifying a more general base type than the property's default base type. The name attribute value must be a fully qualified Java class name. Additionally, this Java class must be a super interface/class of the default Java base type for the property. When the default base type is a primitive type, consider the default Java base type to be the Java wrapper class of that primitive type.This customization is useful to enable simple type substitution for a JAXB property representing with too restrictive of a default base type.

+        </xs:documentation></xs:annotation>

+      </xs:attribute>

+  </xs:complexType>

+

+<!-- Removed in JAXB 2.0. modelGroupBinding no longer exists.

+    <xs:simpleType name = "bindingStyleType">

+    <xs:annotation><xs:documentation>Allows selection of a binding algorithm</xs:documentation></xs:annotation>

+    <xs:restriction base = "xs:string">

+      <xs:enumeration value = "elementBinding"/>

+      <xs:enumeration value = "modelGroupBinding"/>

+    </xs:restriction>

+  </xs:simpleType>

+-->

+  

+  <xs:complexType name = "packageType">

+    <xs:sequence>

+      <xs:element name = "javadoc" type = "xs:string" minOccurs = "0"/>

+    </xs:sequence>

+    <xs:attribute name = "name" type = "jaxb:javaIdentifierType"/>

+  </xs:complexType>

+  <xs:simpleType name = "underscoreBindingType">

+    <xs:annotation><xs:documentation>Treate underscore  in XML Name to Java identifier mapping.</xs:documentation></xs:annotation>

+    <xs:restriction base = "xs:string">

+      <xs:enumeration value = "asWordSeparator"/>

+      <xs:enumeration value = "asCharInWord"/>

+    </xs:restriction>

+  </xs:simpleType>

+  <xs:simpleType name = "typesafeEnumBaseType">

+    <xs:annotation><xs:documentation> 

+XML types or types derived from them which have enumeration facet(s) which are be mapped to typesafeEnumClass by default. The following types cannot be specified in this list: "xsd:QName", "xsd:base64Binary", "xsd:hexBinary", "xsd:date", "xsd:time", "xsd:dateTime", "xsd:duration","xsd:gDay", "xsd:gMonth", "xsd:Year", "xsd:gMonthDay", "xsd:YearMonth", "xsd:ID", "xsd:IDREF", "xsd:NOTATION"

+      </xs:documentation></xs:annotation>

+    <xs:list itemType = "xs:QName"/>

+  </xs:simpleType>

+  <xs:simpleType name = "typesafeEnumMemberNameType">

+    <xs:annotation><xs:documentation>Used to customize how to handle name collisions.</xs:documentation></xs:annotation>

+    <xs:restriction base = "xs:string">

+      <xs:enumeration value = "generateName"/>

+      <xs:enumeration value = "generateError"/>

+      <xs:enumeration value = "skipGeneration"/>

+    </xs:restriction>

+  </xs:simpleType>

+  <xs:simpleType name = "javaIdentifierType">

+    <xs:annotation><xs:documentation>Placeholder type to indicate Legal Java identifier.</xs:documentation></xs:annotation>

+    <xs:list itemType = "xs:NCName"/>

+  </xs:simpleType>

+  <xs:complexType name = "nameXmlTransformRule">

+    <xs:annotation><xs:documentation>Rule to transform an Xml name into another Xml name</xs:documentation></xs:annotation>

+    <xs:attribute name = "prefix" type = "xs:string">

+      <xs:annotation><xs:documentation>prepend the string to QName.</xs:documentation></xs:annotation>

+    </xs:attribute>

+    <xs:attribute name = "suffix" type = "xs:string">

+      <xs:annotation><xs:documentation>Append the string to QName.</xs:documentation></xs:annotation>

+    </xs:attribute>

+  </xs:complexType>

+  <xs:complexType name = "nameXmlTransformType">

+    <xs:annotation><xs:documentation>Allows transforming an xml name into another xml name. Use case UDDI 2.0 schema.</xs:documentation></xs:annotation>

+    <xs:all>

+      <xs:element name = "typeName" type = "jaxb:nameXmlTransformRule" minOccurs = "0">

+        <xs:annotation><xs:documentation>Mapping rule for type definitions.</xs:documentation></xs:annotation>

+      </xs:element>

+      <xs:element name = "elementName" type = "jaxb:nameXmlTransformRule" minOccurs = "0">

+        <xs:annotation><xs:documentation>Mapping rule for elements</xs:documentation></xs:annotation>

+      </xs:element>

+      <xs:element name = "modelGroupName" type = "jaxb:nameXmlTransformRule" minOccurs = "0">

+        <xs:annotation><xs:documentation>Mapping rule  for model group</xs:documentation></xs:annotation>

+      </xs:element>

+      <xs:element name = "anonymousTypeName" type = "jaxb:nameXmlTransformRule" minOccurs = "0">

+        <xs:annotation><xs:documentation>Mapping rule for class names generated for an anonymous type.</xs:documentation></xs:annotation>

+      </xs:element>

+    </xs:all>

+  </xs:complexType>

+  <xs:attribute name = "extensionBindingPrefixes">

+    <xs:annotation><xs:documentation>

+A binding compiler only processes this attribute when it occurs on an

+an instance of xs:schema element.  The value of this attribute is a

+whitespace-separated list of namespace prefixes.  The namespace bound

+to each of the prefixes is designated as a customization declaration

+namespace.</xs:documentation></xs:annotation>

+    <xs:simpleType>

+      <xs:list itemType = "xs:normalizedString"/>

+    </xs:simpleType>

+  </xs:attribute>

+  <xs:element name = "bindings">

+    <xs:annotation><xs:documentation>

+Binding declaration(s) for a remote schema.

+If attribute node is set, the binding declaraions

+are associated with part of the remote schema

+designated by schemaLocation attribute. The node

+attribute identifies the node in the remote schema

+to associate the binding declaration(s) with.

+      </xs:documentation></xs:annotation>

+    <!-- a <bindings> element can contain arbitrary number of binding declarations or nested <bindings> elements -->

+    <xs:complexType>

+      <xs:sequence>

+        <xs:choice minOccurs = "0" maxOccurs = "unbounded">

+          <xs:group ref = "jaxb:declaration"/>

+          <xs:element ref = "jaxb:bindings"/>

+        </xs:choice>

+      </xs:sequence>

+      <xs:attribute name = "schemaLocation" type = "xs:anyURI">

+        <xs:annotation><xs:documentation>

+Location of the remote schema to associate binding declarations with.

+        </xs:documentation></xs:annotation>

+      </xs:attribute>

+      <xs:attribute name = "node" type = "xs:string">

+        <xs:annotation><xs:documentation>

+The value of the string is an XPATH 1.0 compliant string that

+resolves to a node in a remote schema to associate

+binding declarations with. The remote schema is specified

+by the schemaLocation attribute occuring in the current

+element or in a parent of this element.

+        </xs:documentation></xs:annotation>

+      </xs:attribute>

+      <xs:attribute name = "version" type = "xs:token">

+        <xs:annotation><xs:documentation>

+Used to indicate the version of binding declarations. Only valid on root level bindings element. Either this or "jaxb:version" attribute but not both may be specified.

+        </xs:documentation></xs:annotation>

+      </xs:attribute>

+      <xs:attribute ref = "jaxb:version">

+        <xs:annotation><xs:documentation>

+Used to indicate the version of binding declarations. Only valid on root level bindings element. Either this attribute or "version" attribute but not both may be specified.</xs:documentation></xs:annotation>

+      </xs:attribute>

+    </xs:complexType>

+  </xs:element>

+  <xs:simpleType name="referenceCollectionType">

+    <xs:union>

+      <xs:simpleType>

+        <xs:restriction base="xs:string">

+          <xs:enumeration value="indexed"/>

+        </xs:restriction>

+      </xs:simpleType>

+      <xs:simpleType>

+        <xs:restriction base="jaxb:javaIdentifierType"/>

+      </xs:simpleType>

+    </xs:union>

+  </xs:simpleType> 

+  <xs:element name="dom">

+    <xs:complexType>

+	<xs:attribute name = "type" type="xs:NCName" default="w3c">

+          <xs:annotation><xs:documentation>Specify DOM API to bind to JAXB property to.</xs:documentation></xs:annotation>

+        </xs:attribute>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="inlineBinaryData">

+    <xs:annotation><xs:documentation>Disable MTOM/XOP encoding for this binary data. Annotation can be placed on a type defintion that derives from a W3C XSD binary data type or on an element that has a type that is or derives from a W3C XSD binary data type.</xs:documentation>

+    </xs:annotation>

+  </xs:element>

+  <xs:element name = "serializable">

+  <xs:complexType>

+    <xs:attribute name="uid" type="xs:long" default="1"/>

+    </xs:complexType>

+  </xs:element>

+</xs:schema>

+