summaryrefslogtreecommitdiffstats
path: root/java/sca/modules/interface-java/src/main
diff options
context:
space:
mode:
authorlresende <lresende@13f79535-47bb-0310-9956-ffa450edef68>2009-10-15 18:40:03 +0000
committerlresende <lresende@13f79535-47bb-0310-9956-ffa450edef68>2009-10-15 18:40:03 +0000
commit7a647f04ea75592a23e6b4bf1d7eec61878948e0 (patch)
tree5d85f06b931e5f13735bb2804b3dd880c47a8402 /java/sca/modules/interface-java/src/main
parent529acd94adb365c91b88776cffdc858f09e241d4 (diff)
Enhancing extensibility to dinamycally load interface visitors
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@825612 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java/sca/modules/interface-java/src/main')
-rw-r--r--java/sca/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/DefaultJavaInterfaceFactory.java79
-rw-r--r--java/sca/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaInterfaceIntrospectorImpl.java12
2 files changed, 79 insertions, 12 deletions
diff --git a/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/DefaultJavaInterfaceFactory.java b/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/DefaultJavaInterfaceFactory.java
index 41cf08d771..374cb2029a 100644
--- a/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/DefaultJavaInterfaceFactory.java
+++ b/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/DefaultJavaInterfaceFactory.java
@@ -19,15 +19,24 @@
package org.apache.tuscany.sca.interfacedef.java;
import java.io.IOException;
+import java.lang.reflect.Constructor;
import java.util.Collection;
import java.util.List;
+import java.util.logging.Logger;
+import org.apache.tuscany.sca.core.DefaultExtensionPointRegistry;
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
import org.apache.tuscany.sca.core.FactoryExtensionPoint;
+import org.apache.tuscany.sca.core.UtilityExtensionPoint;
import org.apache.tuscany.sca.extensibility.ServiceDeclaration;
import org.apache.tuscany.sca.extensibility.ServiceDiscovery;
import org.apache.tuscany.sca.interfacedef.java.impl.JavaInterfaceFactoryImpl;
import org.apache.tuscany.sca.interfacedef.java.impl.PolicyJavaInterfaceVisitor;
import org.apache.tuscany.sca.interfacedef.java.introspect.JavaInterfaceVisitor;
+import org.apache.tuscany.sca.monitor.Monitor;
+import org.apache.tuscany.sca.monitor.MonitorFactory;
+import org.apache.tuscany.sca.monitor.Problem;
+import org.apache.tuscany.sca.monitor.Problem.Severity;
import org.apache.tuscany.sca.policy.PolicyFactory;
/**
@@ -36,15 +45,40 @@ import org.apache.tuscany.sca.policy.PolicyFactory;
* @version $Rev$ $Date$
*/
public class DefaultJavaInterfaceFactory extends JavaInterfaceFactoryImpl implements JavaInterfaceFactory {
+ private static final Logger logger = Logger.getLogger(DefaultJavaInterfaceFactory.class.getName());
+
+ private ExtensionPointRegistry extensionPointRegistry;
private FactoryExtensionPoint modelFactoryExtensionPoint;
+ private Monitor monitor = null;
private boolean loadedVisitors;
public DefaultJavaInterfaceFactory() {
+ super();
+ this.extensionPointRegistry = new DefaultExtensionPointRegistry();
+
+ UtilityExtensionPoint utilities = this.extensionPointRegistry.getExtensionPoint(UtilityExtensionPoint.class);
+ MonitorFactory monitorFactory = utilities.getUtility(MonitorFactory.class);
+ if (monitorFactory != null) {
+ this.monitor = monitorFactory.createMonitor();
+ }
+
}
+ /*
public DefaultJavaInterfaceFactory(FactoryExtensionPoint modelFactoryExtensionPoint) {
+ this.extensionPointRegistry = new DefaultExtensionPointRegistry();
+
+ this.extensionPointRegistry = new DefaultExtensionPointRegistry();
this.modelFactoryExtensionPoint = modelFactoryExtensionPoint;
+
+ UtilityExtensionPoint utilities = this.extensionPointRegistry.getExtensionPoint(UtilityExtensionPoint.class);
+ MonitorFactory monitorFactory = utilities.getUtility(MonitorFactory.class);
+ if (monitorFactory != null) {
+ this.monitor = monitorFactory.createMonitor();
+ }
+
}
+ */
@Override
public List<JavaInterfaceVisitor> getInterfaceVisitors() {
@@ -77,17 +111,26 @@ public class DefaultJavaInterfaceFactory extends JavaInterfaceFactoryImpl implem
// Load data bindings
for (ServiceDeclaration visitorDeclaration: visitorDeclarations) {
- JavaInterfaceVisitor visitor;
+ JavaInterfaceVisitor visitor = null;
try {
Class<JavaInterfaceVisitor> visitorClass = (Class<JavaInterfaceVisitor>)visitorDeclaration.loadClass();
- visitor = visitorClass.newInstance();
- } catch (ClassNotFoundException e) {
- throw new IllegalArgumentException(e);
- } catch (InstantiationException e) {
- throw new IllegalArgumentException(e);
- } catch (IllegalAccessException e) {
- throw new IllegalArgumentException(e);
+
+ try {
+ Constructor<JavaInterfaceVisitor> constructor = visitorClass.getConstructor(ExtensionPointRegistry.class);
+ visitor = constructor.newInstance(extensionPointRegistry);
+ } catch (NoSuchMethodException e) {
+ visitor = visitorClass.newInstance();
+ }
+
+
+ } catch (Exception e) {
+ IllegalStateException ie = new IllegalStateException(e);
+ error("IllegalStateException", visitor, ie);
+ throw ie;
}
+
+ logger.fine("Adding Java Interface visitor: " + visitor.getClass().getName());
+
addInterfaceVisitor(visitor);
}
@@ -95,5 +138,23 @@ public class DefaultJavaInterfaceFactory extends JavaInterfaceFactoryImpl implem
}
-
+ /**
+ * Report a exception.
+ *
+ * @param problems
+ * @param message
+ * @param model
+ */
+ private void error(String message, Object model, Exception ex) {
+ if (monitor != null) {
+ Problem problem =
+ monitor.createProblem(this.getClass().getName(),
+ "interface-javaxml-validation-messages.properties",
+ Severity.ERROR,
+ model,
+ message,
+ ex);
+ monitor.problem(problem);
+ }
+ }
}
diff --git a/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaInterfaceIntrospectorImpl.java b/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaInterfaceIntrospectorImpl.java
index 36f1fbe23e..6b8ea60517 100644
--- a/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaInterfaceIntrospectorImpl.java
+++ b/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaInterfaceIntrospectorImpl.java
@@ -61,14 +61,20 @@ public class JavaInterfaceIntrospectorImpl {
private static final String UNKNOWN_DATABINDING = null;
+ private JavaInterfaceFactory javaFactory = null;
private List<JavaInterfaceVisitor> visitors = new ArrayList<JavaInterfaceVisitor>();
+ private boolean loadedVisitors;
public JavaInterfaceIntrospectorImpl(JavaInterfaceFactory javaFactory) {
- this.visitors = javaFactory.getInterfaceVisitors();
+ this.javaFactory = javaFactory;
}
- public void introspectInterface(JavaInterface javaInterface, Class<?> clazz)
- throws InvalidInterfaceException {
+ public void introspectInterface(JavaInterface javaInterface, Class<?> clazz) throws InvalidInterfaceException {
+
+ if(!loadedVisitors) {
+ this.visitors = javaFactory.getInterfaceVisitors();
+ }
+
javaInterface.setJavaClass(clazz);
boolean remotable = clazz.isAnnotationPresent(Remotable.class);