}
protected void addResourceDefinitions(Bundle bundle, URL resourceConfig) {
OSGiDeploymentDescriptor dd = new OSGiDeploymentDescriptor();
Document ddXML = getDocument(bundle, resourceConfig);
if (ddXML == null)
return;
try {
dd.setBundle(bundle);
dd.load(ddXML, this.getEnvironment());
//
// put all custom serializers in the serializer registry
//
Collection serializerDefinitions = dd.getSerializerDefinitions();
Iterator i = serializerDefinitions.iterator();
SerializerRegistry registry = SerializerRegistry.getInstance();
while (i.hasNext()) {
SerializerDefinition next = (SerializerDefinition) i.next();
Serializer ser = next.create();
Class type = ser.getSerializableType();
Class arrayType = ReflectUtils.getArrayClassFromClass(type);
Serializer arraySer = new ArraySerializer(arrayType, ser);
registry.registerSerializer(type, ser);
registry.registerSerializer(arrayType, arraySer);
}
//
// check for any specified router - this may be used
// as a delegate when trying to resolve a reference
// to a resource
//
RouterDefinition rd = dd.getRouterDefinition();
Class delegateRouter = rd.getRouterClass();
ResourceRouter delegate = null;
//initialize persistence for router
PersistenceDefinition persistenceDef = rd.getPersistenceDefinition();
if(delegateRouter != null){
delegate = rd.newInstance();
if(persistenceDef != null){
RouterPersistence persistence = (RouterPersistence)persistenceDef.newInstance();
delegate.setPersistence(persistence);
}
delegate.initialize();
}
Collection resourceDefs = dd.getResourceDefinitions();
this.addResourceDefinitions(bundle, resourceDefs);
if(delegate != null){
delegateMap.put(bundle, delegate);