summaryrefslogtreecommitdiffstats
path: root/java/sca/modules/binding-sca-corba/src
diff options
context:
space:
mode:
authorrfeng <rfeng@13f79535-47bb-0310-9956-ffa450edef68>2008-07-30 22:11:46 +0000
committerrfeng <rfeng@13f79535-47bb-0310-9956-ffa450edef68>2008-07-30 22:11:46 +0000
commitac1b197298975b185c90ab02f28a2666861f977c (patch)
tree2af110a42dc407657210ec401cfc4fdfc6040811 /java/sca/modules/binding-sca-corba/src
parente29862c8a179a0f815fe16506d1d71b17a0eca9a (diff)
Apply the patch for TUSCANY-2469 from Wojtek. (sca-binding-sdo-problem-jira-2469-30-july.patch)
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@681221 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java/sca/modules/binding-sca-corba/src')
-rw-r--r--java/sca/modules/binding-sca-corba/src/main/java/org/apache/tuscany/sca/binding/sca/corba/impl/CorbaSCABindingProviderFactory.java10
-rw-r--r--java/sca/modules/binding-sca-corba/src/main/java/org/apache/tuscany/sca/binding/sca/corba/impl/CorbaSCAInvocationProxy.java113
-rw-r--r--java/sca/modules/binding-sca-corba/src/main/java/org/apache/tuscany/sca/binding/sca/corba/impl/CorbaSCAReferenceBindingProvider.java31
-rw-r--r--java/sca/modules/binding-sca-corba/src/main/java/org/apache/tuscany/sca/binding/sca/corba/impl/CorbaSCAServiceBindingProvider.java39
4 files changed, 167 insertions, 26 deletions
diff --git a/java/sca/modules/binding-sca-corba/src/main/java/org/apache/tuscany/sca/binding/sca/corba/impl/CorbaSCABindingProviderFactory.java b/java/sca/modules/binding-sca-corba/src/main/java/org/apache/tuscany/sca/binding/sca/corba/impl/CorbaSCABindingProviderFactory.java
index a8a9a3d5eb..2eee714de6 100644
--- a/java/sca/modules/binding-sca-corba/src/main/java/org/apache/tuscany/sca/binding/sca/corba/impl/CorbaSCABindingProviderFactory.java
+++ b/java/sca/modules/binding-sca-corba/src/main/java/org/apache/tuscany/sca/binding/sca/corba/impl/CorbaSCABindingProviderFactory.java
@@ -38,22 +38,24 @@ public class CorbaSCABindingProviderFactory implements BindingProviderFactory<Di
private CorbaHostExtensionPoint chep;
private CorbaHost host;
+ private ExtensionPointRegistry extensions;
- public CorbaSCABindingProviderFactory(ExtensionPointRegistry registry) {
- chep = registry.getExtensionPoint(CorbaHostExtensionPoint.class);
+ public CorbaSCABindingProviderFactory(ExtensionPointRegistry extensions) {
+ this.extensions = extensions;
+ chep = extensions.getExtensionPoint(CorbaHostExtensionPoint.class);
host = new ExtensibleCorbaHost(chep);
}
public ReferenceBindingProvider createReferenceBindingProvider(RuntimeComponent component,
RuntimeComponentReference reference,
DistributedSCABinding binding) {
- return new CorbaSCAReferenceBindingProvider(binding.getSCABinding(), host, reference);
+ return new CorbaSCAReferenceBindingProvider(binding.getSCABinding(), host, component, reference, extensions);
}
public ServiceBindingProvider createServiceBindingProvider(RuntimeComponent component,
RuntimeComponentService service,
DistributedSCABinding binding) {
- return new CorbaSCAServiceBindingProvider(binding.getSCABinding(), host, service);
+ return new CorbaSCAServiceBindingProvider(binding.getSCABinding(), host, component, service, extensions);
}
public Class<DistributedSCABinding> getModelType() {
diff --git a/java/sca/modules/binding-sca-corba/src/main/java/org/apache/tuscany/sca/binding/sca/corba/impl/CorbaSCAInvocationProxy.java b/java/sca/modules/binding-sca-corba/src/main/java/org/apache/tuscany/sca/binding/sca/corba/impl/CorbaSCAInvocationProxy.java
new file mode 100644
index 0000000000..f20b027644
--- /dev/null
+++ b/java/sca/modules/binding-sca-corba/src/main/java/org/apache/tuscany/sca/binding/sca/corba/impl/CorbaSCAInvocationProxy.java
@@ -0,0 +1,113 @@
+/*
+ * 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.binding.sca.corba.impl;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.stream.XMLStreamException;
+
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.impl.llom.util.AXIOMUtil;
+import org.apache.tuscany.sca.binding.corba.impl.exceptions.RequestConfigurationException;
+import org.apache.tuscany.sca.binding.corba.impl.service.InvocationException;
+import org.apache.tuscany.sca.binding.corba.impl.service.InvocationProxy;
+import org.apache.tuscany.sca.binding.corba.impl.service.OperationTypes;
+import org.apache.tuscany.sca.binding.corba.impl.types.TypeTree;
+import org.apache.tuscany.sca.binding.corba.impl.types.TypeTreeCreator;
+import org.apache.tuscany.sca.interfacedef.Interface;
+import org.apache.tuscany.sca.interfacedef.Operation;
+import org.apache.tuscany.sca.interfacedef.util.FaultException;
+import org.apache.tuscany.sca.invocation.Message;
+import org.apache.tuscany.sca.invocation.MessageFactory;
+import org.apache.tuscany.sca.runtime.RuntimeWire;
+
+/**
+ * Invocation proxy for SCA default binding over CORBA binding
+ */
+public class CorbaSCAInvocationProxy implements InvocationProxy {
+
+ private RuntimeWire wire;
+ private Interface componentInterface;
+ private OperationTypes types = new OperationTypes();
+ private MessageFactory messageFactory;
+
+ public CorbaSCAInvocationProxy(RuntimeWire wire, Interface componentInterface, MessageFactory messageFactory) {
+ this.wire = wire;
+ this.componentInterface = componentInterface;
+ this.messageFactory = messageFactory;
+ try {
+ List<TypeTree> inputType = new ArrayList<TypeTree>();
+ inputType.add(TypeTreeCreator.createTypeTree(String.class, false));
+ types.setInputType(inputType);
+ types.setOutputType(TypeTreeCreator.createTypeTree(String.class, false));
+ } catch (RequestConfigurationException e) {
+ // ignore - string type should not cause this exception
+ }
+ }
+
+ public Object invoke(String operationName, List<Object> arguments) throws InvocationException {
+ try {
+ OMElement omContent = AXIOMUtil.stringToOM((String)arguments.get(0));
+ String componentOperationName = omContent.getQName().getLocalPart();
+ Operation componentOperation = null;
+ for (Operation operation : componentInterface.getOperations()) {
+ if (operation.getName().equals(componentOperationName)) {
+ componentOperation = operation;
+ break;
+ }
+ }
+ if (componentOperation == null) {
+ // TODO: throw an exception - no such operation
+ } else {
+ Message msg = messageFactory.createMessage();
+ msg.setOperation(componentOperation);
+ Object[] args = new Object[1];
+ args[0] = omContent;
+ msg.setBody(args);
+ OMElement omResult = (OMElement)wire.invoke(componentOperation, msg);
+ return omResult.toStringWithConsume();
+ }
+ } catch (XMLStreamException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (InvocationTargetException e) {
+ OMElement omException = (OMElement)((FaultException)e.getCause()).getFaultInfo();
+ try {
+ WrappedSCAException wrappedException = new WrappedSCAException(omException.toStringWithConsume());
+ InvocationException exception = new InvocationException(wrappedException);
+ throw exception;
+ } catch (XMLStreamException e1) {
+ // TODO Auto-generated catch block
+ e1.printStackTrace();
+ }
+
+ }
+
+ return null;
+ }
+
+ public OperationTypes getOperationTypes(String operationName) {
+ // ignoring operationName - only one operation for this proxy is allowed
+ return types;
+ }
+
+}
diff --git a/java/sca/modules/binding-sca-corba/src/main/java/org/apache/tuscany/sca/binding/sca/corba/impl/CorbaSCAReferenceBindingProvider.java b/java/sca/modules/binding-sca-corba/src/main/java/org/apache/tuscany/sca/binding/sca/corba/impl/CorbaSCAReferenceBindingProvider.java
index f20a0b1a02..c578f8bdf4 100644
--- a/java/sca/modules/binding-sca-corba/src/main/java/org/apache/tuscany/sca/binding/sca/corba/impl/CorbaSCAReferenceBindingProvider.java
+++ b/java/sca/modules/binding-sca-corba/src/main/java/org/apache/tuscany/sca/binding/sca/corba/impl/CorbaSCAReferenceBindingProvider.java
@@ -19,19 +19,20 @@
package org.apache.tuscany.sca.binding.sca.corba.impl;
-import java.lang.reflect.Method;
-import java.util.Map;
import java.util.logging.Logger;
+import org.apache.axiom.om.OMElement;
import org.apache.tuscany.sca.assembly.SCABinding;
-import org.apache.tuscany.sca.binding.corba.impl.CorbaInvoker;
-import org.apache.tuscany.sca.binding.corba.impl.util.OperationMapper;
+import org.apache.tuscany.sca.binding.ws.WebServiceBinding;
+import org.apache.tuscany.sca.binding.ws.WebServiceBindingFactory;
+import org.apache.tuscany.sca.binding.ws.wsdlgen.BindingWSDLGenerator;
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
import org.apache.tuscany.sca.host.corba.CorbaHost;
import org.apache.tuscany.sca.interfacedef.InterfaceContract;
import org.apache.tuscany.sca.interfacedef.Operation;
-import org.apache.tuscany.sca.interfacedef.java.JavaInterface;
import org.apache.tuscany.sca.invocation.Invoker;
import org.apache.tuscany.sca.provider.ReferenceBindingProvider;
+import org.apache.tuscany.sca.runtime.RuntimeComponent;
import org.apache.tuscany.sca.runtime.RuntimeComponentReference;
import org.omg.CORBA.Object;
@@ -44,23 +45,27 @@ public class CorbaSCAReferenceBindingProvider implements ReferenceBindingProvide
private SCABinding binding;
private CorbaHost host;
- private RuntimeComponentReference reference;
private Object remoteObject;
private Class<?> referenceClass;
- private Map<Method, String> operationsMap = null;
+ private InterfaceContract wsdlInterfaceContract;
public CorbaSCAReferenceBindingProvider(SCABinding binding,
CorbaHost host,
- RuntimeComponentReference reference) {
+ RuntimeComponent component,
+ RuntimeComponentReference reference,
+ ExtensionPointRegistry extensions) {
this.binding = binding;
this.host = host;
- this.reference = reference;
- this.referenceClass = ((JavaInterface)reference.getInterfaceContract().getInterface()).getJavaClass();
- operationsMap = OperationMapper.mapMethodToOperation(referenceClass);
+
+ WebServiceBindingFactory wsFactory = extensions.getExtensionPoint(WebServiceBindingFactory.class);
+ WebServiceBinding wsBinding = wsFactory.createWebServiceBinding();
+ BindingWSDLGenerator.generateWSDL(component, reference, wsBinding, extensions, null);
+ wsdlInterfaceContract = wsBinding.getBindingInterfaceContract();
+ wsdlInterfaceContract.getInterface().resetDataBinding(OMElement.class.getName());
}
public InterfaceContract getBindingInterfaceContract() {
- return reference.getInterfaceContract();
+ return wsdlInterfaceContract;
}
public boolean supportsOneWayInvocation() {
@@ -72,7 +77,7 @@ public class CorbaSCAReferenceBindingProvider implements ReferenceBindingProvide
if (remoteObject == null) {
remoteObject = host.lookup(binding.getURI());
}
- return new CorbaInvoker(remoteObject, referenceClass, operationsMap, true);
+ return new CorbaSCAInvoker(remoteObject, referenceClass, null, true);
} catch (Exception e) {
logger.warning(e.getMessage());
}
diff --git a/java/sca/modules/binding-sca-corba/src/main/java/org/apache/tuscany/sca/binding/sca/corba/impl/CorbaSCAServiceBindingProvider.java b/java/sca/modules/binding-sca-corba/src/main/java/org/apache/tuscany/sca/binding/sca/corba/impl/CorbaSCAServiceBindingProvider.java
index 88e785bd42..1dabefc9f7 100644
--- a/java/sca/modules/binding-sca-corba/src/main/java/org/apache/tuscany/sca/binding/sca/corba/impl/CorbaSCAServiceBindingProvider.java
+++ b/java/sca/modules/binding-sca-corba/src/main/java/org/apache/tuscany/sca/binding/sca/corba/impl/CorbaSCAServiceBindingProvider.java
@@ -19,35 +19,55 @@
package org.apache.tuscany.sca.binding.sca.corba.impl;
+import org.apache.axiom.om.OMElement;
import org.apache.tuscany.sca.assembly.SCABinding;
import org.apache.tuscany.sca.binding.corba.impl.service.DynaCorbaServant;
+import org.apache.tuscany.sca.binding.corba.impl.service.InvocationProxy;
+import org.apache.tuscany.sca.binding.ws.WebServiceBinding;
+import org.apache.tuscany.sca.binding.ws.WebServiceBindingFactory;
+import org.apache.tuscany.sca.binding.ws.wsdlgen.BindingWSDLGenerator;
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
import org.apache.tuscany.sca.host.corba.CorbaHost;
import org.apache.tuscany.sca.interfacedef.InterfaceContract;
+import org.apache.tuscany.sca.invocation.MessageFactory;
import org.apache.tuscany.sca.provider.ServiceBindingProvider;
+import org.apache.tuscany.sca.runtime.RuntimeComponent;
import org.apache.tuscany.sca.runtime.RuntimeComponentService;
import org.osoa.sca.ServiceRuntimeException;
+
/**
* Service binding provider for SCA default binding over CORBA binding
*/
public class CorbaSCAServiceBindingProvider implements ServiceBindingProvider {
-
+
private SCABinding binding;
private CorbaHost host;
private RuntimeComponentService service;
private DynaCorbaServant servant;
-
+ private MessageFactory messageFactory;
+ private InterfaceContract wsdlInterfaceContract;
public CorbaSCAServiceBindingProvider(SCABinding binding,
CorbaHost host,
- RuntimeComponentService service) {
+ RuntimeComponent component,
+ RuntimeComponentService service,
+ ExtensionPointRegistry extensions) {
this.binding = binding;
this.host = host;
this.service = service;
+
+ messageFactory = extensions.getExtensionPoint(MessageFactory.class);
+
+ WebServiceBindingFactory wsFactory = extensions.getExtensionPoint(WebServiceBindingFactory.class);
+ WebServiceBinding wsBinding = wsFactory.createWebServiceBinding();
+ BindingWSDLGenerator.generateWSDL(component, service, wsBinding, extensions, null);
+ wsdlInterfaceContract = wsBinding.getBindingInterfaceContract();
+ wsdlInterfaceContract.getInterface().resetDataBinding(OMElement.class.getName());
}
public InterfaceContract getBindingInterfaceContract() {
- return service.getInterfaceContract();
+ return wsdlInterfaceContract;
}
public boolean supportsOneWayInvocation() {
@@ -56,19 +76,20 @@ public class CorbaSCAServiceBindingProvider implements ServiceBindingProvider {
public void start() {
try {
- servant = new DynaCorbaServant(service, binding, true);
+ InvocationProxy proxy = new CorbaSCAInvocationProxy(service.getRuntimeWire(binding), service.getInterfaceContract().getInterface(), messageFactory);
+ servant = new DynaCorbaServant(proxy, "IDL:org/apache/tuscany/sca/binding/sca/corba/Service:1.0");
host.registerServant(binding.getURI(), servant);
} catch (Exception e) {
throw new ServiceRuntimeException(e);
- }
+ }
}
public void stop() {
try {
host.unregisterServant(binding.getURI());
- } catch (Exception e) {
- throw new ServiceRuntimeException(e);
- }
+ } catch (Exception e) {
+ throw new ServiceRuntimeException(e);
+ }
}