Dexels / navajo

Navajo Service-oriented Applications
GNU Affero General Public License v3.0
9 stars 5 forks source link

Objects returned from getter in adapter should be resolved without having to specify class in xml mapping file #606

Closed aschoneveld closed 2 years ago

aschoneveld commented 2 years ago

Currently if an 'adapter' returns an non-standard object like:

public Customer getCustomer() {
   return customer;
}

The Customer class needs to be defined in the adapter mapping xml file. However, by changing this implementation in TslCompiler:

 private Class resolveClassUsingService(String className) {
                BundleContext bc = Version.getDefaultBundleContext();
                Collection<ServiceReference<Class>> sr;
                try {
                        sr = bc.getServiceReferences(Class.class, "(adapterClass="
                                        + className + ")");
                        Class result = bc.getService(sr.iterator().next());
                        return result;
                } catch (InvalidSyntaxException e) {
                        logger.error("Adapter resolution error: ", e);
                        return null;
                }

        }

By having it support a Class.forName() as well. this is not required.

Basically what is written in line 2042 of TslCompiler:

  if (Version.osgiActive()) {
                                                        localContextClass = resolveClassUsingService(className);
                                                } else {
                                                        localContextClass = Class.forName(className, false,
                                                                        loader);
                                                }
aschoneveld commented 2 years ago

Done in sendratsports