Fields Summary |
---|
private org.apache.axis.wsdl.symbolTable.TypeEntry | typeField type |
private Vector | elementsField elements |
private Vector | attributesField attributes |
private org.apache.axis.wsdl.symbolTable.TypeEntry | extendTypeField extendType |
protected JavaBeanHelperWriter | helperField helper |
protected Vector | namesField names |
protected ArrayList | simpleValueTypesField simpleValueTypes |
protected Set | enumerationTypesField enumerationTypes |
protected PrintWriter | pwField pw |
protected boolean | enableDefaultConstructorField enableDefaultConstructor |
protected boolean | enableFullConstructorField enableFullConstructor |
protected boolean | enableSimpleConstructorsField enableSimpleConstructors |
protected boolean | enableToStringField enableToString |
protected boolean | enableSettersField enableSetters |
protected boolean | enableGettersField enableGetters |
protected boolean | enableEqualsField enableEquals |
protected boolean | enableHashCodeField enableHashCode |
protected boolean | enableMemberFieldsField enableMemberFields |
protected boolean | isAnyField isAny |
protected boolean | isMixedField isMixed |
protected boolean | parentIsAnyField parentIsAny |
protected boolean | parentIsMixedField parentIsMixed |
Methods Summary |
---|
public void | generate()Generate a java source file and/or helper source file.
If the emitter works in deploy mode and the class already exists, only the helper is generated.
Otherwise, the java bean and helper source are generated.
String fqcn = getPackage() + "." + getClassName();
if (emitter.isDeploy() && emitter.doesExist(fqcn)) {
if (emitter.isHelperWanted()) {
helper.generate();
}
} else {
super.generate();
}
|
private java.lang.String | getAttributeName(org.apache.axis.wsdl.symbolTable.ContainedAttribute attr)generate a name for the attribute
String variableName = attr.getName();
if (variableName == null) {
variableName = Utils.getLastLocalPart(attr.getQName().getLocalPart());
}
return variableName;
|
protected java.lang.String | getBinaryTypeEncoderName(java.lang.String elementName)Returns the class name that should be used to serialize and
deserialize this binary element
TypeEntry type = getElementDecl(elementName);
if (type != null)
{
String typeName = type.getQName().getLocalPart();
if (typeName.equals("base64Binary"))
return "org.apache.axis.encoding.Base64";
if (typeName.equals("hexBinary"))
return "org.apache.axis.types.HexBinary";
throw new java.lang.RuntimeException("Unknown binary type " +
typeName + " for element " + elementName);
}
throw new java.lang.RuntimeException("Unknown element " + elementName);
|
protected java.lang.String | getClassModifiers()Returns the appropriate extends text
Node node = type.getNode();
if (node != null) {
if (JavaUtils.isTrueExplicitly(Utils.getAttribute(node,
"abstract"))) {
return super.getClassModifiers() + "abstract ";
}
}
return super.getClassModifiers();
|
protected org.apache.axis.wsdl.symbolTable.TypeEntry | getElementDecl(java.lang.String elementName)Returns the TypeEntry of the given element
if (elements != null) {
for (int i = 0; i < elements.size(); i++) {
ElementDecl elem = (ElementDecl) elements.get(i);
String variableName;
if (elem.getAnyElement()) {
variableName = Constants.ANYCONTENT;
} else {
variableName = elem.getName();
}
if (variableName.equals(elementName))
return elem.getType();
}
}
return null;
|
protected java.lang.String | getExtendsText()Returns the appropriate extends text
// See if this class extends another class
String extendsText = "";
if ((extendType != null) && !isUnion()
&& (!type.isSimpleType() || !extendType.isBaseType())
&& (extendType.getDimensions().length() == 0)) {
extendsText = " extends " + extendType.getName() + " ";
}
return extendsText;
|
protected java.lang.String | getImplementsText()Returns the appropriate implements text
// See if this class extends another class
String implementsText = " implements java.io.Serializable";
if (type.isSimpleType() &&
(isUnion() || extendType == null || extendType.isBaseType()))
{
implementsText += ", org.apache.axis.encoding.SimpleType";
}
if (isAny) {
implementsText += ", org.apache.axis.encoding.AnyContentType";
}
if (isMixed) {
implementsText += ", org.apache.axis.encoding.MixedContentType";
}
implementsText += " ";
return implementsText;
|
private boolean | isUnion()Method isUnion
return this.simpleValueTypes.size() > 1;
|
protected void | preprocess()Builds the names String vector.
The even indices are the java class names of the
member fields. The odd indices are the member variable
names.
Also sets the simpleValueType variable to the
java class name of the simple value if this bean represents
a simple type
// Add element names
if (elements != null) {
// Check the inheritance chain for xs:any and xs:mixed
TypeEntry parent = extendType;
while ((!parentIsAny || !parentIsMixed) && parent != null) {
if (SchemaUtils.isMixed(parent.getNode())) {
parentIsMixed = true;
}
Vector hisElements = parent.getContainedElements();
for (int i = 0; hisElements != null && i < hisElements.size(); i++) {
ElementDecl elem = (ElementDecl) hisElements.get(i);
if (elem.getAnyElement()) {
parentIsAny = true;
}
}
parent =
SchemaUtils.getComplexElementExtensionBase(parent.getNode(),
emitter.getSymbolTable());
}
for (int i = 0; i < elements.size(); i++) {
ElementDecl elem = (ElementDecl) elements.get(i);
String typeName = elem.getType().getName();
String variableName = null;
if (elem.getAnyElement()) {
if (!parentIsAny && !parentIsMixed) {
typeName = "org.apache.axis.message.MessageElement []";
variableName = Constants.ANYCONTENT;
}
isAny = true;
} else {
variableName = elem.getName();
typeName = processTypeName(elem, typeName);
}
if (variableName == null) {
continue;
}
// Make sure the property name is not reserved.
variableName = JavaUtils.getUniqueValue(
helper.reservedPropNames, variableName);
names.add(typeName);
names.add(variableName);
if (type.isSimpleType()
&& (variableName.endsWith("Value")
|| variableName.equals("_value"))) {
simpleValueTypes.add(typeName);
}
// bug 19069: need to generate code that access member variables that
// are enum types through the class interface, not the constructor
// this util method returns non-null if the type at node is an enum
if (null != Utils.getEnumerationBaseAndValues(
elem.getType().getNode(), emitter.getSymbolTable())) {
enumerationTypes.add(typeName);
}
}
}
if (enableMemberFields && SchemaUtils.isMixed(type.getNode())) {
isMixed = true;
if (!isAny && !parentIsAny && !parentIsMixed) {
names.add("org.apache.axis.message.MessageElement []");
names.add(Constants.ANYCONTENT);
}
}
// Add attribute names
if (attributes != null) {
for (int i = 0; i < attributes.size(); i++) {
ContainedAttribute attr = (ContainedAttribute) attributes.get(i);
String typeName = attr.getType().getName();
String variableName = getAttributeName(attr);
// TODO - What about MinOccurs and Nillable?
// Do they make sense here?
if (attr.getOptional()) {
typeName = Utils.getWrapperType(typeName);
}
// Make sure the property name is not reserved.
variableName = JavaUtils.getUniqueValue(
helper.reservedPropNames, variableName);
names.add(typeName);
names.add(variableName);
if (type.isSimpleType()
&& (variableName.endsWith("Value")
|| variableName.equals("_value"))) {
simpleValueTypes.add(typeName);
}
// bug 19069: need to generate code that access member variables that
// are enum types through the class interface, not the constructor
// this util method returns non-null if the type at node is an enum
if (null != Utils.getEnumerationBaseAndValues(attr.getType().getNode(),
emitter.getSymbolTable())) {
enumerationTypes.add(typeName);
}
}
}
if ((extendType != null) && extendType.getDimensions().equals("[]")) {
String typeName = extendType.getName();
String elemName = extendType.getQName().getLocalPart();
String variableName = Utils.xmlNameToJava(elemName);
names.add(typeName);
names.add(variableName);
}
if((extendType != null) && (Utils.getEnumerationBaseAndValues(
extendType.getNode(), emitter.getSymbolTable()) != null)){
enableDefaultConstructor = false;
}
// Check for duplicate names and make them unique
// Start at index 2 and go by twos
for (int i = 1; i < names.size(); i +=2)
{
int suffix = 2; // the number we append to the name
String s = (String) names.elementAt(i);
if (i < names.size() - 2)
{
int dup = names.indexOf(s, i+1);
while (dup > 0)
{
// duplicate name, tack a number on the end
names.set(dup, names.get(dup) + Integer.toString(suffix));
suffix++;
// get out if we don't have more
if (i >= names.size() - 2)
break;
dup = names.indexOf(s, dup+1);
}
}
}
|
private java.lang.String | processTypeName(org.apache.axis.wsdl.symbolTable.ElementDecl elem, java.lang.String typeName)Check if we need to use the wrapper type or MessageElement
if (elem.getAnyElement()) {
typeName = "org.apache.axis.message.MessageElement []";
} else if (elem.getType().getUnderlTypeNillable()
|| (elem.getNillable() && elem.getMaxOccursIsUnbounded())) {
/*
* Soapenc arrays with nillable underlying type or
* nillable="true" maxOccurs="unbounded" elements
* should be mapped to a wrapper type.
*/
typeName = Utils.getWrapperType(elem.getType());
} else if (elem.getMinOccursIs0() && elem.getMaxOccursIsExactlyOne()
|| elem.getNillable() || elem.getOptional()) {
/*
* Quote from JAX-RPC 1.1, Section 4.2.1:
* There are a number of cases in which a built-in simple
* XML data type must be mapped to the corresponding Java
* wrapper class for the Java primitive type:
* * an element declaration with the nillable attribute
* set to true;
* * an element declaration with the minOccurs attribute
* set to 0 (zero) and the maxOccurs attribute set
* to 1 (one) or absent;
* * an attribute declaration with the use attribute set
* to optional or absent and carrying neither
* the default nor the fixed attribute;
*/
typeName = Utils.getWrapperType(typeName);
}
return typeName;
|
protected void | writeAccessMethods()Writes the setter and getter methods
int j = 0;
// Define getters and setters for the bean elements
for (int i = 0; i < names.size(); i += 2, j++) {
String typeName = (String) names.get(i);
String name = (String) names.get(i + 1);
String capName = Utils.capitalizeFirstChar(name);
String documentation = "";
if (elements != null)
{
if (elements != null && i < (elements.size()*2))
{
ElementDecl elem = (ElementDecl)elements.get(i/2);
documentation = elem.getDocumentation();
}
}
String get = "get";
if (typeName.equals("boolean")) {
get = "is";
}
String comment = getJavadocDescriptionPart(documentation, true);
if (comment.length() > 3) {
// remove the " *" at the front of the first line
comment = comment.substring(2);
}
if (enableGetters) {
try {
pw.println();
pw.println(" /**");
pw.println(" * Gets the " + name + " value for this " + getClassName() + ".");
pw.println(" * ");
pw.println(" * @return " + name + comment);
pw.println(" */");
} catch (DOMException e) {
// no comment
}
pw.println(" public " + typeName + " " + get + capName
+ "() {");
if (isUnion()) {
writeSimpleTypeGetter(typeName, name, "return");
} else {
pw.println(" return " + name + ";");
}
pw.println(" }");
pw.println();
}
if (enableSetters) {
try
{
String nm = (isUnion()) ? "_value" : name;
pw.println();
pw.println(" /**");
pw.println(" * Sets the " + nm + " value for this " + getClassName() + ".");
pw.println(" * ");
pw.println(" * @param " + nm + comment);
pw.println(" */");
}
catch (DOMException e)
{
// no comment
}
if (isUnion()) {
pw.println(" public void set" + capName + "(" + typeName
+ " _value) {");
writeSimpleTypeSetter(typeName);
} else {
pw.println(" public void set" + capName + "(" + typeName
+ " " + name + ") {");
pw.println(" this." + name + " = " + name + ";");
}
pw.println(" }");
pw.println();
}
// If this is a special collection type, insert extra
// java code so that the serializer/deserializer can recognize
// the class. This is not JAX-RPC, and will be replaced with
// compliant code when JAX-RPC determines how to deal with this case.
// These signatures comply with Bean Indexed Properties which seems
// like the reasonable approach to take for collection types.
// (It may be more efficient to handle this with an ArrayList...but
// for the initial support it was easier to use an actual array.)
if ((elements != null) && (j < elements.size())) {
ElementDecl elem = (ElementDecl) elements.get(j);
if (elem.getType().getQName().getLocalPart().indexOf("[") > 0) {
String compName =
typeName.substring(0, typeName.lastIndexOf("["));
if (enableGetters) {
pw.println(" public " + compName + " " + get
+ capName + "(int i) {");
pw.println(" return this." + name + "[i];");
pw.println(" }");
pw.println();
}
if (enableSetters) {
pw.println(" public void set" + capName + "(int i, "
+ compName + " _value) {");
// According to the section 7.2 of the JavaBeans
// specification, the indexed setter should not
// establish or grow the array. Thus the following
// code is not generated for compliance purposes.
/*
* int bracketIndex = typeName.indexOf("[");
* String newingName = typeName.substring(0, bracketIndex + 1);
* String newingSuffix = typeName.substring(bracketIndex + 1);
*
* pw.println(" if (this." + name + " == null ||");
* pw.println(" this." + name + ".length <= i) {");
* pw.println(" " + typeName + " a = new " +
* newingName + "i + 1" + newingSuffix + ";");
* pw.println(" if (this." + name + " != null) {");
* pw.println(" for(int j = 0; j < this." + name +
* ".length; j++)");
* pw.println(" a[j] = this." + name + "[j];");
* pw.println(" }");
* pw.println(" this." + name + " = a;");
* pw.println(" }");
*/
pw.println(" this." + name + "[i] = _value;");
pw.println(" }");
pw.println();
}
}
}
}
|
protected void | writeDefaultConstructor()Writes the default constructor.
// Define the default constructor
pw.println(" public " + className + "() {");
pw.println(" }");
pw.println();
|
protected void | writeEqualsMethod()Writes a general purpose equals method
// The __equalsCalc field and synchronized method are necessary
// in case the object has direct or indirect references to itself.
pw.println(" private java.lang.Object __equalsCalc = null;");
pw.println(
" public synchronized boolean equals(java.lang.Object obj) {");
// First do the general comparison checks
pw.println(" if (!(obj instanceof " + className
+ ")) return false;");
pw.println(" " + className + " other = (" + className
+ ") obj;");
pw.println(" if (obj == null) return false;");
pw.println(" if (this == obj) return true;");
// Have we been here before ? return true if yes otherwise false
pw.println(" if (__equalsCalc != null) {");
pw.println(" return (__equalsCalc == obj);");
pw.println(" }");
pw.println(" __equalsCalc = obj;");
// Before checking the elements, check equality of the super class
String truth = "true";
if ((extendType != null) &&
(!type.isSimpleType() || simpleValueTypes.size() == 0))
{
truth = "super.equals(obj)";
}
pw.println(" boolean _equals;");
if (names.size() == 0) {
pw.println(" _equals = " + truth + ";");
} else if (isUnion()) {
pw.println(" _equals = " + truth + " && "
+ " this.toString().equals(obj.toString());");
} else {
pw.println(" _equals = " + truth + " && ");
for (int i = 0; i < names.size(); i += 2) {
String variableType = (String) names.get(i);
String variable = (String) names.get(i + 1);
String get = "get";
if (variableType.equals("boolean")) {
get = "is";
}
if (variableType.equals("int") || variableType.equals("long")
|| variableType.equals("short")
|| variableType.equals("float")
|| variableType.equals("double")
|| variableType.equals("boolean")
|| variableType.equals("byte")) {
pw.print(" this." + variable + " == other."
+ get + Utils.capitalizeFirstChar(variable)
+ "()");
} else if (variableType.indexOf("[") >= 0) {
// Use java.util.Arrays.equals to compare arrays.
pw.println(" ((this." + variable
+ "==null && other." + get
+ Utils.capitalizeFirstChar(variable)
+ "()==null) || ");
pw.println(" (this." + variable + "!=null &&");
pw.print(" java.util.Arrays.equals(this."
+ variable + ", other." + get
+ Utils.capitalizeFirstChar(variable) + "())))");
} else {
pw.println(" ((this." + variable
+ "==null && other." + get
+ Utils.capitalizeFirstChar(variable)
+ "()==null) || ");
pw.println(" (this." + variable + "!=null &&");
pw.print(" this." + variable
+ ".equals(other." + get
+ Utils.capitalizeFirstChar(variable) + "())))");
}
if (i == (names.size() - 2)) {
pw.println(";");
} else {
pw.println(" &&");
}
}
}
pw.println(" __equalsCalc = null;");
pw.println(" return _equals;");
pw.println(" }");
pw.println("");
|
protected void | writeFileBody(java.io.PrintWriter pw)Generate the binding for the given complex type.
this.pw = pw;
// Populate Names Vector with the names and types of the members.
// The write methods use the names vector whenever they need to get
// a member name or type. Moved to implements callback in order
// to set any interface
// preprocess();
// Write Member Fields
if (enableMemberFields) {
writeMemberFields();
}
// Write the default constructor
if (enableDefaultConstructor) {
writeDefaultConstructor();
}
// Write Full Constructor
if (enableFullConstructor) {
writeFullConstructor();
}
// Write SimpleConstructors
if (enableSimpleConstructors) {
writeSimpleConstructors();
}
if(!enableFullConstructor && !enableSimpleConstructors && enableMemberFields) {
writeMinimalConstructor();
}
// Write ToString method
if (enableToString) {
writeToStringMethod();
}
// Write accessor methods
writeAccessMethods();
// Write general purpose equals and hashCode methods
if (enableEquals) {
writeEqualsMethod();
}
if (enableHashCode) {
writeHashCodeMethod();
}
// Write the meta data into a Helper class or
// embed it in the bean class
if (!emitter.isHelperWanted()) {
// Write the helper info into the bean class
helper.setPrintWriter(pw);
}
helper.generate();
|
protected void | writeFileHeader(java.io.PrintWriter pw)Write a common header, including the package name, the class
declaration, and the opening curly brace.
Prints javadoc from WSDL documentation. (Cannot pull up, type DOM not avail)
writeHeaderComments(pw);
writePackage(pw);
try
{
String comments = SchemaUtils.getAnnotationDocumentation(type.getNode());
comments = getJavadocDescriptionPart(comments, false);
if (comments != null && comments.trim().length() > 0)
{
pw.println();
pw.println("/**");
pw.println(comments);
pw.println(" */");
}
}
catch (DOMException e)
{
// no comment
}
// print class declaration
pw.println(getClassModifiers() + getClassText() + getClassName() + ' " + getExtendsText() + getImplementsText() + "{");
|
protected void | writeFullConstructor()Writes the full constructor.
Note that this class is not recommended for
JSR 101 compliant beans, but is provided for
extended classes which may wish to generate a full
constructor.
if (type.isSimpleType()) {
return;
}
// The constructor needs to consider all extended types
Vector extendList = new Vector();
extendList.add(type);
TypeEntry parent = extendType;
while (parent != null) {
if (parent.isSimpleType())
return;
extendList.add(parent);
parent =
SchemaUtils.getComplexElementExtensionBase(parent.getNode(),
emitter.getSymbolTable());
}
// Now generate a list of names and types starting with
// the oldest parent. (Attrs are considered before elements).
Vector paramTypes = new Vector();
Vector paramNames = new Vector();
boolean gotAny = false;
for (int i = extendList.size() - 1; i >= 0; i--) {
TypeEntry te = (TypeEntry) extendList.elementAt(i);
// The names of the inherited parms are mangled
// in case they interfere with local parms.
String mangle = "";
if (i > 0) {
mangle = "_"
+ Utils.xmlNameToJava(te.getQName().getLocalPart())
+ "_";
}
// Process the attributes
Vector attributes = te.getContainedAttributes();
if (attributes != null) {
for (int j = 0; j < attributes.size(); j += 1) {
ContainedAttribute attr = (ContainedAttribute) attributes.get(j);
String name = getAttributeName(attr);
String typeName = attr.getType().getName();
// TODO - What about MinOccurs and Nillable?
// Do they make sense here?
if (attr.getOptional()) {
typeName = Utils.getWrapperType(typeName);
}
paramTypes.add(typeName);
paramNames.add(JavaUtils.getUniqueValue(
helper.reservedPropNames, name));
}
}
// Process the elements
Vector elements = te.getContainedElements();
if (elements != null) {
for (int j = 0; j < elements.size(); j++) {
ElementDecl elem = (ElementDecl) elements.get(j);
if (elem.getAnyElement()) {
if (!gotAny) {
gotAny = true;
paramTypes.add("org.apache.axis.message.MessageElement []");
paramNames.add(Constants.ANYCONTENT);
}
} else {
paramTypes.add(processTypeName(elem,elem.getType().getName()));
String name = elem.getName() == null ? ("param" + i) : elem.getName();
paramNames.add(JavaUtils.getUniqueValue(
helper.reservedPropNames, name));
}
}
}
}
if (isMixed && !isAny && !parentIsAny && !parentIsMixed) {
paramTypes.add("org.apache.axis.message.MessageElement []");
paramNames.add(Constants.ANYCONTENT);
}
// Set the index where the local params start
int localParams = paramTypes.size() - names.size() / 2;
// Now write the constructor signature
if (paramTypes.size() > 0) {
// Prevent name clash between local parameters and the
// parameters for the super class
if(localParams > 0) {
for (int j = 0; j < localParams; j++) {
String name = (String) paramNames.elementAt(j);
if(paramNames.indexOf(name, localParams)!=-1){
paramNames.set(j, "_" + name);
}
}
}
pw.println(" public " + className + "(");
for (int i = 0; i < paramTypes.size(); i++) {
pw.print(" " + paramTypes.elementAt(i) + " "
+ paramNames.elementAt(i));
if ((i + 1) < paramTypes.size()) {
pw.println(",");
} else {
pw.println(") {");
}
}
// Call the extended constructor to set inherited fields
if ((extendType != null) && (localParams > 0)) {
pw.println(" super(");
for (int j = 0; j < localParams; j++) {
pw.print(" " + paramNames.elementAt(j));
if ((j + 1) < localParams) {
pw.println(",");
} else {
pw.println(");");
}
}
}
// Set local fields directly
for (int j = localParams; j < paramNames.size(); j++) {
pw.println(" this." + paramNames.elementAt(j) + " = "
+ paramNames.elementAt(j) + ";");
}
pw.println(" }");
pw.println();
}
|
protected void | writeHashCodeMethod()Writes a general purpose hashCode method.
// The __hashCodeCalc field and synchronized method are necessary
// in case the object has direct or indirect references to itself.
pw.println(" private boolean __hashCodeCalc = false;");
pw.println(" public synchronized int hashCode() {");
pw.println(" if (__hashCodeCalc) {");
pw.println(" return 0;");
pw.println(" }");
pw.println(" __hashCodeCalc = true;");
// Get the hashCode of the super class
String start = "1";
if ((extendType != null) && !type.isSimpleType()) {
start = "super.hashCode()";
}
pw.println(" int _hashCode = " + start + ";");
if (isUnion()) {
pw.println(" if (this._value != null) {");
pw.println(" _hashCode += this._value.hashCode();");
pw.println(" }");
}
for (int i = 0; !isUnion() && (i < names.size()); i += 2) {
String variableType = (String) names.get(i);
String variable = (String) names.get(i + 1);
String get = "get";
if (variableType.equals("boolean")) {
get = "is";
}
if (variableType.equals("int") || variableType.equals("short")
|| variableType.equals("byte")) {
pw.println(" _hashCode += " + get
+ Utils.capitalizeFirstChar(variable) + "();");
} else if (variableType.equals("boolean")) {
pw.println(" _hashCode += (" + get
+ Utils.capitalizeFirstChar(variable)
+ "() ? Boolean.TRUE : Boolean.FALSE).hashCode();");
} else if (variableType.equals("long")) {
pw.println(" _hashCode += new Long(" + get
+ Utils.capitalizeFirstChar(variable)
+ "()).hashCode();");
} else if (variableType.equals("float")) {
pw.println(" _hashCode += new Float(" + get
+ Utils.capitalizeFirstChar(variable)
+ "()).hashCode();");
} else if (variableType.equals("double")) {
pw.println(" _hashCode += new Double(" + get
+ Utils.capitalizeFirstChar(variable)
+ "()).hashCode();");
} else if (variableType.indexOf("[") >= 0) {
// The hashCode calculation for arrays is complicated.
// Wish there was a hashCode method in java.utils.Arrays !
// Get the hashCode for each element of the array which is not an array.
pw.println(" if (" + get
+ Utils.capitalizeFirstChar(variable)
+ "() != null) {");
pw.println(" for (int i=0;");
pw.println(
" i<java.lang.reflect.Array.getLength("
+ get + Utils.capitalizeFirstChar(variable) + "());");
pw.println(" i++) {");
pw.println(
" java.lang.Object obj = java.lang.reflect.Array.get("
+ get + Utils.capitalizeFirstChar(variable) + "(), i);");
pw.println(" if (obj != null &&");
pw.println(" !obj.getClass().isArray()) {");
pw.println(" _hashCode += obj.hashCode();");
pw.println(" }");
pw.println(" }");
pw.println(" }");
} else {
pw.println(" if (" + get
+ Utils.capitalizeFirstChar(variable)
+ "() != null) {");
pw.println(" _hashCode += " + get
+ Utils.capitalizeFirstChar(variable)
+ "().hashCode();");
pw.println(" }");
}
}
// Reset the __hashCodeCalc variable and return
pw.println(" __hashCodeCalc = false;");
pw.println(" return _hashCode;");
pw.println(" }");
pw.println("");
|
protected void | writeMemberFields()Writes the member fields.
// Define the member element of the bean
if (isUnion()) {
pw.println(" private java.lang.String _value;");
return;
}
for (int i = 0; i < names.size(); i += 2) {
// get comments for this field
String comments = "";
if (elements != null)
{
if (elements != null && i < (elements.size()*2))
{
ElementDecl elem = (ElementDecl)elements.get(i/2);
comments = elem.getDocumentation();
}
}
String typeName = (String) names.get(i);
String variable = (String) names.get(i + 1);
// Declare the bean element
if (comments != null && comments.trim().length() > 0)
{
String flatComments = getJavadocDescriptionPart(comments, true).substring(7);
// it will be flat if it fits on one line
pw.println(" /* " + flatComments.trim() + " */");
}
pw.print(" private " + typeName + " " + variable + ";");
// label the attribute fields.
if ((elements == null) || (i >= (elements.size() * 2))) {
pw.println(" // attribute");
} else {
pw.println();
}
pw.println();
}
|
protected void | writeMinimalConstructor()
if (isUnion() || names.size() == 0) {
return;
}
pw.println(" public " + className + "(");
for (int i = 0; i < names.size(); i += 2) {
String typeName = (String) names.get(i);
String variable = (String) names.get(i + 1);
pw.print(" " + typeName + " "
+ variable);
if (i >= names.size() - 2) {
pw.println(") {");
} else {
pw.println(",");
}
}
for (int i = 0; i < names.size(); i += 2) {
String variable = (String) names.get(i + 1);
pw.println(" this." + variable + " = " + variable + ";");
if (i >= names.size() - 2) {
break;
}
}
pw.println(" }");
pw.println();
|
protected void | writeSimpleConstructors()Writes the constructors for SimpleTypes.
Writes a constructor accepting a string and
a constructor accepting the simple java type.
// If this is a simple type,need to emit a string
// constructor and a value construtor.
if (!type.isSimpleType())
return;
pw.println(" // " + Messages.getMessage("needStringCtor"));
// Simple types without simpleValueTypes are derived classes.
// Inherit the simple constructor.
if (simpleValueTypes.size() == 0)
{
if (extendType != null)
{
// Find the java type of the most base type.
TypeEntry baseType = type;
while (true)
{
TypeEntry superType = SchemaUtils.getBaseType(
baseType, emitter.getSymbolTable());
if (superType == null)
break;
else
baseType = superType;
}
String baseJavaType = baseType.getName();
pw.println(" public " + className + "("
+ baseJavaType + " _value) {");
pw.println(" super(_value);");
pw.println(" }");
pw.println();
}
}
else if (isUnion() || simpleValueTypes.get(0).equals("java.lang.String")) {
pw.println(" public " + className
+ "(java.lang.String _value) {");
pw.println(" this._value = _value;");
pw.println(" }");
int i = 0;
for (Iterator iterator = simpleValueTypes.iterator();
iterator.hasNext();) {
String typeName = (String) iterator.next();
if (typeName.equals("java.lang.String")) {
i += 2;
continue;
}
String capName = "_value";
if (isUnion()) {
// names and simpleValueTypes should match as
// union is over simple types
String name = (String) names.get(i + 1);
capName = Utils.capitalizeFirstChar(name);
}
pw.println(" public " + className + "(" + typeName
+ " _value) {");
pw.println(" set" + capName + "(_value);");
pw.println(" }");
pw.println();
i += 2;
}
} else if (simpleValueTypes.size() == 1) {
pw.println(" public " + className + "("
+ simpleValueTypes.get(0) + " _value) {");
pw.println(" this._value = _value;");
pw.println(" }");
pw.println(" public " + className
+ "(java.lang.String _value) {");
writeSimpleTypeGetter((String) simpleValueTypes.get(0), null,
"this._value =");
pw.println(" }");
pw.println();
}
|
protected void | writeSimpleTypeGetter(java.lang.String simpleValueType, java.lang.String name, java.lang.String returnString)Method writeSimpleTypeGetter
// Make sure we wrap base types with its Object type
String wrapper = JavaUtils.getWrapper(simpleValueType);
if (wrapper != null) {
pw.println(" " + returnString + " new " + wrapper
+ "(_value)." + simpleValueType + "Value();");
} else {
if (simpleValueType.equals("byte[]")) {
String encoder = getBinaryTypeEncoderName ("_value");
pw.println(" " + returnString
+ " " + encoder + ".decode(_value);");
} else if (simpleValueType.equals("org.apache.axis.types.URI")) {
pw.println(" try {");
pw.println(" " + returnString
+ " new org.apache.axis.types.URI(_value);");
pw.println(" }");
pw.println(
" catch (org.apache.axis.types.URI.MalformedURIException mue) {");
pw.println(
" throw new java.lang.RuntimeException(mue.toString());");
pw.println(" }");
} else if (simpleValueType.equals("java.util.Date")) {
pw.println(" try {");
pw.println(
" " + returnString
+ " (java.text.DateFormat.getDateTimeInstance()).parse(_value);");
pw.println(" }");
pw.println(" catch (java.text.ParseException e){");
pw.println(
" throw new java.lang.RuntimeException(e.toString());");
pw.println(" }");
} else if (simpleValueType.equals("java.util.Calendar")) {
pw.println(" java.util.Calendar cal =");
pw.println(
" (java.util.Calendar) new org.apache.axis.encoding.ser.CalendarDeserializer(");
pw.println(
" java.lang.String.class, org.apache.axis.Constants.XSD_STRING).makeValue(_value);");
pw.println(" " + returnString + " cal;");
} else if (enumerationTypes.contains(simpleValueType)) {
// we're generating code that will obtain a reference to an enumeration: use the
// class forString interface, not the constructor. Bug 19069
pw.println(" " + returnString + " " + simpleValueType
+ ".fromString(_value);");
} else {
pw.println(" " + returnString + " new "
+ simpleValueType + "(_value);");
}
}
|
protected void | writeSimpleTypeSetter(java.lang.String simpleValueType)Method writeSimpleTypeSetter
String wrapper = JavaUtils.getWrapper(simpleValueType);
if (wrapper != null) {
pw.println(" this._value = new " + wrapper
+ "(_value).toString();");
} else {
if (simpleValueType.equals("byte[]")) {
String encoder = getBinaryTypeEncoderName ("_value");
pw.println(
" this._value = _value == null ? null : " +
encoder + ".encode(_value);");
} else if (simpleValueType.equals("java.util.Calendar")) {
pw.println(
" this._value = _value == null ? null : new org.apache.axis.encoding.ser.CalendarSerializer().getValueAsString(_value, null);");
} else {
pw.println(
" this._value = _value == null ? null : _value.toString();");
}
}
|
protected void | writeToStringMethod()Writes the toString method
Currently the toString method is only written for
simpleTypes.
// If this is a simple type, emit a toString
if (simpleValueTypes.size() == 0) {
return;
}
pw.println(" // " + Messages.getMessage("needToString"));
pw.println(" public java.lang.String toString() {");
if (isUnion() || simpleValueTypes.get(0).equals("java.lang.String")) {
pw.println(" return _value;");
} else {
String wrapper =
JavaUtils.getWrapper((String) simpleValueTypes.get(0));
if (wrapper != null) {
pw.println(" return new " + wrapper
+ "(_value).toString();");
} else {
String simpleValueType0 = (String)simpleValueTypes.get(0);
if (simpleValueType0.equals("byte[]")) {
String encoder = getBinaryTypeEncoderName ("_value");
pw.println(
" return _value == null ? null : " +
encoder + ".encode(_value);");
} else if (simpleValueType0.equals("java.util.Calendar")) {
pw.println(
" return _value == null ? null : new org.apache.axis.encoding.ser.CalendarSerializer().getValueAsString(_value, null);");
} else {
pw.println(
" return _value == null ? null : _value.toString();");
}
}
}
pw.println(" }");
pw.println();
|