package org.richfaces.demo.tree; import java.net.URL; import java.util.List; import javax.faces.FacesException; import javax.faces.bean.ApplicationScoped; import javax.faces.bean.ManagedBean; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; @ManagedBean(name = "cdsParser") @ApplicationScoped public class CDParser { private List<CDXmlDescriptor> cdsList; @XmlRootElement(name = "CATALOG") private static final class CDsHolder { private List<CDXmlDescriptor> cds; @XmlElement(name = "CD") public List<CDXmlDescriptor> getCds() { return cds; } @SuppressWarnings("unused") public void setCds(List<CDXmlDescriptor> cds) { this.cds = cds; } } public synchronized List<CDXmlDescriptor> getCdsList() { if (cdsList == null) { ClassLoader ccl = Thread.currentThread().getContextClassLoader(); URL resource = ccl.getResource("org/richfaces/demo/tree/CDCatalog.xml"); JAXBContext context; try { context = JAXBContext.newInstance(CDsHolder.class); CDsHolder cdsHolder = (CDsHolder) context.createUnmarshaller().unmarshal(resource); cdsList = cdsHolder.getCds(); } catch (JAXBException e) { throw new FacesException(e.getMessage(), e); } } return cdsList; } }