JAXB y OpenCms (PARTE II)

21/05/2010       Sergio Raposo Vargas       Java, Programación

Si analizamos bien todas las características comentadas en el apartado anterior, podemos ver como JAXB se adapta perfectamente a OpenCms ya que todos los contenidos son almacenado en XML por lo que podremos generar objetos java equivalentes a nuestros contenidos almacenados, y de esta forma, poder usarlos más fácilmente para la implementación de nuestra lógica.

Entre los distintos usos, podremos usar JAXB para acceder a la información de un contenido de un recurso. A continuación muestro un ejemplo de uso (Trozo de código del módulo de ResourceType Creator)

XsdDefine xsdDefineResult = new XsdDefine();
//Leemos el contenido de la configuarcion del xsd y lo guardamos en un fichero
CmsFile cmsFile = cmsObject.readFile(cms.getRequestContext().getUri());
InputStream xml = new ByteArrayInputStream(cmsFile.getContents());


//Inicializamos el contexto de jaxb y los objetos para realizar el unmarshal
JAXBContext jaxbContext = JAXBContext.newInstance(PAQUETE_JAXB);
Unmarshaller unMarshaller = jaxbContext.createUnmarshaller();
JAXBElement<OpenCmsXsdDefines> opencmsXsdDefine =(JAXBElement<OpenCmsXsdDefines>) unMarshaller.unmarshal(xml);
OpenCmsXsdDefines xsdDefines=opencmsXsdDefine.getValue();

//Nos quedamos con el valor 0
OpenCmsXsdDefine xsdDefine = xsdDefines.getXsdDefine().get(0);


Igualmente, JAXB es posible usarlo para la creación/edición de contenido OpenCms:

Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty("jaxb.formatted.output",new Boolean(true));
ByteArrayOutputStream os = new ByteArrayOutputStream();
marshaller.marshal(xsdDefine, os);
cmsObject.createResource(rutaRecurso, ID_TIPO, os.toByteArray(), properties);