How an absent element or attribute is handled is not a question of the
class of that element or attribute (and therefore the code of enum
ReturnCode does not matter).
If ReturnType is used as an attribute, the attribute definition may
define use="optional" and default="whatever". Then, xjc will generate
code giving you the default in return for an absent attribute.
If ReturnCode is used as the type of an XML element, then XML Schema
lets you specify minOccurs="0" with that element, indicating it may be
absent, but there is no way to define a default value in XML Schema
for that. (Any application that is not prepared to handle an absent
element that may be omitted has a serious bug.)
If the XML does contain a value, but not matching one of the
<enumeration> values, then the XML is in error, and if this throws an
exception, it is not a "strange error".
-W
On Mon, May 3, 2010 at 1:16 PM, Rochak Gupta <rochak005_at_gmail.com> wrote:
> Hi ,
>
> We are getting strange error while upgrading our code from JAXB1.x to
> JAXB2.x .
>
> Here
>
> <simpleType name="ReturnCode">
>
> <restriction base="string">
>
> <enumeration value="Mal-formed Input"/>
>
> <enumeration value="TN/CLS and SO combination is not found"/>
>
> <enumeration value="SO failed provisioning"/>
>
> <enumeration value="SO not found"/>
>
> </restriction>
>
> </simpleType>
>
>
>
>
>
> In JAXB2.X Returncode enum type is created. I have used the decompiler and
> pasted here
>
> // Decompiled by DJ v3.7.7.81 Copyright 2004 Atanas Neshkov Date: 5/1/2010
> 3:21:30 PM
>
> // Home Page : http://members.fortunecity.com/neshkov/dj.html - Check often
> for new version!
>
> // Decompiler options: packimports(3)
>
> // Source File Name: ReturnCode.java
>
> package com.bellsouth.snt.broadbandos.idm.xml.techaccess.schema;
>
>
>
>
>
> public final class ReturnCode extends Enum
>
> {
>
>
>
> public static ReturnCode[] values()
>
> {
>
> return (ReturnCode[])$VALUES.clone();
>
> }
>
>
>
> public static ReturnCode valueOf(String name)
>
> {
>
> return
> (ReturnCode)Enum.valueOf(com/bellsouth/snt/broadbandos/idm/xml/techaccess/schema/ReturnCode,
> name);
>
> }
>
>
>
> private ReturnCode(String s, int i, String v)
>
> {
>
> super(s, i);
>
> value = v;
>
> }
>
>
>
> public String value()
>
> {
>
> return value;
>
> }
>
>
>
> public static ReturnCode fromValue(String v)
>
> {
>
> ReturnCode arr$[] = values();
>
> int len$ = arr$.length;
>
> for(int i$ = 0; i$ < len$; i$++)
>
> {
>
> ReturnCode c = arr$[i$];
>
> if(c.value.equals(v))
>
> return c;
>
> }
>
>
>
> throw new IllegalArgumentException(v);
>
> }
>
>
>
> public static final ReturnCode MAL_FORMED_INPUT;
>
> public static final ReturnCode TN_CLS_AND_SO_COMBINATION_IS_NOT_FOUND;
>
> public static final ReturnCode SO_FAILED_PROVISIONING;
>
> public static final ReturnCode SO_NOT_FOUND;
>
> private final String value;
>
> private static final ReturnCode $VALUES[];
>
>
>
> static
>
> {
>
> MAL_FORMED_INPUT = new ReturnCode("MAL_FORMED_INPUT", 0, "Mal-formed
> Input");
>
> TN_CLS_AND_SO_COMBINATION_IS_NOT_FOUND = new
> ReturnCode("TN_CLS_AND_SO_COMBINATION_IS_NOT_FOUND", 1, "TN/CLS and SO
> combination is not found");
>
> SO_FAILED_PROVISIONING = new ReturnCode("SO_FAILED_PROVISIONING", 2,
> "SO failed provisioning");
>
> SO_NOT_FOUND = new ReturnCode("SO_NOT_FOUND", 3, "SO not found");
>
> $VALUES = (new ReturnCode[] {
>
> MAL_FORMED_INPUT, TN_CLS_AND_SO_COMBINATION_IS_NOT_FOUND,
> SO_FAILED_PROVISIONING, SO_NOT_FOUND
>
> });
>
> }
>
> }
>
>
>
>
>
> Now if there is any other value it throws exception . Our concern is can we
> some way or through some external binding some default value to the enum so
> that if its null it takes default value .
>
> Thanks and regards,
>
> Rochak