2011-08-06 11 views
9

I am using some non-standard extensions de la implementación de EclipseLink de JAXB, y para habilitar esa implementación, tengo que configurarlo usando jaxb.properties. Funciona bien.¿Puedo reemplazar jaxb.properties con código?

Sin embargo, debido a un error de compilación, el archivo de propiedades no se incluyó en el lugar correcto, lo que dio como resultado el uso de JAXB predeterminado, que sin errores simplemente continuó analizando el archivo XML, ignorando la extensión no estándar. dejándome con un frijol que no funciona.

Para hacer esto más robusto, me gustaría deshacerme del archivo de propiedades y especificar la configuración de contexto en el código. Ya tengo una dependencia en tiempo de compilación en EclipseLink debido a sus anotaciones, y no necesito esta parte configurable en el momento del despliegue (de hecho, viendo lo que puede salir mal, no lo quiero configurable).

+0

considerar una alternativa: la prueba de la presencia de jaxb.properties al final de la construcción. –

Respuesta

12

podría hacer lo siguiente para obtener una JAXB EclipseLink (moxy) JAXBContext sin un archivo jaxb.properties:

import java.io.File; 

import javax.xml.bind.JAXBContext; 
import javax.xml.bind.Marshaller; 
import javax.xml.bind.Unmarshaller; 

import org.eclipse.persistence.jaxb.JAXBContextFactory; 

public class Demo { 

    public static void main(String[] args) throws Exception { 
     //JAXBContext jc = JAXBContext.newInstance(Animals.class); 
     JAXBContext jc = JAXBContextFactory.createContext(new Class[] {Animals.class}, null); 

     Unmarshaller unmarshaller = jc.createUnmarshaller(); 
     File xml = new File("src/forum6871469/input.xml"); 
     Animals animals = (Animals) unmarshaller.unmarshal(xml); 

     Marshaller marshaller = jc.createMarshaller(); 
     marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
     marshaller.marshal(animals, System.out); 
    } 

} 
+0

¿cómo puedo establecer la propiedad MarshallerProperties.JSON_INCLUDE_ROOT en el código anterior? – Vivek