You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by dk...@apache.org on 2008/08/15 20:09:32 UTC

svn commit: r686299 - /cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/ServiceImpl.java

Author: dkulp
Date: Fri Aug 15 11:09:31 2008
New Revision: 686299

URL: http://svn.apache.org/viewvc?rev=686299&view=rev
Log:
Slight speed up when creating a service.  Don't process the wsdl into a servicemodel, just grab the port information out of it for JAXWS usage.

Modified:
    cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/ServiceImpl.java

Modified: cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/ServiceImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/ServiceImpl.java?rev=686299&r1=686298&r2=686299&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/ServiceImpl.java (original)
+++ cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/ServiceImpl.java Fri Aug 15 11:09:31 2008
@@ -35,6 +35,13 @@
 import java.util.logging.Logger;
 
 import javax.jws.WebService;
+import javax.wsdl.Definition;
+import javax.wsdl.Port;
+import javax.wsdl.extensions.ExtensibilityElement;
+import javax.wsdl.extensions.soap.SOAPAddress;
+import javax.wsdl.extensions.soap.SOAPBinding;
+import javax.wsdl.extensions.soap12.SOAP12Address;
+import javax.wsdl.extensions.soap12.SOAP12Binding;
 import javax.xml.bind.JAXBContext;
 import javax.xml.namespace.QName;
 import javax.xml.ws.Dispatch;
@@ -62,6 +69,7 @@
 import org.apache.cxf.endpoint.EndpointException;
 import org.apache.cxf.endpoint.ServiceContractResolverRegistry;
 import org.apache.cxf.feature.AbstractFeature;
+import org.apache.cxf.helpers.CastUtils;
 import org.apache.cxf.jaxb.JAXBDataBinding;
 import org.apache.cxf.jaxws.binding.soap.JaxWsSoapBindingConfiguration;
 import org.apache.cxf.jaxws.handler.HandlerResolverImpl;
@@ -79,6 +87,8 @@
 import org.apache.cxf.service.model.EndpointInfo;
 import org.apache.cxf.service.model.ServiceInfo;
 import org.apache.cxf.service.model.ServiceModelUtil;
+import org.apache.cxf.tools.common.extensions.soap.SoapAddress;
+import org.apache.cxf.tools.common.extensions.soap.SoapBinding;
 import org.apache.cxf.tools.util.URIParserUtil;
 import org.apache.cxf.transport.DestinationFactory;
 import org.apache.cxf.transport.DestinationFactoryManager;
@@ -86,6 +96,8 @@
 import org.apache.cxf.ws.addressing.EndpointReferenceType;
 import org.apache.cxf.ws.addressing.VersionTransformer;
 import org.apache.cxf.wsdl.EndpointReferenceUtils;
+import org.apache.cxf.wsdl.WSDLManager;
+import org.apache.cxf.wsdl.http.AddressType;
 import org.apache.cxf.wsdl11.WSDLServiceFactory;
 
 public class ServiceImpl extends ServiceDelegate {
@@ -97,12 +109,14 @@
     private String wsdlURL;
 
     private HandlerResolver handlerResolver;
-    private final Collection<QName> ports = new HashSet<QName>();
-    private Map<QName, PortInfoImpl> portInfos = new HashMap<QName, PortInfoImpl>();
     private Executor executor;
     private QName serviceName;
     private Class<?> clazz;
 
+    private final Collection<QName> ports = new HashSet<QName>();
+    private Map<QName, PortInfoImpl> portInfos = new HashMap<QName, PortInfoImpl>();
+
+
     public ServiceImpl(Bus b, URL url, QName name, Class<?> cls) {
         bus = b;
         this.serviceName = name;
@@ -137,14 +151,65 @@
         }
     }
     
-    private void initializePorts() {   
-        WSDLServiceFactory sf = new WSDLServiceFactory(bus, wsdlURL, serviceName);
-        Service service = sf.create();
-        for (ServiceInfo si : service.getServiceInfos()) { 
-            for (EndpointInfo ei : si.getEndpoints()) {
-                this.ports.add(ei.getName());
-                String bindingID = BindingID.getJaxwsBindingID(ei.getTransportId());
-                addPort(ei.getName(), bindingID, ei.getAddress());
+    private void initializePorts() {
+        try {
+            Definition def = bus.getExtension(WSDLManager.class).getDefinition(wsdlURL);
+            javax.wsdl.Service serv = def.getService(serviceName);
+            if (serv == null) {
+                throw new WebServiceException("Could not find service named " + serviceName 
+                                              + " in wsdl " + wsdlURL);
+            }
+            
+            Map<String, Port> wsdlports = CastUtils.cast(serv.getPorts());
+            for (Port port : wsdlports.values()) {
+                QName name = new QName(serviceName.getNamespaceURI(), port.getName());
+                
+                String tpId = null;
+                String address = null;
+                List<? extends ExtensibilityElement> extensions 
+                    = CastUtils.cast(port.getBinding().getExtensibilityElements());
+                if (!extensions.isEmpty()) {
+                    ExtensibilityElement e = extensions.get(0);
+                    if (e instanceof SoapBinding) {
+                        tpId = ((SoapBinding)e).getTransportURI();
+                    } else if (e instanceof SOAP12Binding) {
+                        tpId = ((SOAP12Binding)e).getTransportURI();
+                    } else if (e instanceof SOAPBinding) {
+                        tpId = ((SOAPBinding)e).getTransportURI();
+                    }
+                }
+                extensions = CastUtils.cast(port.getExtensibilityElements());
+                if (!extensions.isEmpty()) {
+                    ExtensibilityElement e = extensions.get(0);
+                    if (tpId == null) {
+                        tpId = e.getElementType().getNamespaceURI();
+                    }
+                    if (e instanceof SoapAddress) {
+                        address = ((SoapAddress)e).getLocationURI();
+                    } else if (e instanceof AddressType) {
+                        address = ((AddressType)e).getLocation();                        
+                    } else if (e instanceof SOAP12Address) {
+                        address = ((SOAP12Address)e).getLocationURI();
+                    } else if (e instanceof SOAPAddress) {
+                        address = ((SOAPAddress)e).getLocationURI();                        
+                    }
+                }
+                this.ports.add(name);
+                String bindingID = BindingID.getJaxwsBindingID(tpId);
+                addPort(name, bindingID, address);
+            }
+        } catch (WebServiceException e) {
+            throw e;
+        } catch (Throwable e) {
+            e.printStackTrace();
+            WSDLServiceFactory sf = new WSDLServiceFactory(bus, wsdlURL, serviceName);
+            Service service = sf.create();
+            for (ServiceInfo si : service.getServiceInfos()) { 
+                for (EndpointInfo ei : si.getEndpoints()) {
+                    this.ports.add(ei.getName());
+                    String bindingID = BindingID.getJaxwsBindingID(ei.getTransportId());
+                    addPort(ei.getName(), bindingID, ei.getAddress());
+                }
             }
         }
     }