java - ¿Puedo reemplazar jaxb.properties con código?
xml eclipselink (1)
Puede hacer lo siguiente para obtener un JAXBContext de EclipseLink JAXB (MOXy) 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);
}
}
Estoy utilizando algunas extensiones no estándar de la implementación de JAXB de EclipseLink, y para habilitar esa implementación, tengo que configurarla usando jaxb.properties. Funciona bien.
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 la JAXB predeterminada, que sin ningún error simplemente continuó analizando el archivo XML, ignorando la extensión no estándar, dejándome con un frijol sin trabajo.
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).