You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by js...@apache.org on 2007/04/11 03:34:52 UTC
svn commit: r527362 - in /incubator/tuscany/java/sca/modules:
assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/impl/
core-spring/src/main/java/org/apache/tuscany/java/bean/impl/
implementation-java-runtime/src/test/java/org/apache/tuscany/cor...
Author: jsdelfino
Date: Tue Apr 10 18:34:51 2007
New Revision: 527362
URL: http://svn.apache.org/viewvc?view=rev&rev=527362
Log:
Hooked the introspection of interfaces with the artifact processors. Simplified a little the Java interface introspector interface.
Modified:
incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/impl/BaseArtifactProcessor.java
incubator/tuscany/java/sca/modules/core-spring/src/main/java/org/apache/tuscany/java/bean/impl/BeanJavaInterfaceImpl.java
incubator/tuscany/java/sca/modules/implementation-java-runtime/src/test/java/org/apache/tuscany/core/wire/jdk/JDKInvocationHandlerProxyTestCase.java
incubator/tuscany/java/sca/modules/implementation-java-xml/src/main/java/org/apache/tuscany/implementation/java/processor/HeuristicPojoProcessor.java
incubator/tuscany/java/sca/modules/implementation-java-xml/src/main/java/org/apache/tuscany/implementation/java/processor/ReferenceProcessor.java
incubator/tuscany/java/sca/modules/implementation-java-xml/src/main/java/org/apache/tuscany/implementation/java/processor/ServiceProcessor.java
incubator/tuscany/java/sca/modules/interface-java-xml/src/main/java/org/apache/tuscany/interfacedef/java/introspection/JavaInterfaceIntrospector.java
incubator/tuscany/java/sca/modules/interface-java-xml/src/main/java/org/apache/tuscany/interfacedef/java/introspection/JavaInterfaceProcessor.java
incubator/tuscany/java/sca/modules/interface-java-xml/src/main/java/org/apache/tuscany/interfacedef/java/introspection/impl/JavaInterfaceProcessorRegistryImpl.java
incubator/tuscany/java/sca/modules/interface-java-xml/src/main/java/org/apache/tuscany/interfacedef/java/xml/JavaInterfaceProcessor.java
incubator/tuscany/java/sca/modules/interface-java-xml/src/test/java/org/apache/tuscany/interfacedef/java/introspection/impl/ConversationalIntrospectionTestCase.java
incubator/tuscany/java/sca/modules/interface-java-xml/src/test/java/org/apache/tuscany/interfacedef/java/introspection/impl/JavaInterfaceProcessorRegistryImplTestCase.java
incubator/tuscany/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/interfacedef/java/JavaInterface.java
incubator/tuscany/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/interfacedef/java/impl/JavaInterfaceImpl.java
incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/xml/WSDLInterfaceProcessor.java
Modified: incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/impl/BaseArtifactProcessor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/impl/BaseArtifactProcessor.java?view=diff&rev=527362&r1=527361&r2=527362
==============================================================================
--- incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/impl/BaseArtifactProcessor.java (original)
+++ incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/impl/BaseArtifactProcessor.java Tue Apr 10 18:34:51 2007
@@ -52,7 +52,6 @@
import org.apache.tuscany.assembly.Property;
import org.apache.tuscany.assembly.Reference;
import org.apache.tuscany.assembly.xml.Constants;
-import org.apache.tuscany.interfacedef.Interface;
import org.apache.tuscany.interfacedef.InterfaceContract;
import org.apache.tuscany.interfacedef.Operation;
import org.apache.tuscany.policy.Intent;
@@ -379,25 +378,6 @@
}
/**
- * Resolve an interface.
- * @param interfaze
- * @param resolver
- * @return
- * @throws ContributionResolveException
- */
- protected Interface resolveInterface(Interface interfaze, ArtifactResolver resolver) throws ContributionResolveException {
- if (interfaze != null) {
- interfaze = resolver.resolve(Interface.class, interfaze);
- if (interfaze.isUnresolved()) {
- extensionProcessor.resolve(interfaze, resolver);
- interfaze.setUnresolved(false);
- resolver.add(interfaze);
- }
- }
- return interfaze;
- }
-
- /**
* Resolve an implementation.
* @param implementation
* @param resolver
@@ -423,25 +403,17 @@
*/
protected <C extends Contract> void resolveContracts(List<C> contracts, ArtifactResolver resolver) throws ContributionResolveException {
for (Contract contract: contracts) {
+
+ // Resolve the interface contract
InterfaceContract interfaceContract = contract.getInterfaceContract();
- if (interfaceContract == null)
- continue;
-
- // Resolve interface
- Interface callInterface = interfaceContract.getInterface();
- callInterface = resolveInterface(callInterface, resolver);
- interfaceContract.setInterface(callInterface);
-
- // Resolve callback interface
- Interface callbackInterface = interfaceContract.getCallbackInterface();
- callbackInterface = resolveInterface(callbackInterface, resolver);
- interfaceContract.setCallbackInterface(callbackInterface);
-
+ if (interfaceContract != null) {
+ extensionProcessor.resolve(interfaceContract, resolver);
+ }
+
// Resolve bindings
for (int i = 0, n = contract.getBindings().size(); i < n; i++) {
Binding binding = contract.getBindings().get(i);
- binding = resolver.resolve(Binding.class, binding);
- contract.getBindings().set(i, binding);
+ extensionProcessor.resolve(binding, resolver);
}
}
}
@@ -451,21 +423,14 @@
* @param contracts the list of contracts
* @param resolver the resolver to use to resolve models
*/
- protected <C extends AbstractContract> void resolveAbstractContracts(List<C> contracts, ArtifactResolver resolver) {
+ protected <C extends AbstractContract> void resolveAbstractContracts(List<C> contracts, ArtifactResolver resolver) throws ContributionResolveException {
for (AbstractContract contract: contracts) {
+
+ // Resolve the interface contract
InterfaceContract interfaceContract = contract.getInterfaceContract();
- if (interfaceContract == null)
- continue;
-
- // Resolve interface
- Interface callInterface = interfaceContract.getInterface();
- callInterface = resolver.resolve(Interface.class, callInterface);
- interfaceContract.setInterface(callInterface);
-
- // Resolve callback interface
- Interface callbackInterface = interfaceContract.getCallbackInterface();
- callbackInterface = resolver.resolve(Interface.class, callbackInterface);
- interfaceContract.setCallbackInterface(callbackInterface);
+ if (interfaceContract != null) {
+ extensionProcessor.resolve(interfaceContract, resolver);
+ }
}
}
Modified: incubator/tuscany/java/sca/modules/core-spring/src/main/java/org/apache/tuscany/java/bean/impl/BeanJavaInterfaceImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core-spring/src/main/java/org/apache/tuscany/java/bean/impl/BeanJavaInterfaceImpl.java?view=diff&rev=527362&r1=527361&r2=527362
==============================================================================
--- incubator/tuscany/java/sca/modules/core-spring/src/main/java/org/apache/tuscany/java/bean/impl/BeanJavaInterfaceImpl.java (original)
+++ incubator/tuscany/java/sca/modules/core-spring/src/main/java/org/apache/tuscany/java/bean/impl/BeanJavaInterfaceImpl.java Tue Apr 10 18:34:51 2007
@@ -35,6 +35,7 @@
private String className;
private Class<?> javaClass;
+ private Class<?> callbackClass;
private boolean conversational;
private boolean remotable;
List<Intent> requiredIntents = new ArrayList<Intent>();
@@ -62,6 +63,14 @@
public void setJavaClass(Class<?> javaClass) {
this.javaClass = javaClass;
}
+
+ public Class<?> getCallbackClass() {
+ return callbackClass;
+ }
+
+ public void setCallbackClass(Class<?> callbackClass) {
+ this.callbackClass = callbackClass;
+ }
public boolean isConversational() {
return conversational;
Modified: incubator/tuscany/java/sca/modules/implementation-java-runtime/src/test/java/org/apache/tuscany/core/wire/jdk/JDKInvocationHandlerProxyTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-java-runtime/src/test/java/org/apache/tuscany/core/wire/jdk/JDKInvocationHandlerProxyTestCase.java?view=diff&rev=527362&r1=527361&r2=527362
==============================================================================
--- incubator/tuscany/java/sca/modules/implementation-java-runtime/src/test/java/org/apache/tuscany/core/wire/jdk/JDKInvocationHandlerProxyTestCase.java (original)
+++ incubator/tuscany/java/sca/modules/implementation-java-runtime/src/test/java/org/apache/tuscany/core/wire/jdk/JDKInvocationHandlerProxyTestCase.java Tue Apr 10 18:34:51 2007
@@ -28,6 +28,8 @@
import org.apache.tuscany.core.wire.InvocationChainImpl;
import org.apache.tuscany.core.wire.WireImpl;
import org.apache.tuscany.interfacedef.Operation;
+import org.apache.tuscany.interfacedef.java.JavaInterfaceContract;
+import org.apache.tuscany.interfacedef.java.impl.JavaInterfaceContractImpl;
import org.apache.tuscany.interfacedef.java.introspection.JavaInterfaceProcessorRegistry;
import org.apache.tuscany.interfacedef.java.introspection.impl.JavaInterfaceProcessorRegistryImpl;
import org.apache.tuscany.spi.wire.InvocationChain;
@@ -51,7 +53,9 @@
Wire wire = new WireImpl();
Contract contract = new DefaultAssemblyFactory().createComponentReference();
- registry.introspect(contract, Target.class);
+ JavaInterfaceContract interfaceContract = new JavaInterfaceContractImpl();
+ contract.setInterfaceContract(interfaceContract);
+ interfaceContract.setInterface(registry.introspect(Target.class));
for (Operation operation : contract.getInterfaceContract().getInterface().getOperations()) {
InvocationChain chain = new InvocationChainImpl(operation);
wire.addInvocationChain(operation, chain);
Modified: incubator/tuscany/java/sca/modules/implementation-java-xml/src/main/java/org/apache/tuscany/implementation/java/processor/HeuristicPojoProcessor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-java-xml/src/main/java/org/apache/tuscany/implementation/java/processor/HeuristicPojoProcessor.java?view=diff&rev=527362&r1=527361&r2=527362
==============================================================================
--- incubator/tuscany/java/sca/modules/implementation-java-xml/src/main/java/org/apache/tuscany/implementation/java/processor/HeuristicPojoProcessor.java (original)
+++ incubator/tuscany/java/sca/modules/implementation-java-xml/src/main/java/org/apache/tuscany/implementation/java/processor/HeuristicPojoProcessor.java Tue Apr 10 18:34:51 2007
@@ -52,7 +52,9 @@
import org.apache.tuscany.interfacedef.InvalidInterfaceException;
import org.apache.tuscany.interfacedef.java.JavaFactory;
import org.apache.tuscany.interfacedef.java.JavaInterface;
+import org.apache.tuscany.interfacedef.java.JavaInterfaceContract;
import org.apache.tuscany.interfacedef.java.impl.DefaultJavaFactory;
+import org.apache.tuscany.interfacedef.java.impl.JavaInterfaceContractImpl;
import org.apache.tuscany.interfacedef.util.JavaXMLMapper;
import org.osoa.sca.annotations.Callback;
import org.osoa.sca.annotations.Property;
@@ -572,8 +574,15 @@
throws ProcessingException {
org.apache.tuscany.assembly.Reference reference = factory.createReference();
reference.setName(name);
+ JavaInterfaceContract interfaceContract = new JavaInterfaceContractImpl();
+ reference.setInterfaceContract(interfaceContract);
try {
- interfaceProcessorRegistry.introspect(reference, paramType);
+ JavaInterface callInterface = interfaceProcessorRegistry.introspect(paramType);
+ reference.getInterfaceContract().setInterface(callInterface);
+ if (callInterface.getCallbackClass() != null) {
+ JavaInterface callbackInterface = interfaceProcessorRegistry.introspect(callInterface.getCallbackClass());
+ reference.getInterfaceContract().setCallbackInterface(callbackInterface);
+ }
reference.setMultiplicity(Multiplicity.ZERO_ONE);
} catch (InvalidInterfaceException e1) {
throw new ProcessingException(e1);
@@ -589,7 +598,17 @@
public org.apache.tuscany.assembly.Service createService(Class<?> interfaze) throws InvalidInterfaceException {
org.apache.tuscany.assembly.Service service = factory.createService();
service.setName(interfaze.getSimpleName());
- interfaceProcessorRegistry.introspect(service, interfaze);
+
+ JavaInterfaceContract interfaceContract = new JavaInterfaceContractImpl();
+ service.setInterfaceContract(interfaceContract);
+
+ JavaInterface callInterface = interfaceProcessorRegistry.introspect(interfaze);
+ service.getInterfaceContract().setInterface(callInterface);
+ if (callInterface.getCallbackClass() != null) {
+ JavaInterface callbackInterface = interfaceProcessorRegistry.introspect(callInterface.getCallbackClass());
+ service.getInterfaceContract().setCallbackInterface(callbackInterface);
+ }
+
Interface javaInterface = service.getInterfaceContract().getInterface();
javaInterface.setRemotable(interfaze.getAnnotation(Remotable.class) != null);
service.getInterfaceContract().setInterface(javaInterface);
Modified: incubator/tuscany/java/sca/modules/implementation-java-xml/src/main/java/org/apache/tuscany/implementation/java/processor/ReferenceProcessor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-java-xml/src/main/java/org/apache/tuscany/implementation/java/processor/ReferenceProcessor.java?view=diff&rev=527362&r1=527361&r2=527362
==============================================================================
--- incubator/tuscany/java/sca/modules/implementation-java-xml/src/main/java/org/apache/tuscany/implementation/java/processor/ReferenceProcessor.java (original)
+++ incubator/tuscany/java/sca/modules/implementation-java-xml/src/main/java/org/apache/tuscany/implementation/java/processor/ReferenceProcessor.java Tue Apr 10 18:34:51 2007
@@ -33,6 +33,9 @@
import org.apache.tuscany.implementation.java.introspection.ImplementationProcessorExtension;
import org.apache.tuscany.implementation.java.introspection.ProcessingException;
import org.apache.tuscany.interfacedef.InvalidInterfaceException;
+import org.apache.tuscany.interfacedef.java.JavaInterface;
+import org.apache.tuscany.interfacedef.java.JavaInterfaceContract;
+import org.apache.tuscany.interfacedef.java.impl.JavaInterfaceContractImpl;
import org.osoa.sca.annotations.Reference;
/**
@@ -118,6 +121,9 @@
private org.apache.tuscany.assembly.Reference createReference(JavaElement element, String name) throws ProcessingException {
org.apache.tuscany.assembly.Reference reference = new ReferenceImpl();
+ JavaInterfaceContract interfaceContract = new JavaInterfaceContractImpl();
+ reference.setInterfaceContract(interfaceContract);
+
// reference.setMember((Member)element.getAnchor());
boolean required = false;
Reference ref = element.getAnnotation(Reference.class);
@@ -143,7 +149,12 @@
Type genericType = element.getGenericType();
Class<?> baseType = getBaseType(rawType, genericType);
try {
- interfaceProcessorRegistry.introspect(reference, baseType);
+ JavaInterface callInterface = interfaceProcessorRegistry.introspect(baseType);
+ reference.getInterfaceContract().setInterface(callInterface);
+ if (callInterface.getCallbackClass() != null) {
+ JavaInterface callbackInterface = interfaceProcessorRegistry.introspect(callInterface.getCallbackClass());
+ reference.getInterfaceContract().setCallbackInterface(callbackInterface);
+ }
} catch (InvalidInterfaceException e) {
throw new ProcessingException(e);
}
Modified: incubator/tuscany/java/sca/modules/implementation-java-xml/src/main/java/org/apache/tuscany/implementation/java/processor/ServiceProcessor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-java-xml/src/main/java/org/apache/tuscany/implementation/java/processor/ServiceProcessor.java?view=diff&rev=527362&r1=527361&r2=527362
==============================================================================
--- incubator/tuscany/java/sca/modules/implementation-java-xml/src/main/java/org/apache/tuscany/implementation/java/processor/ServiceProcessor.java (original)
+++ incubator/tuscany/java/sca/modules/implementation-java-xml/src/main/java/org/apache/tuscany/implementation/java/processor/ServiceProcessor.java Tue Apr 10 18:34:51 2007
@@ -32,6 +32,8 @@
import org.apache.tuscany.implementation.java.introspection.ProcessingException;
import org.apache.tuscany.interfacedef.InvalidInterfaceException;
import org.apache.tuscany.interfacedef.java.JavaInterface;
+import org.apache.tuscany.interfacedef.java.JavaInterfaceContract;
+import org.apache.tuscany.interfacedef.java.impl.JavaInterfaceContractImpl;
import org.osoa.sca.annotations.Callback;
import org.osoa.sca.annotations.Remotable;
@@ -133,9 +135,18 @@
public Service createService(Class<?> interfaze) throws InvalidInterfaceException {
Service service = factory.createService();
+ JavaInterfaceContract interfaceContract = new JavaInterfaceContractImpl();
+ service.setInterfaceContract(interfaceContract);
+
// create a relative URI
service.setName(interfaze.getSimpleName());
- interfaceProcessorRegistry.introspect(service, interfaze);
+
+ JavaInterface callInterface = interfaceProcessorRegistry.introspect(interfaze);
+ service.getInterfaceContract().setInterface(callInterface);
+ if (callInterface.getCallbackClass() != null) {
+ JavaInterface callbackInterface = interfaceProcessorRegistry.introspect(callInterface.getCallbackClass());
+ service.getInterfaceContract().setCallbackInterface(callbackInterface);
+ }
return service;
}
Modified: incubator/tuscany/java/sca/modules/interface-java-xml/src/main/java/org/apache/tuscany/interfacedef/java/introspection/JavaInterfaceIntrospector.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-java-xml/src/main/java/org/apache/tuscany/interfacedef/java/introspection/JavaInterfaceIntrospector.java?view=diff&rev=527362&r1=527361&r2=527362
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-java-xml/src/main/java/org/apache/tuscany/interfacedef/java/introspection/JavaInterfaceIntrospector.java (original)
+++ incubator/tuscany/java/sca/modules/interface-java-xml/src/main/java/org/apache/tuscany/interfacedef/java/introspection/JavaInterfaceIntrospector.java Tue Apr 10 18:34:51 2007
@@ -18,8 +18,8 @@
*/
package org.apache.tuscany.interfacedef.java.introspection;
-import org.apache.tuscany.assembly.Contract;
import org.apache.tuscany.interfacedef.InvalidInterfaceException;
+import org.apache.tuscany.interfacedef.java.JavaInterface;
/**
* Processor for creating JavaServiceContract definitions from Java Classes.
@@ -34,13 +34,6 @@
* @param type the interface to inspect
* @return a JavaServiceContract corresponding to the Java interface
*/
- void introspect(Contract contract, Class<?> type) throws InvalidInterfaceException;
- /**
- * @param contract
- * @param type
- * @param callback
- * @throws InvalidInterfaceException
- */
- void introspect(Contract contract, Class<?> type, Class<?> callback) throws InvalidInterfaceException;
-
+ JavaInterface introspect(Class<?> type) throws InvalidInterfaceException;
+
}
Modified: incubator/tuscany/java/sca/modules/interface-java-xml/src/main/java/org/apache/tuscany/interfacedef/java/introspection/JavaInterfaceProcessor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-java-xml/src/main/java/org/apache/tuscany/interfacedef/java/introspection/JavaInterfaceProcessor.java?view=diff&rev=527362&r1=527361&r2=527362
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-java-xml/src/main/java/org/apache/tuscany/interfacedef/java/introspection/JavaInterfaceProcessor.java (original)
+++ incubator/tuscany/java/sca/modules/interface-java-xml/src/main/java/org/apache/tuscany/interfacedef/java/introspection/JavaInterfaceProcessor.java Tue Apr 10 18:34:51 2007
@@ -35,7 +35,7 @@
* @param contract
* @throws InvalidInterfaceException
*/
- void visitInterface(Class<?> clazz, Class<?> callbackClass, Contract contract)
+ void visitInterface(Class<?> clazz)
throws InvalidInterfaceException;
}
Modified: incubator/tuscany/java/sca/modules/interface-java-xml/src/main/java/org/apache/tuscany/interfacedef/java/introspection/impl/JavaInterfaceProcessorRegistryImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-java-xml/src/main/java/org/apache/tuscany/interfacedef/java/introspection/impl/JavaInterfaceProcessorRegistryImpl.java?view=diff&rev=527362&r1=527361&r2=527362
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-java-xml/src/main/java/org/apache/tuscany/interfacedef/java/introspection/impl/JavaInterfaceProcessorRegistryImpl.java (original)
+++ incubator/tuscany/java/sca/modules/interface-java-xml/src/main/java/org/apache/tuscany/interfacedef/java/introspection/impl/JavaInterfaceProcessorRegistryImpl.java Tue Apr 10 18:34:51 2007
@@ -24,7 +24,6 @@
import java.util.List;
import java.util.Map;
-import org.apache.tuscany.assembly.Contract;
import org.apache.tuscany.interfacedef.DataType;
import org.apache.tuscany.interfacedef.InvalidCallbackException;
import org.apache.tuscany.interfacedef.InvalidInterfaceException;
@@ -35,7 +34,6 @@
import org.apache.tuscany.interfacedef.impl.OperationImpl;
import org.apache.tuscany.interfacedef.java.JavaFactory;
import org.apache.tuscany.interfacedef.java.JavaInterface;
-import org.apache.tuscany.interfacedef.java.JavaInterfaceContract;
import org.apache.tuscany.interfacedef.java.impl.DefaultJavaFactory;
import org.apache.tuscany.interfacedef.java.introspection.JavaInterfaceProcessor;
import org.apache.tuscany.interfacedef.java.introspection.JavaInterfaceProcessorRegistry;
@@ -69,7 +67,16 @@
processors.remove(processor);
}
- public void introspect(Contract contract, Class<?> type) throws InvalidInterfaceException {
+ public JavaInterface introspect(Class<?> type) throws InvalidInterfaceException {
+ JavaInterface javaInterface = javaFactory.createJavaInterface();
+ javaInterface.setJavaClass(type);
+
+ boolean remotable = type.isAnnotationPresent(Remotable.class);
+ javaInterface.setRemotable(remotable);
+
+ boolean conversational = type.isAnnotationPresent(Conversational.class);
+ javaInterface.setConversational(conversational);
+
Class<?> callbackClass = null;
org.osoa.sca.annotations.Callback callback = type.getAnnotation(org.osoa.sca.annotations.Callback.class);
if (callback != null && !Void.class.equals(callback.value())) {
@@ -77,32 +84,14 @@
} else if (callback != null && Void.class.equals(callback.value())) {
throw new InvalidCallbackException("No callback interface specified on annotation");
}
- introspect(contract, type, callbackClass);
- }
-
- public void introspect(Contract contract, Class<?> type, Class<?> callback) throws InvalidInterfaceException {
- JavaInterface javaInterface = javaFactory.createJavaInterface();
- javaInterface.setJavaClass(type);
- boolean remotable = type.isAnnotationPresent(Remotable.class);
- javaInterface.setRemotable(remotable);
- // Scope interactionScope = type.getAnnotation(Scope.class);
- boolean conversational = type.isAnnotationPresent(Conversational.class);
- javaInterface.setConversational(conversational);
- JavaInterfaceContract javaInterfaceContract = javaFactory.createJavaInterfaceContract();
- contract.setInterfaceContract(javaInterfaceContract);
- javaInterfaceContract.setInterface(javaInterface);
+ javaInterface.setCallbackClass(callbackClass);
+
javaInterface.getOperations().addAll(getOperations(type, remotable, conversational).values());
- if (callback != null) {
- JavaInterface callbackInterface = javaFactory.createJavaInterface();
- callbackInterface.setJavaClass(callback);
- javaInterfaceContract.setCallbackInterface(callbackInterface);
- callbackInterface.getOperations().addAll(getOperations(callback, remotable, conversational).values());
- }
-
for (JavaInterfaceProcessor processor : processors) {
- processor.visitInterface(type, callback, contract);
+ processor.visitInterface(type);
}
+ return javaInterface;
}
private <T> Map<String, Operation> getOperations(Class<T> type, boolean remotable, boolean conversational)
Modified: incubator/tuscany/java/sca/modules/interface-java-xml/src/main/java/org/apache/tuscany/interfacedef/java/xml/JavaInterfaceProcessor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-java-xml/src/main/java/org/apache/tuscany/interfacedef/java/xml/JavaInterfaceProcessor.java?view=diff&rev=527362&r1=527361&r2=527362
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-java-xml/src/main/java/org/apache/tuscany/interfacedef/java/xml/JavaInterfaceProcessor.java (original)
+++ incubator/tuscany/java/sca/modules/interface-java-xml/src/main/java/org/apache/tuscany/interfacedef/java/xml/JavaInterfaceProcessor.java Tue Apr 10 18:34:51 2007
@@ -27,10 +27,13 @@
import javax.xml.stream.XMLStreamWriter;
import org.apache.tuscany.assembly.xml.Constants;
+import org.apache.tuscany.interfacedef.InvalidInterfaceException;
import org.apache.tuscany.interfacedef.java.JavaFactory;
import org.apache.tuscany.interfacedef.java.JavaInterface;
import org.apache.tuscany.interfacedef.java.JavaInterfaceContract;
import org.apache.tuscany.interfacedef.java.impl.DefaultJavaFactory;
+import org.apache.tuscany.interfacedef.java.introspection.JavaInterfaceProcessorRegistry;
+import org.apache.tuscany.interfacedef.java.introspection.impl.JavaInterfaceProcessorRegistryImpl;
import org.apache.tuscany.services.spi.contribution.ArtifactResolver;
import org.apache.tuscany.services.spi.contribution.ContributionReadException;
import org.apache.tuscany.services.spi.contribution.ContributionResolveException;
@@ -41,34 +44,37 @@
public class JavaInterfaceProcessor implements StAXArtifactProcessor<JavaInterfaceContract>, JavaConstants {
private JavaFactory javaFactory;
+ private JavaInterfaceProcessorRegistry introspectionRegistry;
- public JavaInterfaceProcessor(JavaFactory javaFactory) {
+ public JavaInterfaceProcessor(JavaFactory javaFactory, JavaInterfaceProcessorRegistry introspectionRegistry) {
this.javaFactory = javaFactory;
+ this.introspectionRegistry = introspectionRegistry;
}
public JavaInterfaceProcessor() {
- this(new DefaultJavaFactory());
+ this(new DefaultJavaFactory(), new JavaInterfaceProcessorRegistryImpl());
+ }
+
+ private JavaInterface createJavaInterface(String interfaceName) {
+ JavaInterface javaInterface = javaFactory.createJavaInterface();
+ javaInterface.setUnresolved(true);
+ javaInterface.setName(interfaceName);
+ return javaInterface;
}
public JavaInterfaceContract read(XMLStreamReader reader) throws ContributionReadException {
try {
-
-
// Read an <interface.java>
JavaInterfaceContract javaInterfaceContract = javaFactory.createJavaInterfaceContract();
String interfaceName = reader.getAttributeValue(null, INTERFACE);
if (interfaceName != null) {
- JavaInterface javaInterface = javaFactory.createJavaInterface();
- javaInterface.setUnresolved(true);
- javaInterface.setName(interfaceName);
+ JavaInterface javaInterface = createJavaInterface(interfaceName);
javaInterfaceContract.setInterface(javaInterface);
}
String callbackInterfaceName = reader.getAttributeValue(null, CALLBACK_INTERFACE);
if (callbackInterfaceName != null) {
- JavaInterface javaCallbackInterface = javaFactory.createJavaInterface();
- javaCallbackInterface.setUnresolved(true);
- javaCallbackInterface.setName(callbackInterfaceName);
+ JavaInterface javaCallbackInterface = createJavaInterface(callbackInterfaceName);
javaInterfaceContract.setCallbackInterface(javaCallbackInterface);
}
@@ -90,11 +96,11 @@
// Write an <interface.java>
writer.writeStartElement(Constants.SCA10_NS, INTERFACE_JAVA);
JavaInterface javaInterface = (JavaInterface)javaInterfaceContract.getInterface();
- if (javaInterface.getName() != null) {
+ if (javaInterface != null && javaInterface.getName() != null) {
writer.writeAttribute(INTERFACE, javaInterface.getName());
}
JavaInterface javaCallbackInterface = (JavaInterface)javaInterfaceContract.getCallbackInterface();
- if (javaCallbackInterface.getName() != null) {
+ if (javaCallbackInterface != null && javaCallbackInterface.getName() != null) {
writer.writeAttribute(CALLBACK_INTERFACE, javaCallbackInterface.getName());
}
writer.writeEndElement();
@@ -104,8 +110,43 @@
}
}
- public void resolve(JavaInterfaceContract model, ArtifactResolver resolver) throws ContributionResolveException {
- // TODO Auto-generated method stub
+ private JavaInterface resolveJavaInterface(JavaInterface javaInterface, ArtifactResolver resolver) throws ContributionResolveException {
+
+ if (javaInterface != null && javaInterface.isUnresolved()) {
+
+ // Resolve the Java interface
+ javaInterface = resolver.resolve(JavaInterface.class, javaInterface);
+ if (javaInterface.isUnresolved()) {
+
+ // If the Java interface has never been resolved yet, do it now
+ Class javaClass;
+ try {
+ javaClass = Class.forName(javaInterface.getName(), true, Thread.currentThread().getContextClassLoader());
+
+ // Introspect the Java interface and populate the interface and
+ // operations
+ javaInterface = introspectionRegistry.introspect(javaClass);
+
+ } catch (ClassNotFoundException e) {
+ throw new ContributionResolveException(e);
+ } catch (InvalidInterfaceException e) {
+ throw new ContributionResolveException(e);
+ }
+
+ resolver.add(javaInterface);
+ }
+ }
+ return javaInterface;
+ }
+
+ public void resolve(JavaInterfaceContract javaInterfaceContract, ArtifactResolver resolver) throws ContributionResolveException {
+
+ // Resolve the interface and callback interface
+ JavaInterface javaInterface = resolveJavaInterface((JavaInterface)javaInterfaceContract.getInterface(), resolver);
+ javaInterfaceContract.setInterface(javaInterface);
+
+ JavaInterface javaCallbackInterface = resolveJavaInterface((JavaInterface)javaInterfaceContract.getCallbackInterface(), resolver);
+ javaInterfaceContract.setCallbackInterface(javaCallbackInterface);
}
public void wire(JavaInterfaceContract model) throws ContributionWireException {
Modified: incubator/tuscany/java/sca/modules/interface-java-xml/src/test/java/org/apache/tuscany/interfacedef/java/introspection/impl/ConversationalIntrospectionTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-java-xml/src/test/java/org/apache/tuscany/interfacedef/java/introspection/impl/ConversationalIntrospectionTestCase.java?view=diff&rev=527362&r1=527361&r2=527362
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-java-xml/src/test/java/org/apache/tuscany/interfacedef/java/introspection/impl/ConversationalIntrospectionTestCase.java (original)
+++ incubator/tuscany/java/sca/modules/interface-java-xml/src/test/java/org/apache/tuscany/interfacedef/java/introspection/impl/ConversationalIntrospectionTestCase.java Tue Apr 10 18:34:51 2007
@@ -21,12 +21,10 @@
import junit.framework.TestCase;
import org.apache.tuscany.assembly.AssemblyFactory;
-import org.apache.tuscany.assembly.Contract;
import org.apache.tuscany.assembly.impl.DefaultAssemblyFactory;
import org.apache.tuscany.interfacedef.Interface;
import org.apache.tuscany.interfacedef.InvalidOperationException;
import org.apache.tuscany.interfacedef.Operation;
-import org.apache.tuscany.interfacedef.java.introspection.impl.JavaInterfaceProcessorRegistryImpl;
import org.osoa.sca.annotations.Conversational;
import org.osoa.sca.annotations.EndsConversation;
@@ -47,9 +45,7 @@
}
public void testServiceContractConversationalInformationIntrospection() throws Exception {
- Contract contract = factory.createComponentService();
- registry.introspect(contract, Foo.class);
- Interface i = contract.getInterfaceContract().getInterface();
+ Interface i = registry.introspect(Foo.class);
assertNotNull(i);
assertTrue(i.isConversational());
Operation.ConversationSequence seq = getOperation(i, "operation").getConversationSequence();
@@ -60,8 +56,7 @@
public void testBadServiceContract() throws Exception {
try {
- Contract contract = factory.createComponentService();
- registry.introspect(contract, BadFoo.class);
+ registry.introspect(BadFoo.class);
fail();
} catch (InvalidOperationException e) {
// expected
@@ -69,10 +64,9 @@
}
public void testNonConversationalInformationIntrospection() throws Exception {
- Contract contract = factory.createComponentService();
- registry.introspect(contract, NonConversationalFoo.class);
- assertFalse(contract.getInterfaceContract().getInterface().isConversational());
- Operation.ConversationSequence seq = getOperation(contract.getInterfaceContract().getInterface(), "operation")
+ Interface i = registry.introspect(NonConversationalFoo.class);
+ assertFalse(i.isConversational());
+ Operation.ConversationSequence seq = getOperation(i, "operation")
.getConversationSequence();
assertEquals(Operation.ConversationSequence.NO_CONVERSATION, seq);
}
Modified: incubator/tuscany/java/sca/modules/interface-java-xml/src/test/java/org/apache/tuscany/interfacedef/java/introspection/impl/JavaInterfaceProcessorRegistryImplTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-java-xml/src/test/java/org/apache/tuscany/interfacedef/java/introspection/impl/JavaInterfaceProcessorRegistryImplTestCase.java?view=diff&rev=527362&r1=527361&r2=527362
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-java-xml/src/test/java/org/apache/tuscany/interfacedef/java/introspection/impl/JavaInterfaceProcessorRegistryImplTestCase.java (original)
+++ incubator/tuscany/java/sca/modules/interface-java-xml/src/test/java/org/apache/tuscany/interfacedef/java/introspection/impl/JavaInterfaceProcessorRegistryImplTestCase.java Tue Apr 10 18:34:51 2007
@@ -21,7 +21,6 @@
import static org.easymock.EasyMock.createMock;
import static org.easymock.EasyMock.eq;
import static org.easymock.EasyMock.expectLastCall;
-import static org.easymock.EasyMock.isA;
import static org.easymock.EasyMock.replay;
import static org.easymock.EasyMock.verify;
@@ -30,27 +29,19 @@
import junit.framework.TestCase;
-import org.apache.tuscany.assembly.AssemblyFactory;
-import org.apache.tuscany.assembly.Contract;
-import org.apache.tuscany.assembly.impl.DefaultAssemblyFactory;
import org.apache.tuscany.interfacedef.DataType;
import org.apache.tuscany.interfacedef.InvalidInterfaceException;
import org.apache.tuscany.interfacedef.Operation;
import org.apache.tuscany.interfacedef.java.JavaInterface;
-import org.easymock.EasyMock;
/**
* @version $Rev$ $Date$
*/
public class JavaInterfaceProcessorRegistryImplTestCase extends TestCase {
private JavaInterfaceProcessorRegistryImpl impl;
- private AssemblyFactory factory = new DefaultAssemblyFactory();
public void testSimpleInterface() throws InvalidInterfaceException {
- Contract contract = factory.createComponentService();
- impl.introspect(contract, Simple.class);
-
- JavaInterface intf = (JavaInterface)contract.getInterfaceContract().getInterface();
+ JavaInterface intf = (JavaInterface)impl.introspect(Simple.class);
assertEquals(Simple.class, intf.getJavaClass());
List<Operation> operations = intf.getOperations();
@@ -77,14 +68,13 @@
public void testUnregister() throws Exception {
org.apache.tuscany.interfacedef.java.introspection.JavaInterfaceProcessor processor = createMock(org.apache.tuscany.interfacedef.java.introspection.JavaInterfaceProcessor.class);
- processor.visitInterface(eq(Base.class), EasyMock.same((Class)null), isA(Contract.class));
+ processor.visitInterface(eq(Base.class));
expectLastCall().once();
replay(processor);
- Contract contract = factory.createComponentService();
impl.registerProcessor(processor);
- impl.introspect(contract, Base.class);
+ impl.introspect(Base.class);
impl.unregisterProcessor(processor);
- impl.introspect(contract, Base.class);
+ impl.introspect(Base.class);
verify(processor);
}
Modified: incubator/tuscany/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/interfacedef/java/JavaInterface.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/interfacedef/java/JavaInterface.java?view=diff&rev=527362&r1=527361&r2=527362
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/interfacedef/java/JavaInterface.java (original)
+++ incubator/tuscany/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/interfacedef/java/JavaInterface.java Tue Apr 10 18:34:51 2007
@@ -55,4 +55,17 @@
*/
void setJavaClass(Class<?> javaClass);
+ /**
+ * Returns the callback class specified in an @Callback annotation.
+ *
+ * @return the callback class specified in an @Callback annotation
+ */
+ Class<?> getCallbackClass();
+
+ /**
+ * Sets the callback class specified in an @Callback annotation.
+ *
+ * @param callbackClass the callback class specified in an @Callback annotation
+ */
+ void setCallbackClass(Class<?> callbackClass);
}
Modified: incubator/tuscany/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/interfacedef/java/impl/JavaInterfaceImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/interfacedef/java/impl/JavaInterfaceImpl.java?view=diff&rev=527362&r1=527361&r2=527362
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/interfacedef/java/impl/JavaInterfaceImpl.java (original)
+++ incubator/tuscany/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/interfacedef/java/impl/JavaInterfaceImpl.java Tue Apr 10 18:34:51 2007
@@ -30,6 +30,7 @@
private String className;
private Class<?> javaClass;
+ private Class<?> callbackClass;
public String getName() {
if (isUnresolved()) {
@@ -54,6 +55,14 @@
public void setJavaClass(Class<?> javaClass) {
this.javaClass = javaClass;
+ }
+
+ public Class<?> getCallbackClass() {
+ return callbackClass;
+ }
+
+ public void setCallbackClass(Class<?> callbackClass) {
+ this.callbackClass = callbackClass;
}
public String toString() {
Modified: incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/xml/WSDLInterfaceProcessor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/xml/WSDLInterfaceProcessor.java?view=diff&rev=527362&r1=527361&r2=527362
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/xml/WSDLInterfaceProcessor.java (original)
+++ incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/xml/WSDLInterfaceProcessor.java Tue Apr 10 18:34:51 2007
@@ -21,12 +21,14 @@
import static javax.xml.stream.XMLStreamConstants.END_ELEMENT;
+import javax.wsdl.PortType;
import javax.xml.namespace.QName;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import javax.xml.stream.XMLStreamWriter;
import org.apache.tuscany.assembly.xml.Constants;
+import org.apache.tuscany.interfacedef.wsdl.WSDLDefinition;
import org.apache.tuscany.interfacedef.wsdl.WSDLFactory;
import org.apache.tuscany.interfacedef.wsdl.WSDLInterface;
import org.apache.tuscany.interfacedef.wsdl.WSDLInterfaceContract;
@@ -141,7 +143,48 @@
}
}
- public void resolve(WSDLInterfaceContract wsdlInterface, ArtifactResolver resolver) throws ContributionResolveException {
+ private WSDLInterface resolveWSDLInterface(WSDLInterface wsdlInterface, ArtifactResolver resolver) {
+
+ if (wsdlInterface != null && wsdlInterface.isUnresolved()) {
+
+ // Resolve the WSDL interface
+ wsdlInterface = resolver.resolve(WSDLInterface.class, wsdlInterface);
+ if (wsdlInterface.isUnresolved()) {
+
+ // If the WSDL interface has never been resolved yet, do it now
+ // First, resolve the WSDL definition for the given namespace
+ WSDLDefinition wsdlDefinition = wsdlFactory.createWSDLDefinition();
+ wsdlDefinition.setNamespace(wsdlInterface.getName().getNamespaceURI());
+ wsdlDefinition = resolver.resolve(WSDLDefinition.class, wsdlDefinition);
+ if (!wsdlDefinition.isUnresolved()) {
+ PortType portType = wsdlDefinition.getDefinition().getPortType(wsdlInterface.getName());
+ if (portType != null) {
+
+ // Add the resolved WSDL interface to the resolver
+ // so that it's found next time
+ wsdlInterface.setPortType(portType);
+
+ // Introspect the WSDL portType and populate the interface and
+ // operations
+ //FIXME
+
+ wsdlInterface.setUnresolved(false);
+ resolver.add(wsdlInterface);
+ }
+ }
+ }
+ }
+ return wsdlInterface;
+ }
+
+ public void resolve(WSDLInterfaceContract wsdlInterfaceContract, ArtifactResolver resolver) throws ContributionResolveException {
+
+ // Resolve the interface and callback interface
+ WSDLInterface wsdlInterface = resolveWSDLInterface((WSDLInterface)wsdlInterfaceContract.getInterface(), resolver);
+ wsdlInterfaceContract.setInterface(wsdlInterface);
+
+ WSDLInterface wsdlCallbackInterface = resolveWSDLInterface((WSDLInterface)wsdlInterfaceContract.getCallbackInterface(), resolver);
+ wsdlInterfaceContract.setCallbackInterface(wsdlCallbackInterface);
}
public void wire(WSDLInterfaceContract model) throws ContributionWireException {
---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org