in dv/src/main/java/org/apache/cxf/xjc/dv/DefaultValuePlugin.java [346:440]
JExpression getDefaultValueExpression(FieldOutline f,
ClassOutline co,
Outline outline,
XSType xsType,
boolean isElement,
XmlString xmlDefaultValue,
boolean unbox) {
JType type = f.getRawType();
String typeName = type.fullName();
String defaultValue = xmlDefaultValue == null ? null : xmlDefaultValue.value;
if (defaultValue == null) {
return null;
}
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 = ((JClass) type).staticInvoke("valueOf")
.arg(JExpr.cast(type.unboxify(), JExpr.lit(Byte.parseByte(defaultValue))));
} else if ("java.lang.Double".equals(typeName) && isElement) {
dv = ((JClass) type).staticInvoke("valueOf")
.arg(JExpr.lit(Double.parseDouble(defaultValue)));
} else if ("java.lang.Float".equals(typeName) && isElement) {
dv = ((JClass) type).staticInvoke("valueOf")
.arg(JExpr.lit(Float.parseFloat(defaultValue)));
} else if ("java.lang.Integer".equals(typeName) && isElement) {
dv = ((JClass) type).staticInvoke("valueOf")
.arg(JExpr.lit(Integer.parseInt(defaultValue)));
} else if ("java.lang.Long".equals(typeName) && isElement) {
dv = ((JClass) type).staticInvoke("valueOf")
.arg(JExpr.lit(Long.parseLong(defaultValue)));
} else if ("java.lang.Short".equals(typeName) && isElement) {
dv = ((JClass) type).staticInvoke("valueOf")
.arg(JExpr.cast(type.unboxify(), JExpr.lit(Short.parseShort(defaultValue))));
} 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 = null;
} else if (type instanceof JDefinedClass) {
JDefinedClass cls = (JDefinedClass)type;
if (cls.getClassType() == ClassType.ENUM) {
dv = cls.staticInvoke("fromValue").arg(defaultValue);
}
} else if (unbox) {
typeName = type.unboxify().fullName();
if ("int".equals(typeName)) {
dv = JExpr.lit(Integer.parseInt(defaultValue));
} else if ("long".equals(typeName)) {
dv = JExpr.lit(Long.parseLong(defaultValue));
} else if ("short".equals(typeName)) {
dv = JExpr.lit(Short.parseShort(defaultValue));
} else if ("boolean".equals(typeName)) {
dv = JExpr.lit(Boolean.parseBoolean(defaultValue));
} else if ("double".equals(typeName)) {
dv = JExpr.lit(Double.parseDouble(defaultValue));
} else if ("float".equals(typeName)) {
dv = JExpr.lit(Float.parseFloat(defaultValue));
} else if ("byte".equals(typeName)) {
dv = JExpr.lit(Byte.parseByte(defaultValue));
} else {
dv = getDefaultValueExpression(f,
co,
outline,
xsType,
true,
xmlDefaultValue,
false);
}
}
return dv;
}