* <p>INTERNAL:
* Create a Project using OXM metadata. The given classloader is expected
* to successfully load 'META-INF/eclipselink-dbws-ox.xml'.
*/
protected Project loadOXMetadata(ClassLoader xrdecl) {
Project oxProject = null;
InputStream inStream = null;
String searchPath = null;
// try "META-INF/" and "/META-INF/"
for (String prefix : META_INF_PATHS) {
searchPath = prefix + Util.DBWS_OX_XML;
inStream = xrdecl.getResourceAsStream(searchPath);
if (inStream != null) {
break;
}
}
if (inStream != null) {
Map<String, OXMMetadataSource> metadataMap = null;
StreamSource xml = new StreamSource(inStream);
try {
JAXBContext jc = JAXBContext.newInstance(XmlBindingsModel.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
JAXBElement<XmlBindingsModel> jaxbElt = unmarshaller.unmarshal(xml, XmlBindingsModel.class);
XmlBindingsModel model = jaxbElt.getValue();
if (model.getBindingsList() != null) {
metadataMap = new HashMap<String, OXMMetadataSource>();
for (XmlBindings xmlBindings : model.getBindingsList()) {
metadataMap.put(xmlBindings.getPackageName(), new OXMMetadataSource(xmlBindings));
}
}
} catch (JAXBException jaxbex) {
/* could be legacy project, or none set, so ignore */
return null;
}
if (metadataMap != null) {
Map<String, Map<String, OXMMetadataSource>> properties = new HashMap<String, Map<String, OXMMetadataSource>>();
properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, metadataMap);
try {
DynamicJAXBContext jCtx = DynamicJAXBContextFactory.createContextFromOXM(xrdecl, properties);
oxProject = jCtx.getXMLContext().getSession(0).getProject();
oxProject.setName(xrService.getName().concat(OX_PRJ_SUFFIX));
} catch (JAXBException e) {
throw new DBWSException(OXM_PROCESSING_EX, e);
}
}
}