2011-08-04 22 views
6

Al crear un nuevo XMLGregorianCalendar ejemplo a esto, lo que realmente necesita para manejar la excepción DatatypeConfigurationException, o puedo suprimirlo de forma segura?DatatypeConfigurationException al crear nueva XMLGregorianCalendar

try { 
    header.setRequestDateTime(
       DatatypeFactory.newInstance().newXMLGregorianCalendar(
         new GregorianCalendar())); 
} catch (DatatypeConfigurationException e) { 
    // pass 
} 

Mi interpretación de the documentation y algo de lógica áspera dice que esto no sería realmente una excepción a menos que se dé un mal de entrada. Y ese no puede ser el caso en el ejemplo anterior. Esto es lo que los JavaDocs dicen al respecto:

Si la propiedad del sistema especificado por DATATYPEFACTORY_PROPERTY, "javax.xml.datatype.DatatypeFactory", existe, una clase con el nombre de valor de la propiedad se crea una instancia. Cualquier Excepción lanzada durante el proceso de creación de instancias se envuelve como .

¿Estoy en lo cierto al pensar que puedo suprimir de forma segura esta excepción comprobada?

Respuesta

5

La excepción de tipo DatatypeConfigurationException puede suceder solamente en el método estático llamada

DataTypeFatory factory = DataTypeFactory.newInstance(); 

Por lo tanto hay que tratar sólo una vez . Pero debe tratarlo una vez, de lo contrario no puede crear sus instancias XMLGregorianCalendar, en absoluto.

Para decirlo con claridad la llamada

XMLGregorianCalendar xmlCal = factory.newXMLGregorianCalendar(new GregorianCalendar()); 

Nunca tiros un DatatypeConfigurationException, por lo tanto usted no tiene que tratarlo, al crear representaciones XML de sus GregorianCalendar casos. - A partir del Java SE API en la última llamada, solo puede ocurrir un NullPointerException.

+0

Gracias. Después de leerlo con más cuidado, me doy cuenta de que tienes razón. La implicación es que, sí, necesita ser tratada. –

+2

¿Por qué DataTypeFactory.newInstance() arrojaría la DataTypeConfigurationException en absoluto? – IcedDante

0

Si opress a esta excepción, no establece el tiempo de solicitud de encabezado. En este sentido, sí, es una excepción grave . No puede generar representaciones XML de las instancias de fecha y hora.

Por otro lado, su programa no tendrá crash. No es un error VM crítico. Pero tienes que lidiar con eso. No podrás arreglarlo en tiempo de ejecución. Su servidor y El entorno de VM debe configurarse como corresponda.

+0

Como sé que estoy pasando al constructor el valor 'new GregorianCalendar()', esta excepción nunca ocurrirá. Creo que el único momento en que una excepción puede ocurrir aquí es si paso malos argumentos, que no es el caso para 'new GregorianCalendar()'. Un ejemplo similar: sé que la división puede presentar una excepción, cuando divido por cero. ¿Eso significa que debería envolver algo como 'PI doble = 22.0/7.0;' en un try/catch? Aunque la división ** puede ** presentar una excepción en algunos casos, sé que nunca lo hará en este caso. –