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 2006/02/27 05:19:32 UTC

svn commit: r381254 - in /incubator/tuscany/java/sca/binding.axis/src/main: java/org/apache/tuscany/binding/axis/builder/ java/org/apache/tuscany/binding/axis/config/impl/ java/org/apache/tuscany/binding/axis/encoding/ java/org/apache/tuscany/binding/a...

Author: jsdelfino
Date: Sun Feb 26 20:19:28 2006
New Revision: 381254

URL: http://svn.apache.org/viewcvs?rev=381254&view=rev
Log:
integrated code from old WebServiceHandler into WebServiceClient

Removed:
    incubator/tuscany/java/sca/binding.axis/src/main/java/org/apache/tuscany/binding/axis/config/impl/
    incubator/tuscany/java/sca/binding.axis/src/main/java/org/apache/tuscany/binding/axis/encoding/
    incubator/tuscany/java/sca/binding.axis/src/main/java/org/apache/tuscany/binding/axis/handler/ExternalWebServiceConfigurationHandler.java.off
    incubator/tuscany/java/sca/binding.axis/src/main/java/org/apache/tuscany/binding/axis/handler/ExternalWebServiceHandler.java.off
    incubator/tuscany/java/sca/binding.axis/src/main/java/org/apache/tuscany/binding/axis/handler/impl/
    incubator/tuscany/java/sca/binding.axis/src/main/resources/org/apache/tuscany/binding/axis/handler/
Modified:
    incubator/tuscany/java/sca/binding.axis/src/main/java/org/apache/tuscany/binding/axis/builder/ExternalWebServiceConfigurationBuilder.java
    incubator/tuscany/java/sca/binding.axis/src/main/java/org/apache/tuscany/binding/axis/handler/ExternalWebServiceClient.java
    incubator/tuscany/java/sca/binding.axis/src/main/java/org/apache/tuscany/binding/axis/handler/ExternalWebServiceTargetInvoker.java
    incubator/tuscany/java/sca/binding.axis/src/main/java/org/apache/tuscany/binding/axis/handler/WebServicePortMetaData.java

Modified: incubator/tuscany/java/sca/binding.axis/src/main/java/org/apache/tuscany/binding/axis/builder/ExternalWebServiceConfigurationBuilder.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/binding.axis/src/main/java/org/apache/tuscany/binding/axis/builder/ExternalWebServiceConfigurationBuilder.java?rev=381254&r1=381253&r2=381254&view=diff
==============================================================================
--- incubator/tuscany/java/sca/binding.axis/src/main/java/org/apache/tuscany/binding/axis/builder/ExternalWebServiceConfigurationBuilder.java (original)
+++ incubator/tuscany/java/sca/binding.axis/src/main/java/org/apache/tuscany/binding/axis/builder/ExternalWebServiceConfigurationBuilder.java Sun Feb 26 20:19:28 2006
@@ -15,7 +15,6 @@
 
 import java.lang.reflect.Method;
 import java.util.Collection;
-import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
 
@@ -23,12 +22,11 @@
 import org.apache.tuscany.binding.axis.config.ExternalWebServiceRuntimeConfiguration;
 import org.apache.tuscany.binding.axis.handler.ExternalWebServiceClient;
 import org.apache.tuscany.core.builder.BuilderException;
-import org.apache.tuscany.core.builder.ObjectFactory;
 import org.apache.tuscany.core.builder.RuntimeConfigurationBuilder;
 import org.apache.tuscany.core.config.JavaIntrospectionHelper;
 import org.apache.tuscany.core.context.Context;
 import org.apache.tuscany.core.context.QualifiedName;
-import org.apache.tuscany.core.injection.ObjectCreationException;
+import org.apache.tuscany.core.injection.SingletonObjectFactory;
 import org.apache.tuscany.core.invocation.InvocationConfiguration;
 import org.apache.tuscany.core.invocation.MethodHashMap;
 import org.apache.tuscany.core.invocation.ProxyConfiguration;
@@ -111,15 +109,17 @@
         if (!(object instanceof ExternalService)) {
             return;
         }
-        ExternalService es = (ExternalService) object;
-        if (es.getBindings().size() < 1 || !(es.getBindings().get(0) instanceof WebServiceBinding)) {
+        ExternalService externalService = (ExternalService) object;
+        if (externalService.getBindings().size() < 1 || !(externalService.getBindings().get(0) instanceof WebServiceBinding)) {
             return;
         }
 
-        ExternalWebServiceRuntimeConfiguration config = new ExternalWebServiceRuntimeConfiguration(es.getName(),
-                new ExternalWebServiceClientFactory());
+        WebServiceBinding wsBinding=(WebServiceBinding)externalService.getBindings().get(0);
+        
+        ExternalWebServiceClient externalWebServiceClient=new ExternalWebServiceClient(externalService, wsBinding);
+        ExternalWebServiceRuntimeConfiguration config = new ExternalWebServiceRuntimeConfiguration(externalService.getName(), new SingletonObjectFactory<ExternalWebServiceClient>(externalWebServiceClient));
 
-        ConfiguredService configuredService = es.getConfiguredService();
+        ConfiguredService configuredService = externalService.getConfiguredService();
         Service service = configuredService.getService();
         ServiceContract serviceContract = service.getServiceContract();
         Map<Method, InvocationConfiguration> iConfigMap = new MethodHashMap();
@@ -129,7 +129,7 @@
             InvocationConfiguration iConfig = new InvocationConfiguration(method);
             iConfigMap.put(method, iConfig);
         }
