Hi Wesley, Yes, before we can call this done-done, we need a unit test also; again see test/src/xmlobject/extensions for how the extension interfaces are tested and go from there.
To aswer your other question, all I am suggesting is that the code that you added to StscJavaizer.assignGlobalJavaNames() be moved to its own method (which would then be called from assignGlobalJavaNames()) - really simple. By the way, do you have a newer version of the patch? The one I have is from 3/23. Thanks, Radu > -----Original Message----- > From: Wesley Leggette [mailto:wlegge...@cleversafe.com] > Sent: Sunday, March 29, 2009 2:46 AM > To: Radu Preotiuc > Subject: Re: [PATCH] User static types try #2 > > > Radu, > > Submitted #4. Should I be including any unit testing here? > > Wesley > > > On 3/25/09 18:59, "Radu Preotiuc" > <radu.preotiuc-pie...@oracle.com> wrote: > > > > > StscJavaizer: > > - one of my original comments, the new code in > assignGlobalJavaNames() > > needs to be refactored in its own method. > > Still haven't done this. I'm not sure exactly what you're > suggesting here. > > > > > - Simpl.setUserType(true) needs to be deleted > > > > SchemaTypeCodePrinter: > > - in printJGetArrayValue() ".decode" + stype.getShortJavaName() I > > think it's incorrect. What you need is a "short" Java name derived > > from > > stype.getUserTypeName() (not from stype.getFullJavaName()) > > - same comment for printJGetValue(), printJSetValue(), > > printSetterImpls() > > It was actually supposed to be the unqualified (local part > of) Qname. Fixed. > > > > - also in printSetterImpls() else if (prop.getJavaTypeCode() == > > SchemaProperty.JAVA_USER) - not necessary anymore > > Not sure which block you mean specifically here. Some of them > are necessary, but I think I got rid of the ones you pointed > out below. > > > > - in printSetterImpls(), there are two 'else if > > (prop.getJavaTypeCode() == SchemaProperty.JAVA_USER)' > blocks of code; > > the first one is inside an 'if ( xmltype )', so it will > never get executed, it can be deleted. > > - in printSetterImpls() one more time, the second of the blocks of > > code mentioned above. The branches of 'if (!isSubstGroup)' > and 'else' > > are identical, the isSubstGroup case needs to pass the additional > > parameter to arraySetterHelper() > > > > Thanks, > > Radu > > > > On Tue, 2009-03-24 at 15:21 -0400, Wesley Leggette wrote: > >> Radu, > >> > >> I thought I addressed everything. I realize now that I forgot to > >> eliminate the changing of the xsdconfig schema namespace, > so I will > >> fix that. But as far as the second email you sent, I'm not > sure what I'm missing. > >> > >> Wesley > >> > >> > >> > >> On 3/24/09 11:54, "Radu Preotiuc-Pietro" > >> <radu.preotiuc-pie...@oracle.com> > >> wrote: > >> > >>> Hi Wesley, > >>> > >>> Did you look at my previouso comments? I don't really see those > >>> incorporated in this second patch. > >>> > >>> Radu > >>> > >>>> -----Original Message----- > >>>> From: Wesley Leggette [mailto:wlegge...@cleversafe.com] > >>>> Sent: Monday, March 23, 2009 5:12 PM > >>>> To: dev@xmlbeans.apache.org > >>>> Subject: [PATCH] User static types try #2 > >>>> > >>>> > >>>> This patch now supports mutiple value properties, which > I think I > >>>> did correctly. > >>>> > >>>> I also decided to eliminate the whole reflection thing. > It was (1) > >>>> too difficult to debug, (2) somewhat arbitrary anyway since the > >>>> custom type itself can't be done by reflection. > >>>> > >>>> > >>>> ----------------- > >>>> > >>>> Added custom user type support. > >>>> > >>>> diff -r 5471ba2f2541 src/configschema/schema/xmlconfig.xsd > >>>> --- a/src/configschema/schema/xmlconfig.xsd Sun Mar 22 > >>>> 15:07:07 2009 > >>>> -0500 > >>>> +++ b/src/configschema/schema/xmlconfig.xsd Sun Mar 22 > >>>> 15:24:27 2009 > >>>> -0500 > >>>> @@ -13,8 +13,8 @@ > >>>> limitations under the License. --> <xs:schema > >>>> xmlns:xs="http://www.w3.org/2001/XMLSchema" > >>>> - > xmlns:xb="http://xml.apache.org/xmlbeans/2004/02/xbean/config" > >>>> - > >>>> > targetNamespace="http://xml.apache.org/xmlbeans/2004/02/xbean/config" > >>>> + > xmlns:xb="http://xml.apache.org/xmlbeans/2009/03/xbean/config" > >>>> + > >>>> > targetNamespace="http://xml.apache.org/xmlbeans/2009/03/xbean/config" > >>>> elementFormDefault="qualified"> > >>>> > >>>> <xs:import namespace="http://www.w3.org/2001/XMLSchema"/> > >>>> @@ -58,6 +58,15 @@ > >>>> </xs:annotation> > >>>> </xs:element> > >>>> > >>>> + <xs:element name="usertype" type="xb:usertypeconfig"> > >>>> + <xs:annotation> > >>>> + <xs:documentation> > >>>> + Specifies a custom java type mapping for a > >>>> + derived simple > >>>> type. > >>>> + A static handler must be specified > that converts > >>>> + between > >>>> the > >>>> + custom java type and the built-in > simple type it > >>>> + derives > >>>> from. > >>>> + </xs:documentation> > >>>> + </xs:annotation> > >>>> + </xs:element> > >>>> </xs:choice> > >>>> </xs:complexType> > >>>> </xs:element> > >>>> @@ -172,6 +181,30 @@ > >>>> </xs:union> > >>>> </xs:simpleType> > >>>> > >>>> + <xs:complexType name="usertypeconfig"> > >>>> + <xs:sequence> > >>>> + <xs:choice> > >>>> + <xs:element name="staticHandler" > type="xs:string"> > >>>> + <xs:annotation> > >>>> + <xs:documentation> > >>>> + The name of the handler class for > >>>> this user > >>>> type. > >>>> + The handler must contain > public static > >>>> + methods > >>>> for > >>>> + translating the user type to > and from > >>>> + the > >>>> derived simple type. > >>>> + Example: > >>>> + - qname example:uuid > restricts xs:string > >>>> + - javaname is java.util.UUID > >>>> + - handler interface must > have signatures: > >>>> + public String > encodeUuid(UUID obj) > >>>> + public UUID > decodeUuid(String enc) > >>>> + </xs:documentation> > >>>> + </xs:annotation> > >>>> + </xs:element> > >>>> + </xs:choice> > >>>> + </xs:sequence> > >>>> + <xs:attribute name="name" type="xs:QName"/> > >>>> + <xs:attribute name="javaname" type="xs:string"/> > >>>> + </xs:complexType> > >>>> + > >>>> <xs:complexType name="extensionconfig"> > >>>> <xs:sequence> > >>>> <xs:element name="interface" minOccurs="0" > >>>> maxOccurs="unbounded" > >>>>> > >>>> diff -r 5471ba2f2541 src/configschema/schema/xmlconfig.xsdconfig > >>>> --- a/src/configschema/schema/xmlconfig.xsdconfig Sun Mar > >>>> 22 15:07:07 > >>>> 2009 -0500 > >>>> +++ b/src/configschema/schema/xmlconfig.xsdconfig Sun Mar > >>>> 22 15:24:27 > >>>> 2009 -0500 > >>>> @@ -10,7 +10,7 @@ > >>>> limitations under the License. --> > >>>> > >>>> <xb:config > >>>> xmlns:xb="http://xml.apache.org/xmlbeans/2004/02/xbean/config"> > >>>> > >>>> > >>>> > >>>> - <xb:namespace > >>>> uri="http://xml.apache.org/xmlbeans/2004/02/xbean/config"> > >>>> > >>>> + <xb:namespace > >>>> + uri="http://xml.apache.org/xmlbeans/2009/03/xbean/config"> > >>>> > >>>> > <xb:package>org.apache.xmlbeans.impl.xb.xmlconfig</xb:package> > >>>> > >>>> </xb:namespace> > >>>> > >>>> > >>>> > >>>> diff -r 5471ba2f2541 > >>>> src/typeimpl/org/apache/xmlbeans/impl/schema/SchemaTypeCodePri > >>>> nter.java > >>>> --- > >>>> a/src/typeimpl/org/apache/xmlbeans/impl/schema/SchemaTypeCodeP > >>>> rinter.java > >>>> Sun Mar 22 15:07:07 2009 -0500 > >>>> +++ > >>>> b/src/typeimpl/org/apache/xmlbeans/impl/schema/SchemaTypeCodeP > >>>> rinter.java > >>>> Sun Mar 22 15:24:27 2009 -0500 > >>>> @@ -17,6 +17,7 @@ > >>>> > >>>> import java.io.Writer; > >>>> import java.io.IOException; > >>>> +import java.lang.reflect.InvocationTargetException; > >>>> import java.nio.charset.CharacterCodingException; > >>>> import java.nio.charset.Charset; > >>>> import java.nio.charset.CharsetEncoder; @@ -31,10 > +32,12 @@ import > >>>> org.apache.xmlbeans.impl.common.NameUtil; > >>>> import org.apache.xmlbeans.PrePostExtension; > >>>> import org.apache.xmlbeans.InterfaceExtension; > >>>> +import org.apache.xmlbeans.QNameSet; > >>>> import org.apache.xmlbeans.SchemaType; import > >>>> org.apache.xmlbeans.SchemaTypeSystem; > >>>> import org.apache.xmlbeans.SchemaProperty; > >>>> import org.apache.xmlbeans.SchemaStringEnumEntry; > >>>> +import org.apache.xmlbeans.SimpleValue; > >>>> import org.apache.xmlbeans.SystemProperties; > >>>> import org.apache.xmlbeans.XmlObject; import > >>>> org.apache.xmlbeans.XmlOptions; @@ -1011,12 +1014,19 @@ > >>>> > >>>> String javaTypeForProperty(SchemaProperty sProp) > >>>> { > >>>> + // TODO: This is where to insert handler-specific type > >>>> + > >>>> // The type to use is the XML object.... > >>>> if (sProp.getJavaTypeCode() == > SchemaProperty.XML_OBJECT) > >>>> { > >>>> SchemaType sType = sProp.javaBasedOnType(); > >>>> return findJavaType(sType).replace('$', '.'); > >>>> } > >>>> + > >>>> + if (sProp.getJavaTypeCode() == SchemaProperty.JAVA_USER) > >>>> + { > >>>> + return > >>>> ((SchemaTypeImpl)sProp.getType()).getUserTypeName(); > >>>> + } > >>>> > >>>> switch (sProp.getJavaTypeCode()) > >>>> { > >>>> @@ -1446,7 +1456,7 @@ > >>>> } > >>>> } > >>>> > >>>> - void printJGetArrayValue(int javaType, String type) > >>>> throws IOException > >>>> { > >>>> + void printJGetArrayValue(int javaType, String type, > >>>> SchemaTypeImpl > >>>> stype) throws IOException { > >>>> switch (javaType) > >>>> { > >>>> case SchemaProperty.XML_OBJECT: > >>>> @@ -1568,10 +1578,19 @@ > >>>> emit(" result[i] = > >>>> ((org.apache.xmlbeans.SimpleValue)targetList.get(i)).getObject > >>>> Value();"); > >>>> break; > >>>> > >>>> + case SchemaProperty.JAVA_USER: > >>>> + emit(stype.getUserTypeName() + "[] > result = new " > >>>> + + > >>>> stype.getUserTypeName() + "[targetList.size()];"); > >>>> + emit("for (int i = 0, len = > >>>> targetList.size() ; i < len > >>>> + ; > >>>> i++)"); > >>>> + emit(" result[i] = " + > >>>> stype.getUserTypeHandlerName() + > >>>> ".decode" + stype.getShortJavaName() > >>>> + + > >>>> "((org.apache.xmlbeans.SimpleValue)targetList.get(i));"); > >>>> + break; > >>>> + > >>>> + default: > >>>> + throw new IllegalStateException(); > >>>> } > >>>> emit("return result;"); > >>>> } > >>>> - void printJGetValue(int javaType, String type) throws > >>>> IOException { > >>>> + void printJGetValue(int javaType, String type, > SchemaTypeImpl > >>>> + stype) > >>>> throws IOException { > >>>> switch (javaType) > >>>> { > >>>> case SchemaProperty.XML_OBJECT: > >>>> @@ -1633,72 +1652,83 @@ > >>>> > >>>> case SchemaProperty.JAVA_OBJECT: > >>>> emit("return target.getObjectValue();"); break; > >>>> + > >>>> + case SchemaProperty.JAVA_USER: > >>>> + emit("return " + stype.getUserTypeHandlerName() > >>>> + ".decode" > >>>> + + > >>>> stype.getShortJavaName() > >>>> + + "(target);"); > >>>> + break; > >>>> + > >>>> + default: > >>>> + throw new IllegalStateException(); > >>>> } > >>>> } > >>>> - > >>>> - String jsetMethod(int javaType) throws IOException > >>>> - { > >>>> + void printJSetValue(int javaType, String safeVarName, > >>>> + SchemaType > >>>> + type) > >>>> throws IOException { > >>>> switch (javaType) > >>>> { > >>>> case SchemaProperty.XML_OBJECT: > >>>> - return "target.set"; > >>>> + emit("target.set(" + safeVarName + ");"); break; > >>>> > >>>> case SchemaProperty.JAVA_BOOLEAN: > >>>> - return "target.setBooleanValue"; > >>>> + emit("target.setBooleanValue(" + safeVarName + > >>>> + ");"); > >>>> break; > >>>> > >>>> case SchemaProperty.JAVA_FLOAT: > >>>> - return "target.setFloatValue"; > >>>> + emit("target.setFloatValue(" + safeVarName + > >>>> + ");"); break; > >>>> > >>>> case SchemaProperty.JAVA_DOUBLE: > >>>> - return "target.setDoubleValue"; > >>>> + emit("target.setDoubleValue(" + safeVarName + > >>>> + ");"); break; > >>>> > >>>> case SchemaProperty.JAVA_BYTE: > >>>> - return "target.setByteValue"; > >>>> + emit("target.setByteValue(" + > safeVarName + ");"); > >>>> + break; > >>>> > >>>> case SchemaProperty.JAVA_SHORT: > >>>> - return "target.setShortValue"; > >>>> + emit("target.setShortValue(" + safeVarName + > >>>> + ");"); break; > >>>> > >>>> case SchemaProperty.JAVA_INT: > >>>> - return "target.setIntValue"; > >>>> + emit("target.setIntValue(" + > safeVarName + ");"); > >>>> + break; > >>>> > >>>> case SchemaProperty.JAVA_LONG: > >>>> - return "target.setLongValue"; > >>>> + emit("target.setLongValue(" + > safeVarName + ");"); > >>>> + break; > >>>> > >>>> case SchemaProperty.JAVA_BIG_DECIMAL: > >>>> - return "target.setBigDecimalValue"; > >>>> + emit("target.setBigDecimalValue(" + > safeVarName + > >>>> + ");"); > >>>> break; > >>>> > >>>> case SchemaProperty.JAVA_BIG_INTEGER: > >>>> - return "target.setBigIntegerValue"; > >>>> + emit("target.setBigIntegerValue(" + > safeVarName + > >>>> + ");"); > >>>> break; > >>>> > >>>> case SchemaProperty.JAVA_STRING: > >>>> - return "target.setStringValue"; > >>>> + emit("target.setStringValue(" + safeVarName + > >>>> + ");"); break; > >>>> > >>>> case SchemaProperty.JAVA_BYTE_ARRAY: > >>>> - return "target.setByteArrayValue"; > >>>> + emit("target.setByteArrayValue(" + > >>>> safeVarName + ");"); > >>>> break; > >>>> > >>>> case SchemaProperty.JAVA_GDATE: > >>>> - return "target.setGDateValue"; > >>>> + emit("target.setGDateValue(" + safeVarName + > >>>> + ");"); break; > >>>> > >>>> case SchemaProperty.JAVA_GDURATION: > >>>> - return "target.setGDurationValue"; > >>>> + emit("target.setGDurationValue(" + > >>>> safeVarName + ");"); > >>>> break; > >>>> > >>>> case SchemaProperty.JAVA_CALENDAR: > >>>> - return "target.setCalendarValue"; > >>>> + emit("target.setCalendarValue(" + > >>>> safeVarName + ");"); > >>>> break; > >>>> > >>>> case SchemaProperty.JAVA_DATE: > >>>> - return "target.setDateValue"; > >>>> + emit("target.setDateValue(" + > safeVarName + ");"); > >>>> + break; > >>>> > >>>> case SchemaProperty.JAVA_QNAME: > >>>> - return "target.setQNameValue"; > >>>> + emit("target.setQNameValue(" + safeVarName + > >>>> + ");"); break; > >>>> > >>>> case SchemaProperty.JAVA_LIST: > >>>> - return "target.setListValue"; > >>>> + emit("target.setListValue(" + > safeVarName + ");"); > >>>> + break; > >>>> > >>>> case SchemaProperty.JAVA_ENUM: > >>>> - return "target.setEnumValue"; > >>>> + emit("target.setEnumValue(" + > safeVarName + ");"); > >>>> + break; > >>>> > >>>> case SchemaProperty.JAVA_OBJECT: > >>>> - return "target.setObjectValue"; > >>>> + emit("target.setObjectValue(" + safeVarName + > >>>> + ");"); break; > >>>> + > >>>> + case SchemaProperty.JAVA_USER: > >>>> + > >>>> emit(((SchemaTypeImpl)type).getUserTypeHandlerName() + > ".encode" + > >>>> type.getShortJavaName() > >>>> + + "(" + safeVarName + ", target);"); > >>>> + break; > >>>> > >>>> default: > >>>> throw new IllegalStateException(); @@ > >>>> -1868,6 +1898,8 @@ > >>>> String xtype) > >>>> throws IOException > >>>> { > >>>> + // TODO: THIS IS WHERE TO PUT EXTERNAL GET > TARGET HANDLER > >>>> + > >>>> assert setIdentifier != null && identifier != null; > >>>> > >>>> emit(xtype + " target = null;"); @@ -1986,6 +2018,8 @@ > >>>> boolean xmltype = (javaType == > SchemaProperty.XML_OBJECT); > >>>> String jtargetType = (isunion || !xmltype) ? > >>>> "org.apache.xmlbeans.SimpleValue" : xtype; > >>>> > >>>> + // TODO: there is if(singleton), if(optional), > etc. Maybe > >>>> + a > >>>> if(external_handler)? > >>>> + > >>>> if (singleton) > >>>> { > >>>> // Value getProp() > >>>> @@ -2009,8 +2043,9 @@ > >>>> makeMissingValue(javaType); > >>>> endBlock(); > >>>> > >>>> - > >>>> - printJGetValue(javaType, type); > >>>> + > >>>> + printJGetValue(javaType, type, > >>>> + (SchemaTypeImpl)prop.getType()); > >>>> + > >>>> > >>>> emitImplementationPostamble(); > >>>> > >>>> @@ -2023,6 +2058,7 @@ > >>>> emit("public " + xtype + " xget" + > propertyName + > >>>> "()"); > >>>> startBlock(); > >>>> emitImplementationPreamble(); > >>>> + // TODO: This is where we could choose > to emit a > >>>> + get > >>>> handler target instead > >>>> emitGetTarget(setIdentifier, > identifier, isAttr, > >>>> "0", NOTHING, xtype); > >>>> > >>>> if (isAttr && (prop.hasDefault() == > >>>> SchemaProperty.CONSISTENTLY || @@ -2046,6 +2082,7 @@ > >>>> emit("public boolean isNil" + > propertyName + "()"); > >>>> startBlock(); > >>>> emitImplementationPreamble(); > >>>> + // TODO: This is where we could choose > to emit a > >>>> + get > >>>> handler target instead > >>>> emitGetTarget(setIdentifier, > identifier, isAttr, > >>>> "0", NOTHING, xtype); > >>>> > >>>> emit("if (target == null) return false;"); @@ > >>>> -2109,7 +2146,7 @@ > >>>> emit("java.util.List targetList = new > >>>> java.util.ArrayList();"); > >>>> emit("get_store().find_all_element_users(" + > >>>> setIdentifier + ", targetList);"); > >>>> > >>>> - printJGetArrayValue(javaType, type); > >>>> + printJGetArrayValue(javaType, type, > >>>> (SchemaTypeImpl)prop.getType()); > >>>> > >>>> emitImplementationPostamble(); > >>>> endBlock(); > >>>> @@ -2121,7 +2158,7 @@ > >>>> emitImplementationPreamble(); > >>>> > >>>> emitGetTarget(setIdentifier, identifier, > isAttr, "i", > >>>> THROW_EXCEPTION, jtargetType); > >>>> - printJGetValue(javaType, type); > >>>> + printJGetValue(javaType, type, > >>>> + (SchemaTypeImpl)prop.getType()); > >>>> > >>>> emitImplementationPostamble(); > >>>> endBlock(); > >>>> @@ -2194,7 +2231,7 @@ > >>>> } > >>>> } > >>>> > >>>> - void printSetterImpls(QName qName, boolean isAttr, > >>>> + void printSetterImpls(QName qName, SchemaProperty prop, > >>>> + boolean isAttr, > >>>> String propertyName, int > javaType, String > >>>> type, String xtype, > >>>> boolean nillable, boolean > optional, boolean > >>>> several, boolean singleton, > >>>> boolean isunion, String > identifier, String > >>>> setIdentifier, SchemaType sType) @@ -2209,7 +2246,6 @@ > >>>> boolean xmltype = (javaType == > SchemaProperty.XML_OBJECT); > >>>> boolean isobj = (javaType == > SchemaProperty.JAVA_OBJECT); > >>>> boolean isSubstGroup = identifier != setIdentifier; > >>>> - String jSet = jsetMethod(javaType); > >>>> String jtargetType = (isunion || !xmltype) ? > >>>> "org.apache.xmlbeans.SimpleValue" : xtype; > >>>> > >>>> String propdesc = "\"" + qName.getLocalPart() + "\"" > >>>> + (isAttr ? " > >>>> attribute" : " element"); > >>>> @@ -2232,7 +2268,7 @@ > >>>> emitImplementationPreamble(); > >>>> emitPre(sType, > >>>> PrePostExtension.OPERATION_SET, identifier, isAttr, several ? > >>>> "0" : "-1"); > >>>> emitGetTarget(setIdentifier, > identifier, isAttr, > >>>> "0", ADD_NEW_VALUE, jtargetType); > >>>> - emit(jSet + "(" + safeVarName + ");"); > >>>> + printJSetValue(javaType, safeVarName, > >>>> (SchemaTypeImpl)prop.getType()); > >>>> emitPost(sType, > >>>> PrePostExtension.OPERATION_SET, identifier, isAttr, several ? > >>>> "0" : "-1"); > >>>> emitImplementationPostamble(); > >>>> } > >>>> @@ -2322,6 +2358,25 @@ > >>>> else > >>>> emit("unionArraySetterHelper(" + > >>>> safeVarName + "Array" + ", " + identifier + ", " + > setIdentifier + > >>>> ");" ); > >>>> } > >>>> + else if (prop.getJavaTypeCode() == > >>>> SchemaProperty.JAVA_USER) > >>>> + { > >>>> + if (!isSubstGroup) > >>>> + { > >>>> + > >>>> emit("org.apache.xmlbeans.SimpleValue[] dests = > arraySetterHelper(" > >>>> + safeVarName + "Array.length, " + identifier + ");" ); > >>>> + emit("for ( int i = 0 ; i < > >>>> dests.length ; i++ > >>>> + ) > >>>> {"); > >>>> + emit(" " + > >>>> ((SchemaTypeImpl)prop.getType()).getUserTypeHandlerName() + > >>>> ".encode" + > >>>> prop.getType().getShortJavaName() > >>>> + + "(" + safeVarName + "Array[i], > >>>> dests[i]);"); > >>>> + emit("}"); > >>>> + } > >>>> + else > >>>> + { > >>>> + > >>>> emit("org.apache.xmlbeans.SimpleValue[] dests = > arraySetterHelper(" > >>>> + safeVarName + "Array.length" + ", " + setIdentifier + ");" ); > >>>> + emit("for ( int i = 0 ; i < > >>>> dests.length ; i++ > >>>> + ) > >>>> {"); > >>>> + emit(" " + > >>>> ((SchemaTypeImpl)prop.getType()).getUserTypeHandlerName() + > >>>> ".encode" + > >>>> prop.getType().getShortJavaName() > >>>> + + "(" + safeVarName + "Array[i], > >>>> dests[i]);"); > >>>> + emit("}"); > >>>> + } > >>>> + } > >>>> else > >>>> { > >>>> if (!isSubstGroup) @@ -2349,6 +2404,25 @@ > >>>> else > >>>> emit("unionArraySetterHelper(" + > >>>> safeVarName + "Array" + ", " + identifier + ", " + > setIdentifier + > >>>> ");" ); > >>>> } > >>>> + else if (prop.getJavaTypeCode() == > >>>> SchemaProperty.JAVA_USER) > >>>> + { > >>>> + if (!isSubstGroup) > >>>> + { > >>>> + > >>>> emit("org.apache.xmlbeans.SimpleValue[] dests = > arraySetterHelper(" > >>>> + safeVarName + "Array.length, " + identifier + ");" ); > >>>> + emit("for ( int i = 0 ; i < > >>>> dests.length ; i++ > >>>> + ) > >>>> {"); > >>>> + emit(" " + > >>>> ((SchemaTypeImpl)prop.getType()).getUserTypeHandlerName() + > >>>> ".encode" + > >>>> prop.getType().getShortJavaName() > >>>> + + "(" + safeVarName + "Array[i], > >>>> dests[i]);"); > >>>> + emit("}"); > >>>> + } > >>>> + else > >>>> + { > >>>> + > >>>> emit("org.apache.xmlbeans.SimpleValue[] dests = > arraySetterHelper(" > >>>> + safeVarName + "Array.length" + ", " + setIdentifier + ");" ); > >>>> + emit("for ( int i = 0 ; i < > >>>> dests.length ; i++ > >>>> + ) > >>>> {"); > >>>> + emit(" " + > >>>> ((SchemaTypeImpl)prop.getType()).getUserTypeHandlerName() + > >>>> ".encode" + > >>>> prop.getType().getShortJavaName() > >>>> + + "(" + safeVarName + "Array[i], > >>>> dests[i]);"); > >>>> + emit("}"); > >>>> + } > >>>> + } > >>>> else > >>>> { > >>>> if (!isSubstGroup) @@ -2372,12 +2446,21 @@ > >>>> > >>>> "org.apache.xmlbeans.impl.values.XmlObjectBase.KIND_SETTERHELP > >>>> ER_ARRAYITEM); > >>>> "); > >>>> emitPost(sType, > >>>> PrePostExtension.OPERATION_SET, identifier, isAttr, "i"); > >>>> } > >>>> + else if (prop.getJavaTypeCode() == > >>>> SchemaProperty.JAVA_USER) > >>>> + { > >>>> + emitImplementationPreamble(); > >>>> + emitPre(sType, PrePostExtension.OPERATION_SET, > >>>> + identifier, > >>>> isAttr, "i"); > >>>> + emitGetTarget(setIdentifier, > identifier, isAttr, > >>>> + "i", > >>>> THROW_EXCEPTION, jtargetType); > >>>> + printJSetValue(javaType, safeVarName, > >>>> (SchemaTypeImpl)prop.getType()); > >>>> + emitPost(sType, PrePostExtension.OPERATION_SET, > >>>> + identifier, > >>>> isAttr, "i"); > >>>> + emitImplementationPostamble(); > >>>> + } > >>>> else > >>>> { > >>>> emitImplementationPreamble(); > >>>> emitPre(sType, > >>>> PrePostExtension.OPERATION_SET, identifier, isAttr, "i"); > >>>> emitGetTarget(setIdentifier, > identifier, isAttr, > >>>> "i", THROW_EXCEPTION, jtargetType); > >>>> - emit(jSet + "(" + safeVarName + ");"); > >>>> + printJSetValue(javaType, safeVarName, > >>>> (SchemaTypeImpl)prop.getType()); > >>>> emitPost(sType, > >>>> PrePostExtension.OPERATION_SET, identifier, isAttr, "i"); > >>>> emitImplementationPostamble(); > >>>> } > >>>> @@ -2436,7 +2519,7 @@ > >>>> emit ("(" + jtargetType > >>>> +")get_store().insert_element_user(" + setIdentifier + ", " + > >>>> identifier + ", i);"); > >>>> outdent(); > >>>> - emit(jSet + "(" + safeVarName + ");"); > >>>> + printJSetValue(javaType, safeVarName, > >>>> (SchemaTypeImpl)prop.getType()); > >>>> emitPost(sType, > PrePostExtension.OPERATION_INSERT, > >>>> identifier, isAttr, "i"); > >>>> emitImplementationPostamble(); > >>>> endBlock(); > >>>> @@ -2448,7 +2531,7 @@ > >>>> emitDeclareTarget(true, jtargetType); > >>>> emitPre(sType, > >>>> PrePostExtension.OPERATION_INSERT, > >>>> identifier, isAttr); > >>>> emitAddTarget(identifier, isAttr, true, > jtargetType); > >>>> - emit(jSet + "(" + safeVarName + ");"); > >>>> + printJSetValue(javaType, safeVarName, > >>>> (SchemaTypeImpl)prop.getType()); > >>>> emitPost(sType, > PrePostExtension.OPERATION_INSERT, > >>>> identifier, isAttr); > >>>> emitImplementationPostamble(); > >>>> endBlock(); > >>>> @@ -2602,6 +2685,7 @@ > >>>> { > >>>> printSetterImpls( > >>>> name, > >>>> + prop, > >>>> prop.isAttribute(), > >>>> prop.getJavaPropertyName(), > >>>> prop.getJavaTypeCode(), diff -r > >>>> 5471ba2f2541 > >>>> src/typeimpl/org/apache/xmlbeans/impl/schema/SchemaTypeImpl.java > >>>> --- > >>>> > a/src/typeimpl/org/apache/xmlbeans/impl/schema/SchemaTypeImpl.java > >>>> Sun Mar 22 15:07:07 2009 -0500 > >>>> +++ > b/src/typeimpl/org/apache/xmlbeans/impl/schema/SchemaTypeImpl.j > >>>> +++ ava > >>>> Sun Mar 22 15:24:27 2009 -0500 > >>>> @@ -100,6 +100,8 @@ > >>>> private volatile Constructor _javaImplConstructor; > >>>> private volatile Constructor _javaImplConstructor2; > >>>> private volatile boolean _implNotAvailable; > >>>> + private volatile Class _userTypeClass; > >>>> + private volatile Class _userTypeHandlerClass; > >>>> > >>>> // user data objects not persisted > >>>> private volatile Object _userData; @@ -140,6 +142,10 @@ > >>>> private int _baseDepth; // how many inheritance > steps to AnyType > >>>> private int _derivationType; > >>>> > >>>> + // user type support > >>>> + private String _userTypeName; > >>>> + private String _userTypeHandler; > >>>> + > >>>> // for complex types with simple content > >>>> private SchemaType.Ref _contentBasedOnTyperef; > >>>> > >>>> @@ -577,7 +583,29 @@ > >>>> public String getFullJavaImplName() { return > _fullJavaImplName;} > >>>> public String getShortJavaImplName() { return > >>>> _shortJavaImplName;} > >>>> > >>>> - public void setInterfaceExtensions(InterfaceExtension[] > >>>> interfaces) > >>>> + public String getUserTypeName() > >>>> + { > >>>> + return _userTypeName; > >>>> + } > >>>> + > >>>> + public void setUserTypeName(String userTypeName) > >>>> + { > >>>> + _userTypeName = userTypeName; > >>>> + } > >>>> + > >>>> + public String getUserTypeHandlerName() > >>>> + { > >>>> + return _userTypeHandler; > >>>> + } > >>>> + > >>>> + public void setUserTypeHandlerName(String typeHandler) > >>>> + { > >>>> + _userTypeHandler = typeHandler; > >>>> + } > >>>> + > >>>> + > >>>> + > >>>> + public void setInterfaceExtensions(InterfaceExtension[] > >>>> interfaces) > >>>> { > >>>> assertResolved(); > >>>> _interfaces = interfaces; > >>>> @@ -1717,6 +1745,46 @@ > >>>> > >>>> return _javaImplClass; > >>>> } > >>>> + > >>>> + public Class getUserTypeClass() > >>>> + { > >>>> + // This field is declared volatile and Class is > immutable > >>>> + so this > >>>> is > >>>> + // allowed. > >>>> + if (_userTypeClass == null && getUserTypeName() != null) > >>>> + { > >>>> + try > >>>> + { > >>>> + _userTypeClass = > Class.forName(_userTypeName, false, > >>>> + getTypeSystem().getClassLoader()); > >>>> + } > >>>> + catch (ClassNotFoundException e) > >>>> + { > >>>> + _userTypeClass = null; > >>>> + } > >>>> + } > >>>> + > >>>> + return _userTypeClass; > >>>> + } > >>>> + > >>>> + public Class getUserTypeHandlerClass() > >>>> + { > >>>> + // This field is declared volatile and Class is > immutable > >>>> + so this > >>>> is > >>>> + // allowed. > >>>> + if (_userTypeHandlerClass == null && > >>>> getUserTypeHandlerName() > >>>> + != > >>>> null) > >>>> + { > >>>> + try > >>>> + { > >>>> + _userTypeHandlerClass = > >>>> Class.forName(_userTypeHandler, > >>>> false, > >>>> + getTypeSystem().getClassLoader()); > >>>> + } > >>>> + catch (ClassNotFoundException e) > >>>> + { > >>>> + _userTypeHandlerClass = null; > >>>> + } > >>>> + } > >>>> + > >>>> + return _userTypeHandlerClass; > >>>> + } > >>>> > >>>> public Constructor getJavaImplConstructor() > >>>> { > >>>> diff -r 5471ba2f2541 > >>>> src/typeimpl/org/apache/xmlbeans/impl/schema/StscJavaizer.java > >>>> --- > >>>> a/src/typeimpl/org/apache/xmlbeans/impl/schema/StscJavaizer.ja > >>>> va Sun > >>>> Mar 22 15:07:07 2009 -0500 > >>>> +++ > >>>> b/src/typeimpl/org/apache/xmlbeans/impl/schema/StscJavaizer.ja > >>>> va Sun > >>>> Mar 22 15:24:27 2009 -0500 > >>>> @@ -22,6 +22,7 @@ > >>>> import org.apache.xmlbeans.SchemaParticle; > >>>> import org.apache.xmlbeans.SchemaProperty; > >>>> import org.apache.xmlbeans.QNameSet; > >>>> +import org.apache.xmlbeans.UserType; > >>>> import org.apache.xmlbeans.XmlAnySimpleType; > >>>> import org.apache.xmlbeans.SchemaStringEnumEntry; > >>>> import org.apache.xmlbeans.XmlByte; @@ -98,6 +99,15 @@ > >>>> { > >>>> > >>>> sImpl.setFullJavaName(pickFullJavaClassName(usedNames, > >>>> findTopName(sImpl), pickedName, sImpl.isDocumentType(), > >>>> sImpl.isAttributeType())); > >>>> > >>>> sImpl.setFullJavaImplName(pickFullJavaImplName(usedNames, > >>>> sImpl.getFullJavaName())); > >>>> + > >>>> + UserType utype = > >>>> StscState.get().getBindingConfig().lookupUserTypeForQName(sImp > >>>> l.getName()); > >>>> + if (utype != null) > >>>> + { > >>>> + sImpl.setUserType(true); > >>>> + sImpl.setUserTypeName(utype.getJavaName()); > >>>> + > >>>> sImpl.setUserTypeHandlerName(utype.getStaticHandler()); > >>>> + } > >>>> + > >>>> setExtensions(sImpl, state); > >>>> } > >>>> } > >>>> @@ -531,6 +541,9 @@ > >>>> if (!sType.isSimpleType()) > >>>> return SchemaProperty.XML_OBJECT; > >>>> > >>>> + if > (((SchemaTypeImpl)sType).getUserTypeHandlerName() != null) > >>>> + return SchemaProperty.JAVA_USER; > >>>> + > >>>> if (sType.getSimpleVariety() == SchemaType.UNION) > >>>> { > >>>> // see if we can find an interesting common > base type, > >>>> e.g., for string enums diff -r 5471ba2f2541 > >>>> src/typeimpl/org/apache/xmlbeans/impl/values/XmlComplexContent > >>>> Impl.java > >>>> --- > >>>> a/src/typeimpl/org/apache/xmlbeans/impl/values/XmlComplexConte > >>>> ntImpl.java > >>>> Sun Mar 22 15:07:07 2009 -0500 > >>>> +++ > >>>> b/src/typeimpl/org/apache/xmlbeans/impl/values/XmlComplexConte > >>>> ntImpl.java > >>>> Sun Mar 22 15:24:27 2009 -0500 > >>>> @@ -160,7 +160,59 @@ > >>>> ((XmlObjectBase) user).objectSet( sources[ i ] ); > >>>> } > >>>> } > >>>> + > >>>> + protected SimpleValue[] arraySetterHelper ( int > sourcesLength, > >>>> + QName > >>>> elemName ) > >>>> + { > >>>> + SimpleValue[] dests = new SimpleValue[sourcesLength]; > >>>> > >>>> + TypeStore store = get_store(); > >>>> + > >>>> + int m = store.count_elements( elemName ); > >>>> + > >>>> + for ( ; m > sourcesLength ; m-- ) > >>>> + store.remove_element( elemName, m - 1 ); > >>>> + > >>>> + for ( int i = 0 ; i < sourcesLength ; i++ ) > >>>> + { > >>>> + TypeStoreUser user; > >>>> + > >>>> + if (i >= m) > >>>> + user = store.add_element_user( elemName ); > >>>> + else > >>>> + user = store.find_element_user( elemName, i ); > >>>> + > >>>> + dests[i] = (SimpleValue) user; > >>>> + } > >>>> + > >>>> + return dests; > >>>> + } > >>>> + > >>>> + protected SimpleValue[] arraySetterHelper ( int > sourcesLength, > >>>> + QName > >>>> elemName, QNameSet set ) > >>>> + { > >>>> + SimpleValue[] dests = new SimpleValue[sourcesLength]; > >>>> + > >>>> + TypeStore store = get_store(); > >>>> + > >>>> + int m = store.count_elements( set ); > >>>> + > >>>> + for ( ; m > sourcesLength ; m-- ) > >>>> + store.remove_element( set, m - 1 ); > >>>> + > >>>> + for ( int i = 0 ; i < sourcesLength ; i++ ) > >>>> + { > >>>> + TypeStoreUser user; > >>>> + > >>>> + if (i >= m) > >>>> + user = store.add_element_user( elemName ); > >>>> + else > >>>> + user = store.find_element_user( set, i ); > >>>> + > >>>> + dests[i] = (SimpleValue) user; > >>>> + } > >>>> + > >>>> + return dests; > >>>> + } > >>>> + > >>>> protected void arraySetterHelper ( boolean[] sources, QName > >>>> elemName ) > >>>> { > >>>> int n = sources == null ? 0 : sources.length; diff -r > >>>> 5471ba2f2541 > >>>> src/xmlcomp/org/apache/xmlbeans/impl/tool/SchemaCompiler.java > >>>> --- > >>>> > a/src/xmlcomp/org/apache/xmlbeans/impl/tool/SchemaCompiler.java Sun > >>>> Mar 22 15:07:07 2009 -0500 > >>>> +++ > >>>> > b/src/xmlcomp/org/apache/xmlbeans/impl/tool/SchemaCompiler.java Sun > >>>> Mar 22 15:24:27 2009 -0500 > >>>> @@ -1258,12 +1258,14 @@ > >>>> return false; > >>>> } > >>>> > >>>> - private static final String CONFIG_URI = > >>>> "http://xml.apache.org/xmlbeans/2004/02/xbean/config"; > >>>> - private static final String COMPATIBILITY_CONFIG_URI = > >>>> "http://www.bea.com/2002/09/xbean/config"; > >>>> + private static final String CONFIG_URI = > >>>> "http://xml.apache.org/xmlbeans/2009/03/xbean/config"; > >>>> + private static final String COMPATIBILITY_CONFIG_URI = > >>>> "http://xml.apache.org/xmlbeans/2004/02/xbean/config"; > >>>> + private static final String COMPATIBILITY_CONFIG_URI2 = > >>>> "http://www.bea.com/2002/09/xbean/config"; > >>>> private static final Map MAP_COMPATIBILITY_CONFIG_URIS; > >>>> static > >>>> { > >>>> MAP_COMPATIBILITY_CONFIG_URIS = new HashMap(); > >>>> > >>>> MAP_COMPATIBILITY_CONFIG_URIS.put(COMPATIBILITY_CONFIG_URI, > >>>> CONFIG_URI); > >>>> + > >>>> + MAP_COMPATIBILITY_CONFIG_URIS.put(COMPATIBILITY_CONFIG_URI2, > >>>> CONFIG_URI); > >>>> } > >>>> } > >>>> diff -r 5471ba2f2541 > >>>> > src/xmlconfig/org/apache/xmlbeans/impl/config/BindingConfigImpl.jav > >>>> a > >>>> --- > >>>> > a/src/xmlconfig/org/apache/xmlbeans/impl/config/BindingConfigImpl.j > >>>> ava > >>>> Sun Mar 22 15:07:07 2009 -0500 > >>>> +++ > >>>> > b/src/xmlconfig/org/apache/xmlbeans/impl/config/BindingConfigImpl.j > >>>> a > >>>> +++ va > >>>> Sun Mar 22 15:24:27 2009 -0500 > >>>> @@ -20,7 +20,9 @@ > >>>> import org.apache.xmlbeans.impl.xb.xmlconfig.Nsconfig; > >>>> import org.apache.xmlbeans.impl.xb.xmlconfig.Qnameconfig; > >>>> import org.apache.xmlbeans.impl.xb.xmlconfig.Qnametargetenum; > >>>> +import org.apache.xmlbeans.impl.xb.xmlconfig.Usertypeconfig; > >>>> import org.apache.xmlbeans.BindingConfig; > >>>> +import org.apache.xmlbeans.UserType; > >>>> import org.apache.xmlbeans.XmlObject; import > >>>> org.apache.xmlbeans.XmlError; import > >>>> org.apache.xmlbeans.InterfaceExtension; > >>>> @@ -54,6 +56,7 @@ > >>>> > >>>> private List _interfaceExtensions; > >>>> private List _prePostExtensions; > >>>> + private List _userTypes; > >>>> > >>>> private BindingConfigImpl() > >>>> { > >>>> @@ -69,6 +72,7 @@ > >>>> _qnameAttMap = Collections.EMPTY_MAP; > >>>> _interfaceExtensions = new ArrayList(); > >>>> _prePostExtensions = new ArrayList(); > >>>> + _userTypes = new ArrayList(); > >>>> } > >>>> > >>>> public static BindingConfig forConfigDocuments(Config[] > >>>> configs, File[] javaFiles, File[] classpath) @@ -90,6 +94,7 @@ > >>>> _qnameAttMap = new LinkedHashMap(); > >>>> _interfaceExtensions = new ArrayList(); > >>>> _prePostExtensions = new ArrayList(); > >>>> + _userTypes = new ArrayList(); > >>>> > >>>> for (int i = 0; i < configs.length; i++) > >>>> { > >>>> @@ -137,6 +142,13 @@ > >>>> { > >>>> recordExtensionSetting(javaFiles, > classpath, ext[j]); > >>>> } > >>>> + > >>>> + Usertypeconfig[] utypes = config.getUsertypeArray(); > >>>> + for (int j = 0; j < utypes.length; j++) > >>>> + { > >>>> + JamClassLoader jamLoader = > getJamLoader(javaFiles, > >>>> classpath); > >>>> + > _userTypes.add(UserTypeImpl.newInstance(jamLoader, > >>>> utypes[j])); > >>>> + } > >>>> } > >>>> > >>>> secondPhaseValidation(); > >>>> @@ -354,6 +366,7 @@ > >>>> > >>>> public String lookupJavanameForQName(QName qname, int kind) > >>>> { > >>>> + // TODO: Want to return user type java name if > applicable > >>>> switch (kind) > >>>> { > >>>> case QNAME_TYPE: > >>>> @@ -367,6 +380,28 @@ > >>>> } > >>>> return null; > >>>> } > >>>> + > >>>> + > >>>> + public UserType lookupUserTypeForQName(QName qname) > >>>> + { > >>>> + if (qname == null) > >>>> + return null; > >>>> + > >>>> + for (Iterator i = _userTypes.iterator(); i.hasNext();) > >>>> + { > >>>> + UserType utype = (UserType) i.next(); > >>>> + if (qname.equals(utype.getName())) > >>>> + return utype; > >>>> + } > >>>> + > >>>> + return null; > >>>> + } > >>>> + > >>>> + public UserType[] getUserTypes() > >>>> + { > >>>> + return (UserType[]) _interfaceExtensions > >>>> + .toArray(new > UserType[_interfaceExtensions.size()]); > >>>> + } > >>>> > >>>> public InterfaceExtension[] getInterfaceExtensions() > >>>> { > >>>> diff -r 5471ba2f2541 > >>>> src/xmlconfig/org/apache/xmlbeans/impl/config/UserTypeImpl.java > >>>> --- /dev/null Thu Jan 01 00:00:00 1970 +0000 > >>>> +++ > >>>> b/src/xmlconfig/org/apache/xmlbeans/impl/config/UserTypeImpl.j > >>>> ava Sun > >>>> Mar 22 15:24:27 2009 -0500 > >>>> @@ -0,0 +1,46 @@ > >>>> +package org.apache.xmlbeans.impl.config; > >>>> + > >>>> +import javax.xml.namespace.QName; > >>>> + > >>>> +import org.apache.xmlbeans.UserType; import > >>>> +org.apache.xmlbeans.impl.jam.JamClassLoader; > >>>> +import org.apache.xmlbeans.impl.xb.xmlconfig.Usertypeconfig; > >>>> + > >>>> +public class UserTypeImpl implements UserType { > >>>> + > >>>> + private QName _name; > >>>> + private String _javaName; > >>>> + private String _staticHandler; > >>>> + > >>>> + > >>>> + static UserTypeImpl newInstance(JamClassLoader loader, > >>>> + Usertypeconfig > >>>> cfgXO) > >>>> + { > >>>> + UserTypeImpl result = new UserTypeImpl(); > >>>> + > >>>> + result._name = cfgXO.getName(); > >>>> + result._javaName = cfgXO.getJavaname(); > >>>> + result._staticHandler = cfgXO.getStaticHandler(); > >>>> + > >>>> + // We don't validate here because we're just using > >>>> reflection in > >>>> + // the implementation. However, in the future we > >>>> might want to add > >>>> + // the option of directly using the static handler > >>>> in generated > >>>> code > >>>> + > >>>> + return result; > >>>> + } > >>>> + > >>>> + > >>>> + public String getJavaName() > >>>> + { > >>>> + return _javaName; > >>>> + } > >>>> + > >>>> + public QName getName() { > >>>> + return _name; > >>>> + } > >>>> + > >>>> + public String getStaticHandler() { > >>>> + return _staticHandler; > >>>> + } > >>>> + > >>>> + > >>>> +} > >>>> diff -r 5471ba2f2541 > >>>> src/xmlpublic/org/apache/xmlbeans/BindingConfig.java > >>>> --- a/src/xmlpublic/org/apache/xmlbeans/BindingConfig.java > >>>> Sun Mar 22 > >>>> 15:07:07 2009 -0500 > >>>> +++ b/src/xmlpublic/org/apache/xmlbeans/BindingConfig.java > >>>> Sun Mar 22 > >>>> 15:24:27 2009 -0500 > >>>> @@ -27,6 +27,7 @@ > >>>> { > >>>> private static final InterfaceExtension[] > >>>> EMPTY_INTERFACE_EXT_ARRAY = new InterfaceExtension[0]; > >>>> private static final PrePostExtension[] > >>>> EMPTY_PREPOST_EXT_ARRAY = new PrePostExtension[0]; > >>>> + private static final UserType[] EMPTY_USER_TYPE_ARRY = new > >>>> + UserType[0]; > >>>> > >>>> public static final int QNAME_TYPE = 1; > >>>> public static final int QNAME_DOCUMENT_TYPE = 2; @@ > >>>> -84,5 +85,16 @@ > >>>> * type generated from schema compilation or null. > >>>> */ > >>>> public PrePostExtension getPrePostExtension(String > >>>> fullJavaName) { return null; } > >>>> + > >>>> + /** > >>>> + * Returns all defined user types. > >>>> + */ > >>>> + public UserType[] getUserTypes() { return > >>>> + EMPTY_USER_TYPE_ARRY; } > >>>> + > >>>> + /** > >>>> + * Returns a user defined Java type for a given QName. > >>>> + */ > >>>> + public UserType lookupUserTypeForQName(QName qname) { > >>>> return null; > >>>> + } > >>>> + > >>>> > >>>> } > >>>> diff -r 5471ba2f2541 > >>>> src/xmlpublic/org/apache/xmlbeans/SchemaProperty.java > >>>> --- a/src/xmlpublic/org/apache/xmlbeans/SchemaProperty.java > >>>> Sun Mar 22 > >>>> 15:07:07 2009 -0500 > >>>> +++ b/src/xmlpublic/org/apache/xmlbeans/SchemaProperty.java > >>>> Sun Mar 22 > >>>> 15:24:27 2009 -0500 > >>>> @@ -210,6 +210,9 @@ > >>>> static final int JAVA_ENUM = 18; > >>>> /** A {...@link java.lang.Object}, used for some simple type > >>>> unions. See {...@link #getJavaTypeCode}. */ > >>>> static final int JAVA_OBJECT = 19; // for some unions > >>>> + > >>>> + /** A user specified type. */ > >>>> + static final int JAVA_USER = 20; > >>>> > >>>> /** > >>>> * Returns the default or fixed value, diff -r > >>>> 5471ba2f2541 src/xmlpublic/org/apache/xmlbeans/UserType.java > >>>> --- /dev/null Thu Jan 01 00:00:00 1970 +0000 > >>>> +++ b/src/xmlpublic/org/apache/xmlbeans/UserType.java Sun > >>>> Mar 22 15:24:27 > >>>> 2009 -0500 > >>>> @@ -0,0 +1,13 @@ > >>>> +package org.apache.xmlbeans; > >>>> + > >>>> +import javax.xml.namespace.QName; > >>>> + > >>>> +public interface UserType { > >>>> + > >>>> + QName getName(); > >>>> + > >>>> + String getJavaName(); > >>>> + > >>>> + String getStaticHandler(); > >>>> + > >>>> +} > >>>> > >>>> > >>>> > ------------------------------------------------------------------- > >>>> -- To unsubscribe, e-mail: dev-unsubscr...@xmlbeans.apache.org > >>>> For additional commands, e-mail: dev-h...@xmlbeans.apache.org > >>>> > >>>> > >>>> > >>> > >>> > >>> > -------------------------------------------------------------------- > >>> - To unsubscribe, e-mail: dev-unsubscr...@xmlbeans.apache.org > >>> For additional commands, e-mail: dev-h...@xmlbeans.apache.org > >>> > >> > > > > > --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@xmlbeans.apache.org For additional commands, e-mail: dev-h...@xmlbeans.apache.org