You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by an...@apache.org on 2006/10/10 12:48:16 UTC
svn commit: r454689 [2/2] - in /incubator/cxf/trunk:
api/src/main/java/org/apache/cxf/phase/
common/common/src/main/java/org/apache/cxf/jaxb/
common/metacode/src/main/resources/schemas/wsdl/ rt/ws/rm/
rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/impl/ r...
Modified: incubator/cxf/trunk/tools/xjc/cfg-test/src/test/resources/schemas/configuration/foo.xsd
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/xjc/cfg-test/src/test/resources/schemas/configuration/foo.xsd?view=diff&rev=454689&r1=454688&r2=454689
==============================================================================
--- incubator/cxf/trunk/tools/xjc/cfg-test/src/test/resources/schemas/configuration/foo.xsd (original)
+++ incubator/cxf/trunk/tools/xjc/cfg-test/src/test/resources/schemas/configuration/foo.xsd Tue Oct 10 03:48:13 2006
@@ -53,6 +53,7 @@
<xs:element name="unsignedIntElem" type="xs:unsignedInt" default="19" minOccurs="0"></xs:element>
<xs:element name="unsignedShortElem" type="xs:unsignedShort" default="20" minOccurs="0"></xs:element>
<xs:element name="unsignedByteElem" type="xs:unsignedByte" default="21" minOccurs="0"></xs:element>
+ <xs:element name="durationElem" type="xs:duration" default="PT3H" minOccurs="0"></xs:element>
<xs:element name="point" type="tns:point" minOccurs="0"></xs:element>
<xs:element name="address" minOccurs="0">
@@ -83,6 +84,8 @@
<xs:attribute name="unsignedIntAttr" type="xs:unsignedInt" default="119"/>
<xs:attribute name="unsignedShortAttr" type="xs:unsignedShort" default="120"/>
<xs:attribute name="unsignedByteAttr" type="xs:unsignedByte" default="121"/>
+ <xs:attribute name="durationAttr" type="xs:duration" default="PT3S"/>
+
<xs:attribute name="stringAttrNoDefault" type="xs:string"/>
<xs:attribute name="booleanAttrNoDefault" type="xs:boolean"/>
@@ -100,6 +103,8 @@
<xs:attribute name="unsignedIntAttrNoDefault" type="xs:unsignedInt"/>
<xs:attribute name="unsignedShortAttrNoDefault" type="xs:unsignedShort"/>
<xs:attribute name="unsignedByteAttrNoDefault" type="xs:unsignedByte"/>
+ <xs:attribute name="durationAttrNoDefault" type="xs:duration"/>
+
</xs:complexType>
Modified: incubator/cxf/trunk/tools/xjc/cfg/src/main/java/org/apache/cxf/xjc/cfg/ConfigurableBeansPlugin.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/xjc/cfg/src/main/java/org/apache/cxf/xjc/cfg/ConfigurableBeansPlugin.java?view=diff&rev=454689&r1=454688&r2=454689
==============================================================================
--- incubator/cxf/trunk/tools/xjc/cfg/src/main/java/org/apache/cxf/xjc/cfg/ConfigurableBeansPlugin.java (original)
+++ incubator/cxf/trunk/tools/xjc/cfg/src/main/java/org/apache/cxf/xjc/cfg/ConfigurableBeansPlugin.java Tue Oct 10 03:48:13 2006
@@ -21,22 +21,16 @@
import java.util.Collections;
import java.util.List;
-import java.util.Map;
-
-import javax.xml.bind.DatatypeConverter;
-import javax.xml.bind.annotation.adapters.HexBinaryAdapter;
-import javax.xml.namespace.NamespaceContext;
-import javax.xml.namespace.QName;
import org.xml.sax.ErrorHandler;
+import com.sun.codemodel.JBlock;
import com.sun.codemodel.JConditional;
import com.sun.codemodel.JDefinedClass;
import com.sun.codemodel.JDocComment;
import com.sun.codemodel.JExpr;
import com.sun.codemodel.JExpression;
import com.sun.codemodel.JFieldRef;
-import com.sun.codemodel.JFieldVar;
import com.sun.codemodel.JInvocation;
import com.sun.codemodel.JMethod;
import com.sun.codemodel.JOp;
@@ -48,14 +42,6 @@
import com.sun.tools.xjc.outline.ClassOutline;
import com.sun.tools.xjc.outline.FieldOutline;
import com.sun.tools.xjc.outline.Outline;
-import com.sun.tools.xjc.util.NamespaceContextAdapter;
-import com.sun.xml.xsom.XSAttributeDecl;
-import com.sun.xml.xsom.XSAttributeUse;
-import com.sun.xml.xsom.XSElementDecl;
-import com.sun.xml.xsom.XSParticle;
-import com.sun.xml.xsom.XSTerm;
-import com.sun.xml.xsom.XSType;
-import com.sun.xml.xsom.XmlString;
import org.apache.cxf.configuration.AbstractConfigurableBeanBase;
@@ -103,10 +89,6 @@
JDefinedClass dc = co.implClass;
dc._extends(AbstractConfigurableBeanBase.class);
- // set default values
-
- setDefaultValues(outline, co);
-
// replace default getters by getters trying the registered providers
updateGetters(co, dc);
@@ -119,104 +101,6 @@
return true;
}
- private boolean setDefaultValues(Outline outline, ClassOutline co) {
- for (FieldOutline f : co.getDeclaredFields()) {
-
- // Use XML schema object model to determine if field is mapped
- // from an element or attribute with a default value
- // and get its default value.
-
- String fieldName = f.getPropertyInfo().getName(false);
- XmlString xmlDefaultValue = null;
- XSType xsType = null;
-
- if (f.getPropertyInfo().getSchemaComponent() instanceof XSParticle) {
- XSParticle particle = (XSParticle)f.getPropertyInfo().getSchemaComponent();
- XSTerm term = particle.getTerm();
- XSElementDecl element = null;
-
- if (term.isElementDecl()) {
- element = particle.getTerm().asElementDecl();
- xmlDefaultValue = element.getDefaultValue();
- xsType = element.getType();
- }
- } else if (f.getPropertyInfo().getSchemaComponent() instanceof XSAttributeUse) {
- XSAttributeUse attributeUse = (XSAttributeUse)f.getPropertyInfo().getSchemaComponent();
- XSAttributeDecl decl = attributeUse.getDecl();
- xmlDefaultValue = decl.getDefaultValue();
- xsType = decl.getType();
- }
-
- if (null == xmlDefaultValue) {
- continue;
- }
-
- String defaultValue = xmlDefaultValue.value;
-
- if (null == defaultValue) {
- continue;
- }
-
- JType type = f.getRawType();
- String typeName = type.fullName();
-
- JDefinedClass impl = co.implClass;
- Map<String, JFieldVar> fields = impl.fields();
- JFieldVar var = fields.get(fieldName);
-
- if ("java.lang.Boolean".equals(typeName)) {
- var.init(JExpr.direct(Boolean.valueOf(defaultValue) ? "Boolean.TRUE" : "Boolean.FALSE"));
- } else if ("java.lang.Byte".equals(typeName)) {
- var.init(JExpr._new(type)
- .arg(JExpr.cast(type.unboxify(),
- JExpr.lit(new Byte(Short.valueOf(defaultValue).byteValue())))));
- } else if ("java.lang.Double".equals(typeName)) {
- var.init(JExpr._new(type)
- .arg(JExpr.lit(new Double(Double.valueOf(defaultValue).doubleValue()))));
- } else if ("java.lang.Float".equals(typeName)) {
- var.init(JExpr._new(type)
- .arg(JExpr.lit(new Float(Float.valueOf(defaultValue).floatValue()))));
- } else if ("java.lang.Integer".equals(typeName)) {
- var.init(JExpr._new(type)
- .arg(JExpr.lit(new Integer(Integer.valueOf(defaultValue).intValue()))));
- } else if ("java.lang.Long".equals(typeName)) {
- var.init(JExpr._new(type)
- .arg(JExpr.lit(new Long(Long.valueOf(defaultValue).longValue()))));
- } else if ("java.lang.Short".equals(typeName)) {
- var.init(JExpr._new(type)
- .arg(JExpr.cast(type.unboxify(),
- JExpr.lit(new Short(Short.valueOf(defaultValue).shortValue())))));
- } else if ("java.lang.String".equals(type.fullName())) {
- var.init(JExpr.lit(defaultValue));
- } else if ("java.math.BigInteger".equals(type.fullName())) {
- var.init(JExpr._new(type).arg(JExpr.lit(defaultValue)));
- } else if ("java.math.BigDecimal".equals(type.fullName())) {
- var.init(JExpr._new(type).arg(JExpr.lit(defaultValue)));
- } else if ("byte[]".equals(type.fullName()) && xsType.isSimpleType()) {
- while (!"anySimpleType".equals(xsType.getBaseType().getName())) {
- xsType = xsType.getBaseType();
- }
- if ("base64Binary".equals(xsType.getName())) {
- var.init(outline.getCodeModel().ref(DatatypeConverter.class)
- .staticInvoke("parseBase64Binary").arg(defaultValue));
- } else if ("hexBinary".equals(xsType.getName())) {
- var.init(JExpr._new(outline.getCodeModel().ref(HexBinaryAdapter.class))
- .invoke("unmarshal").arg(defaultValue));
- }
- } else if ("javax.xml.namespace.QName".equals(typeName)) {
- NamespaceContext nsc = new NamespaceContextAdapter(xmlDefaultValue);
- QName qn = DatatypeConverter.parseQName(xmlDefaultValue.value, nsc);
- var.init(JExpr._new(outline.getCodeModel().ref(QName.class))
- .arg(qn.getNamespaceURI())
- .arg(qn.getLocalPart())
- .arg(qn.getPrefix()));
- }
- // TODO: GregorianCalendar, ...
- }
-
- return true;
- }
-
private void updateGetters(ClassOutline co, JDefinedClass dc) {
for (FieldOutline fo : co.getDeclaredFields()) {
@@ -227,25 +111,13 @@
String getterName = ("java.lang.Boolean".equals(typeName) ? "is" : "get")
+ fo.getPropertyInfo().getName(true);
- // REVISIT: it seems that for Spring in order to inject a Boolean
- // the getter name needs to be get<fieldName>
- // so change it here
- // getterName = "get" + fo.getPropertyInfo().getName(true);
-
// retain existing javadoc, modifiers, and name
JMethod method = dc.getMethod(getterName, new JType[0]);
JDocComment doc = method.javadoc();
int mods = method.mods().getValue();
-
- // ensure type is always the wrapped type
-
- JType mtype = method.type();
-
- if (mtype.isPrimitive()) {
- mtype = mtype.boxify();
- }
-
+ JType mtype = method.type();
+ JBlock block = method.body();
// remove existing method and define new one
@@ -255,7 +127,6 @@
method.javadoc().append(doc);
JFieldRef fr = JExpr.ref(fieldName);
-
JExpression test;
JConditional jc;
@@ -269,14 +140,23 @@
test = JOp.not(JOp.eq(JExpr._null(), tmp));
jc = method.body()._if(test);
jc._then()._return(tmp);
-
- test = JOp.eq(JExpr._null(), fr);
+
+ test = JOp.not(JOp.eq(JExpr._null(), fr));
jc = method.body()._if(test);
+ jc._then()._return(fr);
+
invocation = JExpr.invoke("tryFallback");
invocation.arg(JExpr.dotclass(type.boxify()));
invocation.arg(JExpr.lit(fieldName));
- jc._then()._return(invocation);
- jc._else()._return(fr);
+ // tmp = method.body().decl(type.boxify(), "_" + fieldName, invocation);
+ method.body().assign(tmp, invocation);
+ test = JOp.not(JOp.eq(JExpr._null(), tmp));
+ jc = method.body()._if(test);
+ jc._then()._return(tmp);
+
+ // add the original block
+
+ method.body().add(block);
}
}
Modified: incubator/cxf/trunk/tools/xjc/dv-test/pom.xml
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/xjc/dv-test/pom.xml?view=diff&rev=454689&r1=454688&r2=454689
==============================================================================
--- incubator/cxf/trunk/tools/xjc/dv-test/pom.xml (original)
+++ incubator/cxf/trunk/tools/xjc/dv-test/pom.xml Tue Oct 10 03:48:13 2006
@@ -79,6 +79,11 @@
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.apache.cxf</groupId>
+ <artifactId>cxf-common-utilities</artifactId>
+ <version>${project.version}</version>
+ </dependency>
</dependencies>
Modified: incubator/cxf/trunk/tools/xjc/dv-test/src/test/java/org/apache/cxf/xjc/dv/DefaultValueTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/xjc/dv-test/src/test/java/org/apache/cxf/xjc/dv/DefaultValueTest.java?view=diff&rev=454689&r1=454688&r2=454689
==============================================================================
--- incubator/cxf/trunk/tools/xjc/dv-test/src/test/java/org/apache/cxf/xjc/dv/DefaultValueTest.java (original)
+++ incubator/cxf/trunk/tools/xjc/dv-test/src/test/java/org/apache/cxf/xjc/dv/DefaultValueTest.java Tue Oct 10 03:48:13 2006
@@ -19,7 +19,12 @@
package org.apache.cxf.xjc.dv;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+
import javax.xml.bind.DatatypeConverter;
+import javax.xml.bind.annotation.adapters.HexBinaryAdapter;
+import javax.xml.namespace.QName;
import junit.framework.TestCase;
@@ -36,14 +41,166 @@
Foo foo = new org.apache.cxf.configuration.foo.ObjectFactory().createFoo();
- // verify default attribute values
-
- assertEquals("hello", foo.getStringAttr());
- assertEquals(3, foo.getBase64BinaryAttr().length);
+ // verify default values
- // verify default element values
-
-
+ assertAttributeValuesWithoutDefault(foo);
+ assertDefaultAttributeValues(foo);
+ assertDefaultElementValues(foo);
+ }
+
+ private void assertDefaultAttributeValues(Foo foo) {
+ assertEquals("Unexpected value for attribute stringAttr",
+ "hello", foo.getStringAttr());
+ assertTrue("Unexpected value for attribute booleanAttr",
+ foo.isBooleanAttr());
+ assertEquals("Unexpected value for attribute integerAttr",
+ new BigInteger("111"), foo.getIntegerAttr());
+ assertEquals("Unexpected value for attribute intAttr",
+ 112, foo.getIntAttr());
+ assertEquals("Unexpected value for attribute longAttr",
+ 113L, foo.getLongAttr());
+ assertEquals("Unexpected value for attribute shortAttr",
+ 114, foo.getShortAttr());
+ assertEquals("Unexpected value for attribute decimalAttr",
+ new BigDecimal("115"), foo.getDecimalAttr());
+ assertEquals("Unexpected value for attribute floatAttr",
+ new Float(116F), foo.getFloatAttr());
+ assertEquals("Unexpected value for attribute doubleAttr",
+ new Double(117D), foo.getDoubleAttr());
+ assertEquals("Unexpected value for attribute byteAttr",
+ 118, foo.getByteAttr());
+
+ byte[] expected = DatatypeConverter.parseBase64Binary("wxyz");
+ byte[] effective = foo.getBase64BinaryAttr();
+
+ assertEquals("Unexpected value for attribute base64BinaryAttr", expected.length, effective.length);
+ for (int i = 0; i < expected.length; i++) {
+ assertEquals("Unexpected value for attribute base64BinaryAttr", expected[i], effective[i]);
+ }
+
+ expected = new HexBinaryAdapter().unmarshal("aaaa");
+ effective = foo.getHexBinaryAttr();
+ assertEquals("Unexpected value for attribute hexBinaryAttr", expected.length, effective.length);
+ for (int i = 0; i < expected.length; i++) {
+ assertEquals("Unexpected value for attribute hexBinaryAttr", expected[i], effective[i]);
+ }
+
+ QName qn = foo.getQnameAttr();
+ assertEquals("Unexpected value for attribute qnameAttr",
+ "http://www.w3.org/2001/XMLSchema", qn.getNamespaceURI());
+ assertEquals("Unexpected value for attribute qnameAttr",
+ "schema", qn.getLocalPart());
+
+ assertEquals("Unexpected value for attribute unsignedIntAttr",
+ 119L, foo.getUnsignedIntAttr());
+ assertEquals("Unexpected value for attribute unsignedShortAttr",
+ 120, foo.getUnsignedShortAttr());
+ assertEquals("Unexpected value for attribute unsignedByteAttr",
+ 121, foo.getUnsignedByteAttr());
+
+ assertEquals("Unexpected value for attribute durationAttr",
+ 3, foo.getDurationAttr().getSeconds());
+ assertEquals("Unexpected value for attribute durationAttr",
+ 0, foo.getDurationAttr().getHours());
+ }
+
+ /**
+ * @param foo
+ */
+ private void assertAttributeValuesWithoutDefault(Foo foo) {
+ assertNull("Unexpected value for attribute stringAttrNoDefault",
+ foo.getStringAttrNoDefault());
+ assertNull("Unexpected value for attribute booleanAttrNoDefault",
+ foo.isBooleanAttrNoDefault());
+ assertNull("Unexpected value for attribute integerAttrNoDefault",
+ foo.getIntegerAttrNoDefault());
+ assertNull("Unexpected value for attribute intAttrNoDefault",
+ foo.getIntAttrNoDefault());
+ assertNull("Unexpected value for attribute longAttrNoDefault",
+ foo.getLongAttrNoDefault());
+ assertNull("Unexpected value for attribute shortAttrNoDefault",
+ foo.getShortAttrNoDefault());
+ assertNull("Unexpected value for attribute decimalAttrNoDefault",
+ foo.getDecimalAttrNoDefault());
+ assertNull("Unexpected value for attribute floatAttrNoDefault",
+ foo.getFloatAttrNoDefault());
+ assertNull("Unexpected value for attribute doubleAttrNoDefault",
+ foo.getDoubleAttrNoDefault());
+ assertNull("Unexpected value for attribute byteAttrNoDefault",
+ foo.getByteAttrNoDefault());
+
+ assertNull("Unexpected value for attribute base64BinaryAttrNoDefault",
+ foo.getBase64BinaryAttrNoDefault());
+ assertNull("Unexpected value for attribute hexBinaryAttrNoDefault",
+ foo.getHexBinaryAttrNoDefault());
+
+ assertNull("Unexpected value for attribute qnameAttrNoDefault",
+ foo.getQnameAttrNoDefault());
+
+ assertNull("Unexpected value for attribute unsignedIntAttrNoDefault",
+ foo.getUnsignedIntAttrNoDefault());
+ assertNull("Unexpected value for attribute unsignedShortAttrNoDefault",
+ foo.getUnsignedShortAttrNoDefault());
+ assertNull("Unexpected value for attribute unsignedByteAttrNoDefault",
+ foo.getUnsignedByteAttrNoDefault());
+ assertNull("Unexpected value for attribute durationAttrNoDefault",
+ foo.getDurationAttrNoDefault());
+ }
+
+ private void assertDefaultElementValues(Foo foo) {
+ assertEquals("Unexpected value for element stringElem",
+ "hello", foo.getStringElem());
+ assertTrue("Unexpected value for element booleanElem",
+ foo.isBooleanElem());
+ assertEquals("Unexpected value for element integerElem",
+ new BigInteger("11"), foo.getIntegerElem());
+ assertEquals("Unexpected value for element intElem",
+ new Integer(12), foo.getIntElem());
+ assertEquals("Unexpected value for element longElem",
+ new Long(13L), foo.getLongElem());
+ assertEquals("Unexpected value for element shortElem",
+ new Short((short)14), foo.getShortElem());
+ assertEquals("Unexpected value for element decimalElem",
+ new BigDecimal("15"), foo.getDecimalElem());
+ assertEquals("Unexpected value for element floatElem",
+ new Float(16F), foo.getFloatElem());
+ assertEquals("Unexpected value for element doubleElem",
+ new Double(17D), foo.getDoubleElem());
+ assertEquals("Unexpected value for element byteElem",
+ new Byte((byte)18), foo.getByteElem());
+
+ byte[] expected = DatatypeConverter.parseBase64Binary("abcdefgh");
+ byte[] effective = foo.getBase64BinaryElem();
+
+ assertEquals("Unexpected value for element base64BinaryElem", expected.length, effective.length);
+ for (int i = 0; i < expected.length; i++) {
+ assertEquals("Unexpected value for element base64BinaryElem", expected[i], effective[i]);
+ }
+
+ expected = new HexBinaryAdapter().unmarshal("ffff");
+ effective = foo.getHexBinaryElem();
+ assertEquals("Unexpected value for element hexBinaryElem", expected.length, effective.length);
+ for (int i = 0; i < expected.length; i++) {
+ assertEquals("Unexpected value for element hexBinaryElem", expected[i], effective[i]);
+ }
+
+ QName qn = foo.getQnameElem();
+ assertEquals("Unexpected value for element qnameElem",
+ "http://www.w3.org/2001/XMLSchema", qn.getNamespaceURI());
+ assertEquals("Unexpected value for element qnameElem",
+ "string", qn.getLocalPart());
+
+ assertEquals("Unexpected value for element unsignedIntElem",
+ new Long(19L), foo.getUnsignedIntElem());
+ assertEquals("Unexpected value for element unsignedShortElem",
+ new Integer(20), foo.getUnsignedShortElem());
+ assertEquals("Unexpected value for element unsignedByteElem",
+ new Short((short)21), foo.getUnsignedByteElem());
+
+ assertEquals("Unexpected value for element durationElem",
+ 0, foo.getDurationElem().getSeconds());
+ assertEquals("Unexpected value for element durationElem",
+ 3, foo.getDurationElem().getHours());
}
Modified: incubator/cxf/trunk/tools/xjc/dv-test/src/test/resources/schemas/configuration/foo.xsd
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/xjc/dv-test/src/test/resources/schemas/configuration/foo.xsd?view=diff&rev=454689&r1=454688&r2=454689
==============================================================================
--- incubator/cxf/trunk/tools/xjc/dv-test/src/test/resources/schemas/configuration/foo.xsd (original)
+++ incubator/cxf/trunk/tools/xjc/dv-test/src/test/resources/schemas/configuration/foo.xsd Tue Oct 10 03:48:13 2006
@@ -51,6 +51,7 @@
<xs:element name="unsignedIntElem" type="xs:unsignedInt" default="19" minOccurs="0"></xs:element>
<xs:element name="unsignedShortElem" type="xs:unsignedShort" default="20" minOccurs="0"></xs:element>
<xs:element name="unsignedByteElem" type="xs:unsignedByte" default="21" minOccurs="0"></xs:element>
+ <xs:element name="durationElem" type="xs:duration" default="PT3H" minOccurs="0"></xs:element>
<xs:element name="temperature" type="tns:celsius" default="37" minOccurs="0"></xs:element>
<xs:element name="roomTemperature" type="tns:cel" default="38" minOccurs="0"></xs:element>
@@ -66,8 +67,6 @@
</xs:sequence>
</xs:complexType>
</xs:element>
- <!--
- -->
</xs:sequence>
<xs:attribute name="stringAttr" type="xs:string" default="hello"/>
@@ -79,13 +78,14 @@
<xs:attribute name="decimalAttr" type="xs:decimal" default="115"/>
<xs:attribute name="floatAttr" type="xs:float" default="116"/>
<xs:attribute name="doubleAttr" type="xs:double" default="117"/>
- <xs:attribute name="byteAttr" type="xs:byte" default="108"/>
+ <xs:attribute name="byteAttr" type="xs:byte" default="118"/>
<xs:attribute name="qnameAttr" type="xs:QName" default="xs:schema"/>
<xs:attribute name="base64BinaryAttr" type="xs:base64Binary" default="wxyz"/>
<xs:attribute name="hexBinaryAttr" type="xs:hexBinary" default="aaaa"/>
<xs:attribute name="unsignedIntAttr" type="xs:unsignedInt" default="119"/>
<xs:attribute name="unsignedShortAttr" type="xs:unsignedShort" default="120"/>
<xs:attribute name="unsignedByteAttr" type="xs:unsignedByte" default="121"/>
+ <xs:attribute name="durationAttr" type="xs:duration" default="PT3S"/>
<xs:attribute name="stringAttrNoDefault" type="xs:string"/>
<xs:attribute name="booleanAttrNoDefault" type="xs:boolean"/>
@@ -103,6 +103,7 @@
<xs:attribute name="unsignedIntAttrNoDefault" type="xs:unsignedInt"/>
<xs:attribute name="unsignedShortAttrNoDefault" type="xs:unsignedShort"/>
<xs:attribute name="unsignedByteAttrNoDefault" type="xs:unsignedByte"/>
+ <xs:attribute name="durationAttrNoDefault" type="xs:duration"/>
</xs:complexType>
<xs:complexType name="point">
Modified: incubator/cxf/trunk/tools/xjc/dv/pom.xml
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/xjc/dv/pom.xml?view=diff&rev=454689&r1=454688&r2=454689
==============================================================================
--- incubator/cxf/trunk/tools/xjc/dv/pom.xml (original)
+++ incubator/cxf/trunk/tools/xjc/dv/pom.xml Tue Oct 10 03:48:13 2006
@@ -38,6 +38,11 @@
<dependencies>
<dependency>
+ <groupId>org.apache.cxf</groupId>
+ <artifactId>cxf-common-utilities</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-xjc</artifactId>
</dependency>
Modified: incubator/cxf/trunk/tools/xjc/dv/src/main/java/org/apache/cxf/xjc/dv/DefaultValuePlugin.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/xjc/dv/src/main/java/org/apache/cxf/xjc/dv/DefaultValuePlugin.java?view=diff&rev=454689&r1=454688&r2=454689
==============================================================================
--- incubator/cxf/trunk/tools/xjc/dv/src/main/java/org/apache/cxf/xjc/dv/DefaultValuePlugin.java (original)
+++ incubator/cxf/trunk/tools/xjc/dv/src/main/java/org/apache/cxf/xjc/dv/DefaultValuePlugin.java Tue Oct 10 03:48:13 2006
@@ -19,7 +19,8 @@
package org.apache.cxf.xjc.dv;
-import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
import javax.xml.bind.DatatypeConverter;
import javax.xml.bind.annotation.adapters.HexBinaryAdapter;
@@ -28,9 +29,14 @@
import org.xml.sax.ErrorHandler;
+import com.sun.codemodel.JConditional;
import com.sun.codemodel.JDefinedClass;
+import com.sun.codemodel.JDocComment;
import com.sun.codemodel.JExpr;
-import com.sun.codemodel.JFieldVar;
+import com.sun.codemodel.JExpression;
+import com.sun.codemodel.JFieldRef;
+import com.sun.codemodel.JMethod;
+import com.sun.codemodel.JOp;
import com.sun.codemodel.JType;
import com.sun.tools.xjc.Options;
import com.sun.tools.xjc.Plugin;
@@ -38,18 +44,25 @@
import com.sun.tools.xjc.outline.FieldOutline;
import com.sun.tools.xjc.outline.Outline;
import com.sun.tools.xjc.util.NamespaceContextAdapter;
+import com.sun.xml.xsom.XSAttributeDecl;
+import com.sun.xml.xsom.XSAttributeUse;
import com.sun.xml.xsom.XSElementDecl;
import com.sun.xml.xsom.XSParticle;
import com.sun.xml.xsom.XSTerm;
import com.sun.xml.xsom.XSType;
import com.sun.xml.xsom.XmlString;
+import org.apache.cxf.common.logging.LogUtils;
+import org.apache.cxf.jaxb.DatatypeFactory;
+
/**
* Modifies the JAXB code model to initialise fields mapped from schema elements
* with their default value.
*/
public class DefaultValuePlugin extends Plugin {
+ private static final Logger LOG = LogUtils.getL7dLogger(DatatypeFactory.class);
+
public DefaultValuePlugin() {
}
@@ -62,7 +75,7 @@
}
public boolean run(Outline outline, Options opt, ErrorHandler errorHandler) {
- System.out.println("Running default value plugin.");
+ LOG.fine("Running default value plugin.");
for (ClassOutline co : outline.getClasses()) {
for (FieldOutline f : co.getDeclaredFields()) {
@@ -70,9 +83,9 @@
// from an element (attributes default values are handled
// natively) and get its default value.
- String fieldName = f.getPropertyInfo().getName(false);
XmlString xmlDefaultValue = null;
XSType xsType = null;
+ boolean isElement = false;
if (f.getPropertyInfo().getSchemaComponent() instanceof XSParticle) {
XSParticle particle = (XSParticle)f.getPropertyInfo().getSchemaComponent();
@@ -83,77 +96,132 @@
element = particle.getTerm().asElementDecl();
xmlDefaultValue = element.getDefaultValue();
xsType = element.getType();
+ isElement = true;
}
+ } else if (f.getPropertyInfo().getSchemaComponent() instanceof XSAttributeUse) {
+ XSAttributeUse attributeUse = (XSAttributeUse)f.getPropertyInfo().getSchemaComponent();
+ XSAttributeDecl decl = attributeUse.getDecl();
+ xmlDefaultValue = decl.getDefaultValue();
+ xsType = decl.getType();
}
- if (null == xmlDefaultValue) {
+ if (null == xmlDefaultValue || null == xmlDefaultValue.value) {
continue;
}
- String defaultValue = xmlDefaultValue.value;
+ JExpression dvExpr =
+ getDefaultValueExpression(f, co, outline, xsType, isElement, xmlDefaultValue);
- if (null == defaultValue) {
+ if (null == dvExpr) {
continue;
}
-
- JType type = f.getRawType();
- String typeName = type.fullName();
-
- JDefinedClass impl = co.implClass;
- Map<String, JFieldVar> fields = impl.fields();
- JFieldVar var = fields.get(fieldName);
-
- if ("java.lang.Boolean".equals(typeName)) {
- var.init(JExpr.direct(Boolean.valueOf(defaultValue) ? "Boolean.TRUE" : "Boolean.FALSE"));
- } else if ("java.lang.Byte".equals(typeName)) {
- var.init(JExpr._new(type)
- .arg(JExpr.cast(type.unboxify(),
- JExpr.lit(new Byte(Short.valueOf(defaultValue).byteValue())))));
- } else if ("java.lang.Double".equals(typeName)) {
- var.init(JExpr._new(type)
- .arg(JExpr.lit(new Double(Double.valueOf(defaultValue).doubleValue()))));
- } else if ("java.lang.Float".equals(typeName)) {
- var.init(JExpr._new(type)
- .arg(JExpr.lit(new Float(Float.valueOf(defaultValue).floatValue()))));
- } else if ("java.lang.Integer".equals(typeName)) {
- var.init(JExpr._new(type)
- .arg(JExpr.lit(new Integer(Integer.valueOf(defaultValue).intValue()))));
- } else if ("java.lang.Long".equals(typeName)) {
- var.init(JExpr._new(type)
- .arg(JExpr.lit(new Long(Long.valueOf(defaultValue).longValue()))));
- } else if ("java.lang.Short".equals(typeName)) {
- var.init(JExpr._new(type)
- .arg(JExpr.cast(type.unboxify(),
- JExpr.lit(new Short(Short.valueOf(defaultValue).shortValue())))));
- } else if ("java.lang.String".equals(type.fullName())) {
- var.init(JExpr.lit(defaultValue));
- } else if ("java.math.BigInteger".equals(type.fullName())) {
- var.init(JExpr._new(type).arg(JExpr.lit(defaultValue)));
- } else if ("java.math.BigDecimal".equals(type.fullName())) {
- var.init(JExpr._new(type).arg(JExpr.lit(defaultValue)));
- } else if ("byte[]".equals(type.fullName()) && xsType.isSimpleType()) {
- while (!"anySimpleType".equals(xsType.getBaseType().getName())) {
- xsType = xsType.getBaseType();
- }
- if ("base64Binary".equals(xsType.getName())) {
- var.init(outline.getCodeModel().ref(DatatypeConverter.class)
- .staticInvoke("parseBase64Binary").arg(defaultValue));
- } else if ("hexBinary".equals(xsType.getName())) {
- var.init(JExpr._new(outline.getCodeModel().ref(HexBinaryAdapter.class))
- .invoke("unmarshal").arg(defaultValue));
- }
- } else if ("javax.xml.namespace.QName".equals(typeName)) {
- NamespaceContext nsc = new NamespaceContextAdapter(xmlDefaultValue);
- QName qn = DatatypeConverter.parseQName(xmlDefaultValue.value, nsc);
- var.init(JExpr._new(outline.getCodeModel().ref(QName.class))
- .arg(qn.getNamespaceURI())
- .arg(qn.getLocalPart())
- .arg(qn.getPrefix()));
- }
- // TODO: GregorianCalendar, ...
+
+ updateGetter(co, f, co.implClass, dvExpr);
+
}
}
return true;
}
+
+
+ JExpression getDefaultValueExpression(FieldOutline f,
+ ClassOutline co,
+ Outline outline,
+ XSType xsType,
+ boolean isElement,
+ XmlString xmlDefaultValue
+ ) {
+ JType type = f.getRawType();
+ String typeName = type.fullName();
+ String defaultValue = xmlDefaultValue.value;
+
+ JExpression dv = null;
+
+ if ("java.lang.Boolean".equals(typeName) && isElement) {
+ dv = JExpr.direct(Boolean.valueOf(defaultValue) ? "Boolean.TRUE" : "Boolean.FALSE");
+ } else if ("java.lang.Byte".equals(typeName) && isElement) {
+ dv = JExpr._new(type)
+ .arg(JExpr.cast(type.unboxify(),
+ JExpr.lit(new Byte(Short.valueOf(defaultValue).byteValue()))));
+ } else if ("java.lang.Double".equals(typeName) && isElement) {
+ dv = JExpr._new(type)
+ .arg(JExpr.lit(new Double(Double.valueOf(defaultValue).doubleValue())));
+ } else if ("java.lang.Float".equals(typeName) && isElement) {
+ dv = JExpr._new(type)
+ .arg(JExpr.lit(new Float(Float.valueOf(defaultValue).floatValue())));
+ } else if ("java.lang.Integer".equals(typeName) && isElement) {
+ dv = JExpr._new(type)
+ .arg(JExpr.lit(new Integer(Integer.valueOf(defaultValue).intValue())));
+ } else if ("java.lang.Long".equals(typeName) && isElement) {
+ dv = JExpr._new(type)
+ .arg(JExpr.lit(new Long(Long.valueOf(defaultValue).longValue())));
+ } else if ("java.lang.Short".equals(typeName) && isElement) {
+ dv = JExpr._new(type)
+ .arg(JExpr.cast(type.unboxify(),
+ JExpr.lit(new Short(Short.valueOf(defaultValue).shortValue()))));
+ } else if ("java.lang.String".equals(type.fullName()) && isElement) {
+ dv = JExpr.lit(defaultValue);
+ } else if ("java.math.BigInteger".equals(type.fullName()) && isElement) {
+ dv = JExpr._new(type).arg(JExpr.lit(defaultValue));
+ } else if ("java.math.BigDecimal".equals(type.fullName()) && isElement) {
+ dv = JExpr._new(type).arg(JExpr.lit(defaultValue));
+ } else if ("byte[]".equals(type.fullName()) && xsType.isSimpleType() && isElement) {
+ while (!"anySimpleType".equals(xsType.getBaseType().getName())) {
+ xsType = xsType.getBaseType();
+ }
+ if ("base64Binary".equals(xsType.getName())) {
+ dv = outline.getCodeModel().ref(DatatypeConverter.class)
+ .staticInvoke("parseBase64Binary").arg(defaultValue);
+ } else if ("hexBinary".equals(xsType.getName())) {
+ dv = JExpr._new(outline.getCodeModel().ref(HexBinaryAdapter.class))
+ .invoke("unmarshal").arg(defaultValue);
+ }
+ } else if ("javax.xml.namespace.QName".equals(typeName)) {
+ NamespaceContext nsc = new NamespaceContextAdapter(xmlDefaultValue);
+ QName qn = DatatypeConverter.parseQName(xmlDefaultValue.value, nsc);
+ dv = JExpr._new(outline.getCodeModel().ref(QName.class))
+ .arg(qn.getNamespaceURI())
+ .arg(qn.getLocalPart())
+ .arg(qn.getPrefix());
+ } else if ("javax.xml.datatype.Duration".equals(typeName)) {
+ dv = outline.getCodeModel().ref(org.apache.cxf.jaxb.DatatypeFactory.class)
+ .staticInvoke("createDuration").arg(defaultValue);
+ }
+ // TODO: GregorianCalendar, ...
+ return dv;
+ }
+
+ private void updateGetter(ClassOutline co, FieldOutline fo, JDefinedClass dc, JExpression dvExpr) {
+
+ String fieldName = fo.getPropertyInfo().getName(false);
+ JType type = fo.getRawType();
+ String typeName = type.fullName();
+
+ String getterName = ("java.lang.Boolean".equals(typeName) ? "is" : "get")
+ + fo.getPropertyInfo().getName(true);
+
+ JMethod method = dc.getMethod(getterName, new JType[0]);
+ JDocComment doc = method.javadoc();
+ int mods = method.mods().getValue();
+ JType mtype = method.type();
+
+ if (LOG.isLoggable(Level.FINE)) {
+ LOG.fine("Updating getter: " + getterName);
+ }
+ // remove existing method and define new one
+
+ dc.methods().remove(method);
+
+ method = dc.method(mods, mtype, getterName);
+ method.javadoc().append(doc);
+
+ JFieldRef fr = JExpr.ref(fieldName);
+
+ JExpression test = JOp.eq(JExpr._null(), fr);
+ JConditional jc = method.body()._if(test);
+ jc._then()._return(dvExpr);
+ jc._else()._return(fr);
+ }
+
}