From 2143f3e8871c475d443c6c2132e113c6698a8669 Mon Sep 17 00:00:00 2001 From: rfeng Date: Thu, 25 Jun 2009 19:52:25 +0000 Subject: Add the workaround to create a URL based on the free port if no default is configured git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@788489 13f79535-47bb-0310-9956-ffa450edef68 --- .../axis2/impl/Axis2SCAServiceBindingProvider.java | 63 ++++++++++++++-------- 1 file changed, 42 insertions(+), 21 deletions(-) (limited to 'java/sca') diff --git a/java/sca/modules/binding-sca-axis2-runtime/src/main/java/org/apache/tuscany/sca/binding/sca/axis2/impl/Axis2SCAServiceBindingProvider.java b/java/sca/modules/binding-sca-axis2-runtime/src/main/java/org/apache/tuscany/sca/binding/sca/axis2/impl/Axis2SCAServiceBindingProvider.java index 27f669b889..36cf520d5c 100644 --- a/java/sca/modules/binding-sca-axis2-runtime/src/main/java/org/apache/tuscany/sca/binding/sca/axis2/impl/Axis2SCAServiceBindingProvider.java +++ b/java/sca/modules/binding-sca-axis2-runtime/src/main/java/org/apache/tuscany/sca/binding/sca/axis2/impl/Axis2SCAServiceBindingProvider.java @@ -6,25 +6,27 @@ * 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. + * under the License. */ package org.apache.tuscany.sca.binding.sca.axis2.impl; +import java.io.IOException; +import java.net.ServerSocket; +import java.net.URI; import java.util.logging.Logger; import org.apache.axiom.om.OMElement; import org.apache.tuscany.sca.assembly.DistributedSCABinding; import org.apache.tuscany.sca.assembly.Endpoint; -import org.apache.tuscany.sca.assembly.EndpointReference; import org.apache.tuscany.sca.assembly.SCABinding; import org.apache.tuscany.sca.binding.ws.WebServiceBinding; import org.apache.tuscany.sca.binding.ws.WebServiceBindingFactory; @@ -42,22 +44,22 @@ import org.apache.tuscany.sca.runtime.RuntimeComponent; import org.apache.tuscany.sca.runtime.RuntimeComponentService; /** - * The service binding provider for the remote sca binding implementation. Relies on the - * binding-ws-axis implementation for providing a remote message endpoint - * + * The service binding provider for the remote sca binding implementation. Relies on the + * binding-ws-axis implementation for providing a remote message endpoint + * * @version $Rev$ $Date$ */ public class Axis2SCAServiceBindingProvider implements ServiceBindingProvider { - + private static final Logger logger = Logger.getLogger(Axis2SCAServiceBindingProvider.class.getName()); private RuntimeComponent component; private RuntimeComponentService service; private SCABinding binding; - + private ServiceBindingProvider axisProvider; private WebServiceBinding wsBinding; - + private boolean started = false; @@ -67,24 +69,43 @@ public class Axis2SCAServiceBindingProvider implements ServiceBindingProvider { ServletHostExtensionPoint servletHosts = extensionPoints.getExtensionPoint(ServletHostExtensionPoint.class); ServletHost servletHost = servletHosts.getServletHosts().get(0); FactoryExtensionPoint modelFactories = extensionPoints.getExtensionPoint(FactoryExtensionPoint.class); - MessageFactory messageFactory = modelFactories.getFactory(MessageFactory.class); + MessageFactory messageFactory = modelFactories.getFactory(MessageFactory.class); this.component = (RuntimeComponent)endpoint.getComponent(); this.service = (RuntimeComponentService)endpoint.getService(); this.binding = ((DistributedSCABinding)endpoint.getBinding()).getSCABinding(); - + // create a ws binding model wsBinding = modelFactories.getFactory(WebServiceBindingFactory.class).createWebServiceBinding(); - wsBinding.setName(this.binding.getName()); + wsBinding.setName(this.binding.getName()); + + URI uri = URI.create(binding.getURI()); + if (!uri.isAbsolute()) { + int port = 8085; + String host = "localhost"; + ServerSocket socket; + try { + socket = new ServerSocket(0); + port = socket.getLocalPort(); + // host = socket.getInetAddress().getHostAddress(); + socket.close(); + } catch (IOException e) { + } + String bindURI = "http://" + host + ":" + port + binding.getURI(); + + // FIXME: We need to pass the full URI to the endpoint registry + binding.setURI(bindURI); + } + wsBinding.setURI(this.binding.getURI()); - + // Turn the java interface contract into a WSDL interface contract BindingWSDLGenerator.generateWSDL(component, service, wsBinding, extensionPoints, null); // Set to use the Axiom data binding InterfaceContract contract = wsBinding.getBindingInterfaceContract(); contract.getInterface().resetDataBinding(OMElement.class.getName()); - + // create a copy of the endpoint but with the web service binding in Endpoint ep = null; try { @@ -93,14 +114,14 @@ public class Axis2SCAServiceBindingProvider implements ServiceBindingProvider { // we know we can clone endpoint references } ep.setBinding(wsBinding); - + // create the real Axis2 service provider - ProviderFactoryExtensionPoint providerFactories = + ProviderFactoryExtensionPoint providerFactories = extensionPoints.getExtensionPoint(ProviderFactoryExtensionPoint.class); - BindingProviderFactory providerFactory = + BindingProviderFactory providerFactory = (BindingProviderFactory) providerFactories.getProviderFactory(WebServiceBinding.class); axisProvider = providerFactory.createServiceBindingProvider(ep); - + } public InterfaceContract getBindingInterfaceContract() { @@ -117,7 +138,7 @@ public class Axis2SCAServiceBindingProvider implements ServiceBindingProvider { } else { started = true; } - + axisProvider.start(); } @@ -127,7 +148,7 @@ public class Axis2SCAServiceBindingProvider implements ServiceBindingProvider { } else { started = false; } - + axisProvider.stop(); } -- cgit v1.2.3