in jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/descriptor/DescriptorFactory.java [159:345]
public static Descriptor buildDescriptor(final byte[] bytes) {
try {
// Validate descriptor
SchemaFactory schemaFactory = SchemaFactory.newInstance(XSD_SCHEMA_LANGUAGE);
Schema schema = schemaFactory.newSchema(DescriptorFactory.class.getResource(JBI_DESCRIPTOR_XSD));
Validator validator = schema.newValidator();
validator.setErrorHandler(new ErrorHandler() {
public void warning(SAXParseException exception) throws SAXException {
//log.debug("Validation warning on " + url + ": " + exception);
}
public void error(SAXParseException exception) throws SAXException {
//log.info("Validation error on " + url + ": " + exception);
}
public void fatalError(SAXParseException exception) throws SAXException {
throw exception;
}
});
validator.validate(new StreamSource(new ByteArrayInputStream(bytes)));
// Parse descriptor
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
DocumentBuilder docBuilder = factory.newDocumentBuilder();
Document doc = docBuilder.parse(new ByteArrayInputStream(bytes));
Element jbi = doc.getDocumentElement();
Descriptor desc = new Descriptor();
desc.setVersion(Double.parseDouble(getAttribute(jbi, VERSION)));
Element child = getFirstChildElement(jbi);
if (COMPONENT.equals(child.getLocalName())) {
ComponentDesc component = new ComponentDesc();
component.setType(child.getAttribute(TYPE));
component.setComponentClassLoaderDelegation(getAttribute(child, COMPONENT_CLASS_LOADER_DELEGATION));
component.setBootstrapClassLoaderDelegation(getAttribute(child, BOOTSTRAP_CLASS_LOADER_DELEGATION));
List<SharedLibraryList> sls = new ArrayList<SharedLibraryList>();
DocumentFragment ext = null;
for (Element e = getFirstChildElement(child); e != null; e = getNextSiblingElement(e)) {
if (IDENTIFICATION.equals(e.getLocalName())) {
component.setIdentification(readIdentification(e));
} else if (COMPONENT_CLASS_NAME.equals(e.getLocalName())) {
component.setComponentClassName(getText(e));
component.setDescription(getAttribute(e, DESCRIPTION));
} else if (COMPONENT_CLASS_PATH.equals(e.getLocalName())) {
ClassPath componentClassPath = new ClassPath();
ArrayList<String> l = new ArrayList<String>();
for (Element e2 = getFirstChildElement(e); e2 != null; e2 = getNextSiblingElement(e2)) {
if (PATH_ELEMENT.equals(e2.getLocalName())) {
l.add(getText(e2));
}
}
componentClassPath.setPathList(l);
component.setComponentClassPath(componentClassPath);
} else if (BOOTSTRAP_CLASS_NAME.equals(e.getLocalName())) {
component.setBootstrapClassName(getText(e));
} else if (BOOTSTRAP_CLASS_PATH.equals(e.getLocalName())) {
ClassPath bootstrapClassPath = new ClassPath();
ArrayList<String> l = new ArrayList<String>();
for (Element e2 = getFirstChildElement(e); e2 != null; e2 = getNextSiblingElement(e2)) {
if (PATH_ELEMENT.equals(e2.getLocalName())) {
l.add(getText(e2));
}
}
bootstrapClassPath.setPathList(l);
component.setBootstrapClassPath(bootstrapClassPath);
} else if (SHARED_LIBRARY.equals(e.getLocalName())) {
SharedLibraryList sl = new SharedLibraryList();
sl.setName(getText(e));
sl.setVersion(getAttribute(e, VERSION));
sls.add(sl);
} else {
if (ext == null) {
ext = doc.createDocumentFragment();
}
ext.appendChild(e);
}
}
component.setSharedLibraries(sls.toArray(new SharedLibraryList[sls.size()]));
if (ext != null) {
InstallationDescriptorExtension descriptorExtension = new InstallationDescriptorExtension();
descriptorExtension.setDescriptorExtension(ext);
component.setDescriptorExtension(descriptorExtension);
}
desc.setComponent(component);
} else if (SHARED_LIBRARY.equals(child.getLocalName())) {
SharedLibraryDesc sharedLibrary = new SharedLibraryDesc();
sharedLibrary.setClassLoaderDelegation(getAttribute(child, CLASS_LOADER_DELEGATION));
sharedLibrary.setVersion(getAttribute(child, VERSION));
for (Element e = getFirstChildElement(child); e != null; e = getNextSiblingElement(e)) {
if (IDENTIFICATION.equals(e.getLocalName())) {
sharedLibrary.setIdentification(readIdentification(e));
} else if (SHARED_LIBRARY_CLASS_PATH.equals(e.getLocalName())) {
ClassPath sharedLibraryClassPath = new ClassPath();
ArrayList<String> l = new ArrayList<String>();
for (Element e2 = getFirstChildElement(e); e2 != null; e2 = getNextSiblingElement(e2)) {
if (PATH_ELEMENT.equals(e2.getLocalName())) {
l.add(getText(e2));
}
}
sharedLibraryClassPath.setPathList(l);
sharedLibrary.setSharedLibraryClassPath(sharedLibraryClassPath);
}
}
desc.setSharedLibrary(sharedLibrary);
} else if (SERVICE_ASSEMBLY.equals(child.getLocalName())) {
ServiceAssemblyDesc serviceAssembly = new ServiceAssemblyDesc();
ArrayList<ServiceUnitDesc> sus = new ArrayList<ServiceUnitDesc>();
for (Element e = getFirstChildElement(child); e != null; e = getNextSiblingElement(e)) {
if (IDENTIFICATION.equals(e.getLocalName())) {
serviceAssembly.setIdentification(readIdentification(e));
} else if (SERVICE_UNIT.equals(e.getLocalName())) {
ServiceUnitDesc su = new ServiceUnitDesc();
for (Element e2 = getFirstChildElement(e); e2 != null; e2 = getNextSiblingElement(e2)) {
if (IDENTIFICATION.equals(e2.getLocalName())) {
su.setIdentification(readIdentification(e2));
} else if (TARGET.equals(e2.getLocalName())) {
Target target = new Target();
for (Element e3 = getFirstChildElement(e2); e3 != null; e3 = getNextSiblingElement(e3)) {
if (ARTIFACTS_ZIP.equals(e3.getLocalName())) {
target.setArtifactsZip(getText(e3));
} else if (COMPONENT_NAME.equals(e3.getLocalName())) {
target.setComponentName(getText(e3));
}
}
su.setTarget(target);
}
}
sus.add(su);
} else if (CONNECTIONS.equals(e.getLocalName())) {
Connections connections = new Connections();
ArrayList<Connection> cns = new ArrayList<Connection>();
for (Element e2 = getFirstChildElement(e); e2 != null; e2 = getNextSiblingElement(e2)) {
if (CONNECTION.equals(e2.getLocalName())) {
Connection cn = new Connection();
for (Element e3 = getFirstChildElement(e2); e3 != null; e3 = getNextSiblingElement(e3)) {
if (CONSUMER.equals(e3.getLocalName())) {
Consumer consumer = new Consumer();
consumer.setInterfaceName(readAttributeQName(e3, INTERFACE_NAME));
consumer.setServiceName(readAttributeQName(e3, SERVICE_NAME));
consumer.setEndpointName(getAttribute(e3, ENDPOINT_NAME));
cn.setConsumer(consumer);
} else if (PROVIDER.equals(e3.getLocalName())) {
Provider provider = new Provider();
provider.setServiceName(readAttributeQName(e3, SERVICE_NAME));
provider.setEndpointName(getAttribute(e3, ENDPOINT_NAME));
cn.setProvider(provider);
}
}
cns.add(cn);
}
}
connections.setConnections(cns.toArray(new Connection[cns.size()]));
serviceAssembly.setConnections(connections);
}
}
serviceAssembly.setServiceUnits(sus.toArray(new ServiceUnitDesc[sus.size()]));
desc.setServiceAssembly(serviceAssembly);
} else if (SERVICES.equals(child.getLocalName())) {
Services services = new Services();
services.setBindingComponent(Boolean.valueOf(getAttribute(child, BINDING_COMPONENT)).booleanValue());
ArrayList<Provides> provides = new ArrayList<Provides>();
ArrayList<Consumes> consumes = new ArrayList<Consumes>();
for (Element e = getFirstChildElement(child); e != null; e = getNextSiblingElement(e)) {
if (PROVIDES.equals(e.getLocalName())) {
Provides p = new Provides();
p.setInterfaceName(readAttributeQName(e, INTERFACE_NAME));
p.setServiceName(readAttributeQName(e, SERVICE_NAME));
p.setEndpointName(getAttribute(e, ENDPOINT_NAME));
provides.add(p);
} else if (CONSUMES.equals(e.getLocalName())) {
Consumes c = new Consumes();
c.setInterfaceName(readAttributeQName(e, INTERFACE_NAME));
c.setServiceName(readAttributeQName(e, SERVICE_NAME));
c.setEndpointName(getAttribute(e, ENDPOINT_NAME));
c.setLinkType(getAttribute(e, LINK_TYPE));
consumes.add(c);
}
}
services.setProvides(provides.toArray(new Provides[provides.size()]));
services.setConsumes(consumes.toArray(new Consumes[consumes.size()]));
desc.setServices(services);
}
checkDescriptor(desc);
return desc;
} catch (Exception e) {
throw new RuntimeException(e);
}
}