001package co.codewizards.cloudstore.core.dto.jaxb; 002 003import java.util.HashSet; 004import java.util.Iterator; 005import java.util.ServiceLoader; 006import java.util.Set; 007 008import javax.xml.bind.JAXBContext; 009import javax.xml.bind.JAXBException; 010 011public class CloudStoreJaxbContext { 012 013 private static class JaxbContextHolder { 014 private static final JAXBContext jaxbContext; 015 static { 016 final Set<Class<?>> collectedClassesToBeBound = new HashSet<Class<?>>(); 017 final ServiceLoader<CloudStoreJaxbContextProvider> serviceLoader = ServiceLoader.load(CloudStoreJaxbContextProvider.class); 018 for (final Iterator<CloudStoreJaxbContextProvider> it = serviceLoader.iterator(); it.hasNext(); ) { 019 final CloudStoreJaxbContextProvider provider = it.next(); 020 final Class<?>[] classesToBeBound = provider.getClassesToBeBound(); 021 if (classesToBeBound != null) { 022 for (final Class<?> clazz : classesToBeBound) 023 collectedClassesToBeBound.add(clazz); 024 } 025 } 026 try { 027 final Class<?>[] ca = collectedClassesToBeBound.toArray(new Class[collectedClassesToBeBound.size()]); 028 jaxbContext = JAXBContext.newInstance(ca); 029 } catch (JAXBException x) { 030 throw new RuntimeException(x); 031 } 032 } 033 } 034 035 public static JAXBContext getJaxbContext() { 036 return JaxbContextHolder.jaxbContext; 037 } 038}