summaryrefslogtreecommitdiffstats
path: root/sca-java-2.x/trunk/modules/implementation-java-runtime/src
diff options
context:
space:
mode:
authorslaws <slaws@13f79535-47bb-0310-9956-ffa450edef68>2012-01-06 12:19:29 +0000
committerslaws <slaws@13f79535-47bb-0310-9956-ffa450edef68>2012-01-06 12:19:29 +0000
commitd0e15154ff66a8422425259d0b3b3a776a004cd5 (patch)
tree5b7d836a97ed3bc66a5b3b513d6af0c80e1cb80f /sca-java-2.x/trunk/modules/implementation-java-runtime/src
parentcd8c29db34ed6e6aab5c2b05ab6cc34081ccbc35 (diff)
TUSCANY-4000 - Fix ClassCastException when user specifies WSDL interface
TUSCANY-4003 - Provide access to resource host from the resource itself. Thanks for the patch Brian git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1228143 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'sca-java-2.x/trunk/modules/implementation-java-runtime/src')
-rw-r--r--sca-java-2.x/trunk/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/injection/ResourceHost.java46
-rw-r--r--sca-java-2.x/trunk/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/injection/ResourceObjectFactory.java3
-rw-r--r--sca-java-2.x/trunk/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/injection/ResourceResolutionException.java43
-rw-r--r--sca-java-2.x/trunk/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaAsyncImplementationInvoker.java7
-rw-r--r--sca-java-2.x/trunk/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaComponentContextProvider.java7
-rw-r--r--sca-java-2.x/trunk/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaImplementationInvoker.java20
-rw-r--r--sca-java-2.x/trunk/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaImplementationProvider.java11
7 files changed, 29 insertions, 108 deletions
diff --git a/sca-java-2.x/trunk/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/injection/ResourceHost.java b/sca-java-2.x/trunk/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/injection/ResourceHost.java
deleted file mode 100644
index 70c368a0e6..0000000000
--- a/sca-java-2.x/trunk/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/injection/ResourceHost.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tuscany.sca.implementation.java.injection;
-
-/**
- * Interface implemented by host environments that allow for resolution of component implementation resources, e.g.
- * items bound in a JNDI tree.
- *
- * @version $Rev$ $Date$
- */
-public interface ResourceHost {
-
- /**
- * Resolve a resource matching the given type
- *
- * @param type the type of the resources
- * @throws ResourceResolutionException if an error is encountered during resolution
- */
- <T> T resolveResource(Class<T> type) throws ResourceResolutionException;
-
- /**
- * Resolve a resource matching the given type and name
- *
- * @param type the type of the resources
- * @param mappedName the mapped name of the resource
- * @throws ResourceResolutionException if an error is encountered during resolution
- */
- <T> T resolveResource(Class<T> type, String mappedName) throws ResourceResolutionException;
-
-}
diff --git a/sca-java-2.x/trunk/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/injection/ResourceObjectFactory.java b/sca-java-2.x/trunk/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/injection/ResourceObjectFactory.java
index 8f55eb18bc..8e2cd66299 100644
--- a/sca-java-2.x/trunk/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/injection/ResourceObjectFactory.java
+++ b/sca-java-2.x/trunk/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/injection/ResourceObjectFactory.java
@@ -21,6 +21,9 @@ package org.apache.tuscany.sca.implementation.java.injection;
import org.apache.tuscany.sca.core.factory.ObjectCreationException;
import org.apache.tuscany.sca.core.factory.ObjectFactory;
+import org.apache.tuscany.sca.implementation.java.ResourceHost;
+import org.apache.tuscany.sca.implementation.java.ResourceResolutionException;
+
/**
* Resolves a runtime resource to be injected on a field or method of a Java component type marked with {@link
* javax.annotation.Resource}. If the mapped name of the resource is an absolute URI such as
diff --git a/sca-java-2.x/trunk/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/injection/ResourceResolutionException.java b/sca-java-2.x/trunk/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/injection/ResourceResolutionException.java
deleted file mode 100644
index f94b24762a..0000000000
--- a/sca-java-2.x/trunk/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/injection/ResourceResolutionException.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tuscany.sca.implementation.java.injection;
-
-
-/**
- * @version $Rev$ $Date$
- */
-public class ResourceResolutionException extends Exception {
- private static final long serialVersionUID = 13421352711315479L;
-
- public ResourceResolutionException() {
- super();
- }
-
- public ResourceResolutionException(String message, Throwable cause) {
- super(message, cause);
- }
-
- public ResourceResolutionException(String message) {
- super(message);
- }
-
- public ResourceResolutionException(Throwable cause) {
- super(cause);
- }
-}
diff --git a/sca-java-2.x/trunk/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaAsyncImplementationInvoker.java b/sca-java-2.x/trunk/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaAsyncImplementationInvoker.java
index 259e3a66ad..759724484e 100644
--- a/sca-java-2.x/trunk/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaAsyncImplementationInvoker.java
+++ b/sca-java-2.x/trunk/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaAsyncImplementationInvoker.java
@@ -26,7 +26,6 @@ import org.apache.tuscany.sca.core.factory.InstanceWrapper;
import org.apache.tuscany.sca.core.factory.ObjectCreationException;
import org.apache.tuscany.sca.core.invocation.AsyncResponseException;
import org.apache.tuscany.sca.interfacedef.DataType;
-import org.apache.tuscany.sca.interfacedef.InterfaceContract;
import org.apache.tuscany.sca.interfacedef.Operation;
import org.apache.tuscany.sca.interfacedef.java.JavaOperation;
import org.apache.tuscany.sca.invocation.InterceptorAsync;
@@ -34,6 +33,7 @@ import org.apache.tuscany.sca.invocation.Invoker;
import org.apache.tuscany.sca.invocation.InvokerAsyncResponse;
import org.apache.tuscany.sca.invocation.Message;
import org.apache.tuscany.sca.runtime.RuntimeComponent;
+import org.apache.tuscany.sca.runtime.RuntimeComponentService;
import org.oasisopen.sca.ResponseDispatch;
import org.oasisopen.sca.ServiceRuntimeException;
@@ -44,9 +44,8 @@ import org.oasisopen.sca.ServiceRuntimeException;
*/
public class JavaAsyncImplementationInvoker extends JavaImplementationInvoker implements InterceptorAsync {
- public JavaAsyncImplementationInvoker(Operation operation, Method method, RuntimeComponent component,
- InterfaceContract interfaceContract) {
- super( operation, method, component, interfaceContract);
+ public JavaAsyncImplementationInvoker(Operation operation, Method method, RuntimeComponent component, RuntimeComponentService service) {
+ super( operation, method, component, service);
assert method != null : "Operation method cannot be null";
assert ((JavaOperation) operation).isAsyncServer() : "Operation must be async";
} // end constructor
diff --git a/sca-java-2.x/trunk/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaComponentContextProvider.java b/sca-java-2.x/trunk/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaComponentContextProvider.java
index 1fa51315c3..403d8da3b9 100644
--- a/sca-java-2.x/trunk/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaComponentContextProvider.java
+++ b/sca-java-2.x/trunk/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaComponentContextProvider.java
@@ -65,6 +65,7 @@ import org.apache.tuscany.sca.interfacedef.java.impl.JavaInterfaceUtil;
import org.apache.tuscany.sca.invocation.Invoker;
import org.apache.tuscany.sca.runtime.RuntimeComponent;
import org.apache.tuscany.sca.runtime.RuntimeComponentReference;
+import org.apache.tuscany.sca.runtime.RuntimeComponentService;
import org.apache.tuscany.sca.runtime.RuntimeEndpointReference;
import org.oasisopen.sca.ServiceReference;
@@ -303,15 +304,15 @@ public class JavaComponentContextProvider {
//cleanUpPolicyHandlers();
}
- Invoker createInvoker(Operation operation, InterfaceContract interfaceContract) throws NoSuchMethodException {
+ Invoker createInvoker(Operation operation, RuntimeComponentService service) throws NoSuchMethodException {
Class<?> implClass = instanceFactoryProvider.getImplementationClass();
Method method = JavaInterfaceUtil.findMethod(implClass, operation);
if (operation instanceof JavaOperation &&
((JavaOperation) operation).isAsyncServer() ) {
- return new JavaAsyncImplementationInvoker(operation, method, component, interfaceContract);
+ return new JavaAsyncImplementationInvoker(operation, method, component, service);
} else {
- return new JavaImplementationInvoker(operation, method, component, interfaceContract);
+ return new JavaImplementationInvoker(operation, method, component, service);
} // end if
} // end
diff --git a/sca-java-2.x/trunk/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaImplementationInvoker.java b/sca-java-2.x/trunk/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaImplementationInvoker.java
index de15651227..9ea50fce73 100644
--- a/sca-java-2.x/trunk/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaImplementationInvoker.java
+++ b/sca-java-2.x/trunk/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaImplementationInvoker.java
@@ -18,8 +18,6 @@
*/
package org.apache.tuscany.sca.implementation.java.invocation;
-
-
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.security.AccessController;
@@ -30,6 +28,7 @@ import java.util.List;
import javax.xml.ws.Holder;
import org.apache.tuscany.sca.assembly.EndpointReference;
+import org.apache.tuscany.sca.assembly.Service;
import org.apache.tuscany.sca.core.factory.ObjectCreationException;
import org.apache.tuscany.sca.core.invocation.Constants;
import org.apache.tuscany.sca.core.scope.Scope;
@@ -49,6 +48,7 @@ import org.apache.tuscany.sca.invocation.DataExchangeSemantics;
import org.apache.tuscany.sca.invocation.Invoker;
import org.apache.tuscany.sca.invocation.Message;
import org.apache.tuscany.sca.runtime.RuntimeComponent;
+import org.apache.tuscany.sca.runtime.RuntimeComponentService;
import org.oasisopen.sca.ServiceReference;
import org.oasisopen.sca.ServiceRuntimeException;
@@ -61,26 +61,29 @@ import org.oasisopen.sca.ServiceRuntimeException;
public class JavaImplementationInvoker implements Invoker, DataExchangeSemantics {
protected Operation operation;
protected Method method;
+ protected RuntimeComponentService service;
protected boolean allowsPBR;
@SuppressWarnings("unchecked")
protected final ScopeContainer scopeContainer;
private final InterfaceContract interfaze;
- public JavaImplementationInvoker(Operation operation, Method method, RuntimeComponent component, InterfaceContract intf) {
+ public JavaImplementationInvoker(Operation operation, Method method, RuntimeComponent component, RuntimeComponentService service) {
assert method != null : "Operation method cannot be null";
this.method = method;
this.operation = operation;
this.scopeContainer = ((ScopedRuntimeComponent)component).getScopeContainer();
this.allowsPBR = ((JavaImplementation)component.getImplementation()).isAllowsPassByReference(method);
- this.interfaze = intf;
+ this.service = service;
+ this.interfaze = service.getInterfaceContract();
}
- public JavaImplementationInvoker(Operation operation, RuntimeComponent component, InterfaceContract intf) {
+ public JavaImplementationInvoker(Operation operation, RuntimeComponent component, RuntimeComponentService service) {
// used if the method can't be computed statically in advance
this.operation = operation;
this.scopeContainer = ((ScopedRuntimeComponent)component).getScopeContainer();
- this.interfaze = intf;
+ this.service = service;
+ this.interfaze = service.getInterfaceContract();
}
@SuppressWarnings("unchecked")
@@ -121,7 +124,10 @@ public class JavaImplementationInvoker implements Invoker, DataExchangeSemantics
// If there is a callback interface and the implementation is stateless, we need to
// inject callbacks at invocation time. For Composite scope, this has already been done.
if (( interfaze.getCallbackInterface() != null ) && (scopeContainer.getScope().equals(Scope.STATELESS))){
- injectCallbacks(wrapper, (JavaInterface)interfaze.getCallbackInterface());
+ // TUSCANY-4000 - injectCallbacks needs the Java callback interface so get it
+ // from the component type just in case the user has specified a
+ // WSDL interface and hence interfaze is WSDL
+ injectCallbacks(wrapper, (JavaInterface)service.getService().getInterfaceContract().getCallbackInterface());
}
final Object instance = wrapper.getInstance();
diff --git a/sca-java-2.x/trunk/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaImplementationProvider.java b/sca-java-2.x/trunk/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaImplementationProvider.java
index 03916909a5..19affac368 100644
--- a/sca-java-2.x/trunk/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaImplementationProvider.java
+++ b/sca-java-2.x/trunk/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaImplementationProvider.java
@@ -32,8 +32,8 @@ import org.apache.tuscany.sca.core.scope.ScopedImplementationProvider;
import org.apache.tuscany.sca.databinding.DataBindingExtensionPoint;
import org.apache.tuscany.sca.implementation.java.JavaImplementation;
import org.apache.tuscany.sca.implementation.java.JavaResourceImpl;
+import org.apache.tuscany.sca.implementation.java.ResourceHost;
import org.apache.tuscany.sca.implementation.java.injection.RequestContextObjectFactory;
-import org.apache.tuscany.sca.implementation.java.injection.ResourceHost;
import org.apache.tuscany.sca.implementation.java.injection.ResourceObjectFactory;
import org.apache.tuscany.sca.interfacedef.Interface;
import org.apache.tuscany.sca.interfacedef.Operation;
@@ -105,7 +105,8 @@ public class JavaImplementationProvider implements ScopedImplementationProvider,
} else {
boolean optional = resource.isOptional();
String mappedName = resource.getMappedName();
- objectFactory = createResourceObjectFactory(type, mappedName, optional, null);
+ ResourceHost resourceHost = resource.getResourceHost();
+ objectFactory = createResourceObjectFactory(type, mappedName, optional, resourceHost);
}
}
componentContextProvider.addResourceFactory(name, objectFactory);
@@ -121,7 +122,7 @@ public class JavaImplementationProvider implements ScopedImplementationProvider,
public Invoker createInvoker(RuntimeComponentService service, Operation operation) {
try {
- return componentContextProvider.createInvoker(operation, service.getInterfaceContract());
+ return componentContextProvider.createInvoker(operation, service);
} catch (NoSuchMethodException e) {
// It's possible that the instance being invoked is a user-specified
// callback object that isn't an instance of the component implementation
@@ -135,12 +136,12 @@ public class JavaImplementationProvider implements ScopedImplementationProvider,
if (iface instanceof JavaInterface) {
try {
Method method = JavaInterfaceUtil.findMethod(((JavaInterface)iface).getJavaClass(), operation);
- return new JavaImplementationInvoker(operation, method, componentContextProvider.getComponent(), service.getInterfaceContract());
+ return new JavaImplementationInvoker(operation, method, componentContextProvider.getComponent(), service);
} catch (NoSuchMethodException e1) {
throw new IllegalArgumentException(e1);
}
} else {
- return new JavaImplementationInvoker(operation, componentContextProvider.getComponent(), service.getInterfaceContract());
+ return new JavaImplementationInvoker(operation, componentContextProvider.getComponent(), service);
}
}
}