package co.codewizards.cloudstore.core.dto.jaxb;
import java.util.HashSet;
import java.util.Iterator;
import java.util.ServiceLoader;
import java.util.Set;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
public class CloudStoreJaxbContext {
private static class JaxbContextHolder {
private static final JAXBContext jaxbContext;
static {
final Set<Class<?>> collectedClassesToBeBound = new HashSet<Class<?>>();
final ServiceLoader<CloudStoreJaxbContextProvider> serviceLoader = ServiceLoader.load(CloudStoreJaxbContextProvider.class);
for (final Iterator<CloudStoreJaxbContextProvider> it = serviceLoader.iterator(); it.hasNext(); ) {
final CloudStoreJaxbContextProvider provider = it.next();
final Class<?>[] classesToBeBound = provider.getClassesToBeBound();
if (classesToBeBound != null) {
for (final Class<?> clazz : classesToBeBound)
collectedClassesToBeBound.add(clazz);
}
}
try {
final Class<?>[] ca = collectedClassesToBeBound.toArray(new Class[collectedClassesToBeBound.size()]);
jaxbContext = JAXBContext.newInstance(ca);
} catch (JAXBException x) {
throw new RuntimeException(x);
}
}
}
public static JAXBContext getJaxbContext() {
return JaxbContextHolder.jaxbContext;
}
}