From 15a47ae451a807a1094a3379422d1dec40ee7db9 Mon Sep 17 00:00:00 2001 From: slaws Date: Thu, 25 Mar 2010 17:31:00 +0000 Subject: Support bindings that specify WSDL or specify uris and expect WSDL to be generated. This is still based on default JAXWS impl git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@927517 13f79535-47bb-0310-9956-ffa450edef68 --- .../sca/binding/ws/jaxws/JAXWSBindingInvoker.java | 25 ++++++++++++++++++---- .../ws/jaxws/JAXWSServiceBindingProvider.java | 24 +++++++++++++++++++-- 2 files changed, 43 insertions(+), 6 deletions(-) (limited to 'sca-java-2.x/trunk/modules/binding-ws-runtime-jaxws/src/main/java/org/apache/tuscany/sca/binding') diff --git a/sca-java-2.x/trunk/modules/binding-ws-runtime-jaxws/src/main/java/org/apache/tuscany/sca/binding/ws/jaxws/JAXWSBindingInvoker.java b/sca-java-2.x/trunk/modules/binding-ws-runtime-jaxws/src/main/java/org/apache/tuscany/sca/binding/ws/jaxws/JAXWSBindingInvoker.java index 920b9c43fc..fd53de6a2c 100644 --- a/sca-java-2.x/trunk/modules/binding-ws-runtime-jaxws/src/main/java/org/apache/tuscany/sca/binding/ws/jaxws/JAXWSBindingInvoker.java +++ b/sca-java-2.x/trunk/modules/binding-ws-runtime-jaxws/src/main/java/org/apache/tuscany/sca/binding/ws/jaxws/JAXWSBindingInvoker.java @@ -39,6 +39,7 @@ import javax.xml.ws.Dispatch; import javax.xml.ws.Service; import javax.xml.ws.WebServiceException; import javax.xml.ws.WebServiceFeature; +import javax.xml.ws.soap.SOAPBinding; import javax.xml.ws.soap.SOAPFaultException; import org.apache.tuscany.sca.binding.ws.WebServiceBinding; @@ -78,20 +79,36 @@ public class JAXWSBindingInvoker implements Invoker, DataExchangeSemantics { } private Dispatch createDispatch(WebServiceBinding wsBinding) { - // FIXME: What should we do if the WSDL is generated in memory? URL wsdlLocation = null; try { wsdlLocation = new URL(wsBinding.getWSDLDocument().getDocumentBaseURI()); } catch (MalformedURLException e) { try { - wsdlLocation = wsBinding.getWSDLDefinition().getLocation().toURL(); + if (wsBinding.getWSDLDefinition().getLocation() != null){ + wsdlLocation = wsBinding.getWSDLDefinition().getLocation().toURL(); + } } catch (MalformedURLException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } - Service service = Service.create(wsdlLocation, wsBinding.getServiceName()); - return service.createDispatch(new QName(wsBinding.getServiceName().getNamespaceURI(), wsBinding.getPortName()), + + QName serviceName = null; + QName portName = null; + Service service = null; + + if (wsdlLocation != null){ + serviceName = wsBinding.getServiceName(); + portName = new QName(serviceName.getNamespaceURI(), wsBinding.getPortName()); + service = Service.create(wsdlLocation, serviceName); + } else { + serviceName = wsBinding.getService().getQName(); + portName = new QName(serviceName.getNamespaceURI(), wsBinding.getPort().getName()); + service = Service.create(serviceName); + service.addPort(portName, SOAPBinding.SOAP11HTTP_BINDING, wsBinding.getURI()); + } + + return service.createDispatch(portName, SOAPMessage.class, Service.Mode.MESSAGE); } diff --git a/sca-java-2.x/trunk/modules/binding-ws-runtime-jaxws/src/main/java/org/apache/tuscany/sca/binding/ws/jaxws/JAXWSServiceBindingProvider.java b/sca-java-2.x/trunk/modules/binding-ws-runtime-jaxws/src/main/java/org/apache/tuscany/sca/binding/ws/jaxws/JAXWSServiceBindingProvider.java index 95e64f5ad2..3055f1a14a 100644 --- a/sca-java-2.x/trunk/modules/binding-ws-runtime-jaxws/src/main/java/org/apache/tuscany/sca/binding/ws/jaxws/JAXWSServiceBindingProvider.java +++ b/sca-java-2.x/trunk/modules/binding-ws-runtime-jaxws/src/main/java/org/apache/tuscany/sca/binding/ws/jaxws/JAXWSServiceBindingProvider.java @@ -80,12 +80,32 @@ public class JAXWSServiceBindingProvider implements ServiceBindingProvider, Prov // Set to use the DOM data binding InterfaceContract contract = wsBinding.getBindingInterfaceContract(); contract.getInterface().resetDataBinding(Node.class.getName()); - + + // Can we safely assume there is only one port because you configure + // a binding in the following ways: + // 1/ default - one port generated = host domain : host port / structural path + // 2/ uri="absolute addr" - one port generated = host domain : uri port / uri path + // 3/ uri="relative addr" - one port generated = host domain : host port / structural path / relative path + // 4/ wsdl.binding - one port generated = host domain : host port / structural path + // 5/ wsdl.port - one port generated = host domain : port port / port path + // 6/ wsa:Address - one port generated = host domain : address port / address path + // 7/ 4 + 6 - as 6 + + // TODO the binding URI will currently have been calculated during build + // however we don't give the provider a chance to get in and effect the + // calculation (see above comment). For now just fake the addition of binding + // specific processing by adding a root if it's not already present + if (!wsBinding.getURI().startsWith("http://")) { + wsBinding.setURI("http://localhost:8085" + wsBinding.getURI()); + } } public void start() { + // TODO - turn on Axis2 JAXWS support + + wsEndpoint = Endpoint.create(this); - wsEndpoint.publish("http://localhost:8085" + wsBinding.getURI()); + wsEndpoint.publish(wsBinding.getURI()); } public void stop() { -- cgit v1.2.3