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;
}
}