-        QualifiedName qName = new QualifiedName(es.getName() + "/" + service.getName());
+        QualifiedName qName = new QualifiedName(externalService.getName() + "/" + service.getName());
         ProxyConfiguration pConfiguration = new ProxyConfiguration(qName, iConfigMap, null, messageFactory);
         proxyFactory.setBusinessInterface(serviceContract.getInterface());
         proxyFactory.setProxyConfiguration(pConfiguration);
@@ -144,13 +144,7 @@
             iConfig.addTargetInterceptor(new InvokerInterceptor());
         }
 
-        es.getConfiguredService().setRuntimeConfiguration(config);
+        externalService.getConfiguredService().setRuntimeConfiguration(config);
     }
 
-    private class ExternalWebServiceClientFactory implements ObjectFactory {
-
-        public Object getInstance() throws ObjectCreationException {
-            return new ExternalWebServiceClient();
-        }
-    }
 }

Modified: incubator/tuscany/java/sca/binding.axis/src/main/java/org/apache/tuscany/binding/axis/handler/ExternalWebServiceClient.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/binding.axis/src/main/java/org/apache/tuscany/binding/axis/handler/ExternalWebServiceClient.java?rev=381254&r1=381253&r2=381254&view=diff
==============================================================================
--- incubator/tuscany/java/sca/binding.axis/src/main/java/org/apache/tuscany/binding/axis/handler/ExternalWebServiceClient.java (original)
+++ incubator/tuscany/java/sca/binding.axis/src/main/java/org/apache/tuscany/binding/axis/handler/ExternalWebServiceClient.java Sun Feb 26 20:19:28 2006
@@ -13,9 +13,23 @@
  */
 package org.apache.tuscany.binding.axis.handler;
 
-import java.lang.reflect.Array;
+import java.lang.reflect.Method;
+import java.rmi.RemoteException;
+import java.util.Map;
+import java.util.Set;
 
