Index: main/java/org/exolab/castor/builder/SourceFactory.java =================================================================== --- main/java/org/exolab/castor/builder/SourceFactory.java (Revision 5965) +++ main/java/org/exolab/castor/builder/SourceFactory.java (Arbeitskopie) @@ -1733,7 +1733,7 @@ boolean useValuesAsName = true; while (enumeration.hasMoreElements()) { Facet facet = (Facet)enumeration.nextElement(); - String possibleId = translateEnumValueToIdentifier(facet.getValue()); + String possibleId = translateEnumValueToIdentifier(facet); if (!JavaNaming.isValidJavaIdentifier(possibleId)) { useValuesAsName = false; break; @@ -1841,7 +1841,7 @@ String typeName = null; String objName = null; - if (useValuesAsName) objName = translateEnumValueToIdentifier(value); + if (useValuesAsName) objName = translateEnumValueToIdentifier(facet); else objName = "VALUE_" + count; //-- create typeName @@ -2073,28 +2073,43 @@ * - the characters |\/?~!@#$%^&*-+=:;., and any whitespace are replaced with _ * @author rhett-sutphin@uiowa.edu */ - private String translateEnumValueToIdentifier(String enumValue) + private String translateEnumValueToIdentifier(Facet facet) { + String enumValue = facet.getValue(); try { - int intVal = Integer.parseInt(enumValue); + int intVal = Integer.parseInt(facet.getValue()); if (intVal >= 0) return "VALUE_" + intVal; return "VALUE_NEG_" + Math.abs(intVal); } catch (NumberFormatException e) { // just keep going } - StringBuffer sb = new StringBuffer(enumValue.toUpperCase()); - char c; - for (int i = 0 ; i < sb.length() ; i++) { - c = sb.charAt(i); - if ("[](){}<>'`\"".indexOf(c) >= 0) { - sb.deleteCharAt(i); - i--; + + XMLBindingComponent component = new XMLBindingComponent(_config); + if (_binding != null) component.setBinding(_binding); + // set binding view + component.setView(facet); + + StringBuffer sb = new StringBuffer(); + + String memberName = component.getJavaMemberName(); + if (memberName != null) { + sb.append(memberName); + } else { + + sb.append(enumValue.toUpperCase()); + char c; + for (int i = 0 ; i < sb.length() ; i++) { + c = sb.charAt(i); + if ("[](){}<>'`\"".indexOf(c) >= 0) { + sb.deleteCharAt(i); + i--; + } + else if (Character.isWhitespace(c) || "\\/?~!@#$%^&*-+=:;.,".indexOf(c) >= 0) { + sb.setCharAt(i, '_'); + } } - else if (Character.isWhitespace(c) || "\\/?~!@#$%^&*-+=:;.,".indexOf(c) >= 0) { - sb.setCharAt(i, '_'); - } } return sb.toString(); } //-- translateEnumValueToIdentifier Index: main/resources/org/exolab/castor/builder/binding/binding.xsd =================================================================== --- main/resources/org/exolab/castor/builder/binding/binding.xsd (Revision 5965) +++ main/resources/org/exolab/castor/builder/binding/binding.xsd (Arbeitskopie) @@ -37,8 +37,7 @@ - - + @@ -50,6 +49,7 @@ + @@ -127,6 +127,7 @@ + @@ -191,15 +192,17 @@ - + Index: build.xml =================================================================== --- build.xml (Revision 5965) +++ build.xml (Arbeitskopie) @@ -798,4 +798,24 @@ + + + + + + + + + + +