-import org.apache.tuscany.core.context.TargetException;
+import javax.xml.namespace.QName;
+import javax.xml.rpc.Call;
+import javax.xml.rpc.Service;
+import javax.xml.rpc.ServiceException;
+import javax.xml.rpc.ServiceFactory;
+
+import org.apache.tuscany.binding.axis.assembly.WebServiceBinding;
+import org.apache.tuscany.core.config.JavaIntrospectionHelper;
+import org.apache.tuscany.core.invocation.MethodHashMap;
+import org.apache.tuscany.model.assembly.ExternalService;
+import org.osoa.sca.ServiceRuntimeException;
+import org.osoa.sca.ServiceUnavailableException;
 
 /**
  * A mock client for a transport binding
@@ -23,15 +37,96 @@
  * @version $Rev$ $Date$
  */
 public class ExternalWebServiceClient {
+    
+    
+    private WebServicePortMetaData portMetaData;
+    private Service jaxrpcService;
+    private Map<Method, Call> calls=new MethodHashMap();
+
+    /**
+     * Constructs a new ExternalWebServiceClient.
+     * @param externalService
+     * @param wsBinding
+     */
+    public ExternalWebServiceClient(ExternalService externalService, WebServiceBinding wsBinding) {
+        
+        // Create a port metadata info object to hold the port information
+        portMetaData = new WebServicePortMetaData(wsBinding.getWSDLDefinition(), wsBinding.getWSDLPort(), wsBinding.getURI(), false);
+
+        // Create a JAX-RPC service
+        QName wsdlServiceName = portMetaData.getService().getQName();
+        try {
+            jaxrpcService = ServiceFactory.newInstance().createService(wsdlServiceName);
+        } catch (ServiceException e) {
+            throw new ServiceUnavailableException(e);
+        }
+
+        // Create JAX-RPC calls for all the methods on the service contract
+        Set<Method> methods=JavaIntrospectionHelper.getAllUniqueMethods(externalService.getConfiguredService().getService().getServiceContract().getInterface());
+        for (Method method : methods) {
+            Call call=createCall(method);
+            calls.put(method, call);
+        }
+        
+    }
+
+    /**
+     * Create a JAX-RPC call for the given method.
+     * @param method
+     * @return
+     */
+    private Call createCall(Method method) {
+
+        // Create a JAX RPC call object
+        QName portName = portMetaData.getPortName();
+        Call call;
+        try {
+            call = (Call) jaxrpcService.createCall(portName);
+        } catch (ServiceException e) {
+            throw new IllegalArgumentException(e);
+        }
+
+        // Set the operation name
+        WebServiceOperationMetaData operationMetaData = portMetaData.getOperationMetaData(method.getName());
+        call.setOperationName(operationMetaData.getRPCOperationName());
+
+        // Set the target endpoint address
+        String endpoint = portMetaData.getEndpoint();
+        if (endpoint != null) {
+            String originalEndpoint = call.getTargetEndpointAddress();
+            if (!endpoint.equals(originalEndpoint))
+                call.setTargetEndpointAddress(endpoint);
+        }
+
+        // Set the SOAP action
+        String soapAction = operationMetaData.getSOAPAction();
+        if (soapAction != null) {
+            call.setProperty(Call.SOAPACTION_USE_PROPERTY, Boolean.TRUE);
+            call.setProperty(Call.SOAPACTION_URI_PROPERTY, soapAction);
+        }
+
+        // Set the operation style
+        String bindingStyle = operationMetaData.getStyle();
+        boolean rpcStyle = "rpc".equals(bindingStyle);
+        //String bindingUse = operationMetaData.getUse();
+        //boolean rpcEncoded = "encoded".equals(bindingUse);
+        call.setProperty(Call.OPERATION_STYLE_PROPERTY, (rpcStyle) ? "rpc" : "document");
 
-    public ExternalWebServiceClient() {
+        return call;
     }
 
-    public Object invoke(Object msg) {
-        if (msg!=null && msg.getClass().isArray() && Array.getLength(msg) == 1){
-            return Array.get(msg,0);
-        }else{
-            throw new TargetException("This binding only understands operations with a single parameter");
+    /**
+     * Invoke an operation on the external Web service.
+     * @param method
+     * @param args
+     * @return
+     */
+    public Object invoke(Method method,  Object[] args) {
+        Call call=calls.get(method);
+        try {
+            return call.invoke(args);
+        } catch (RemoteException e) {
+            throw new ServiceRuntimeException(e);
         }
     }
 }

Modified: incubator/tuscany/java/sca/binding.axis/src/main/java/org/apache/tuscany/binding/axis/handler/ExternalWebServiceTargetInvoker.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/binding.axis/src/main/java/org/apache/tuscany/binding/axis/handler/ExternalWebServiceTargetInvoker.java?rev=381254&r1=381253&r2=381254&view=diff
==============================================================================
--- incubator/tuscany/java/sca/binding.axis/src/main/java/org/apache/tuscany/binding/axis/handler/ExternalWebServiceTargetInvoker.java (original)
+++ incubator/tuscany/java/sca/binding.axis/src/main/java/org/apache/tuscany/binding/axis/handler/ExternalWebServiceTargetInvoker.java Sun Feb 26 20:19:28 2006
@@ -67,9 +67,9 @@
         }
         ExternalWebServiceClient client = (ExternalWebServiceClient) context.getImplementationInstance(true);
         if (payload != null) {
-            return client.invoke(payload);
+            return client.invoke(method, (Object[])payload);
         } else {
-            return client.invoke(null);
+            return client.invoke(method, null);
         }
     }
 

Modified: incubator/tuscany/java/sca/binding.axis/src/main/java/org/apache/tuscany/binding/axis/handler/WebServicePortMetaData.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/binding.axis/src/main/java/org/apache/tuscany/binding/axis/handler/WebServicePortMetaData.java?rev=381254&r1=381253&r2=381254&view=diff
==============================================================================
--- incubator/tuscany/java/sca/binding.axis/src/main/java/org/apache/tuscany/binding/axis/handler/WebServicePortMetaData.java (original)
+++ incubator/tuscany/java/sca/binding.axis/src/main/java/org/apache/tuscany/binding/axis/handler/WebServicePortMetaData.java Sun Feb 26 20:19:28 2006
@@ -17,6 +17,7 @@
 package org.apache.tuscany.binding.axis.handler;
 
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Iterator;
 import java.util.List;
 
@@ -66,10 +67,12 @@
         // Lookup the named port
         this.wsdlPort=wsdlPort;
         wsdlPortName = new QName(wsdlDefinition.getTargetNamespace(), wsdlPort.getName());
-        for (Iterator i = wsdlDefinition.getServices().values().iterator(); i.hasNext() && wsdlPort == null;) {
-            wsdlService = (javax.wsdl.Service) i.next();
-            if (wsdlService.getPorts().containsValue(wsdlPort)) {
-                wsdlServiceName = wsdlService.getQName();
+        
+        Collection<Service> services=(Collection<Service>)wsdlDefinition.getServices().values();
+        for (Service service : services) {
+            if (service.getPorts().containsValue(wsdlPort)) {
+                wsdlService = service;
+                wsdlServiceName = service.getQName();
                 break;
             }
         }