You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by da...@apache.org on 2007/02/12 16:50:01 UTC

svn commit: r506507 - in /incubator/cxf/trunk: common/common/src/main/java/org/apache/cxf/common/util/ rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/spring/ rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/ rt/frontend/jaxws/src/main...

Author: dandiep
Date: Mon Feb 12 07:50:00 2007
New Revision: 506507

URL: http://svn.apache.org/viewvc?view=rev&rev=506507
Log:
Apply CXF-324 to fix WSDL generation. Thanks Jarek! Also, I added a wsdlLocation property into the jaxws.xsd, but it doesn't work yet. I'm going to have to make further changes to EndpointImpl to make this possible.

Added:
    incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/CodeFirstWSDLTest.java   (with props)
    incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/Hello2.java   (with props)
    incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/Hello3.java   (with props)
Modified:
    incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/common/util/PackageUtils.java
    incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/spring/EndpointFactoryBean.java
    incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsImplementorInfo.java
    incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsServiceConfiguration.java
    incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsServiceFactoryBean.java
    incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/ProviderServiceFactoryBean.java
    incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/WebServiceProviderConfiguration.java
    incubator/cxf/trunk/rt/frontend/jaxws/src/main/resources/org/apache/cxf/jaxws/spring/jaxws.xsd
    incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/CodeFirstTest.java
    incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/SpringBeansTest.java
    incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/endpoints.xml
    incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/support/ProviderServiceFactoryBeanTest.java

Modified: incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/common/util/PackageUtils.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/common/util/PackageUtils.java?view=diff&rev=506507&r1=506506&r2=506507
==============================================================================
--- incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/common/util/PackageUtils.java (original)
+++ incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/common/util/PackageUtils.java Mon Feb 12 07:50:00 2007
@@ -177,5 +177,31 @@
     private static boolean contiansReservedKeywords(String token) {
         return KEYWORDS.contains(token);
     }
+
+    public static String getNamespace(String packageName) {
+        if (packageName == null || packageName.length() == 0) {
+            return null;
+        }
+        StringTokenizer tokenizer = new StringTokenizer(packageName, ".");
+        String[] tokens;
+        if (tokenizer.countTokens() == 0) {
+            tokens = new String[0];
+        } else {
+            tokens = new String[tokenizer.countTokens()];
+            for (int i = tokenizer.countTokens() - 1; i >= 0; i--) {
+                tokens[i] = tokenizer.nextToken();
+            }
+        }
+        StringBuffer namespace = new StringBuffer("http://");
+        String dot = "";
+        for (int i = 0; i < tokens.length; i++) {
+            if (i == 1) {
+                dot = ".";
+            }
+            namespace.append(dot + tokens[i]);
+        }
+        namespace.append('/');
+        return namespace.toString();
+    }
     
 }

Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/spring/EndpointFactoryBean.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/spring/EndpointFactoryBean.java?view=diff&rev=506507&r1=506506&r2=506507
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/spring/EndpointFactoryBean.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/spring/EndpointFactoryBean.java Mon Feb 12 07:50:00 2007
@@ -48,6 +48,7 @@
     private ApplicationContext context;
     private String binding;
     private Map<String, Object> properties;
+    private String wsdlLocation;
     
     public void setApplicationContext(ApplicationContext c) 
         throws BeansException {
@@ -160,4 +161,13 @@
     public void setServiceFactory(AbstractJaxWsServiceFactoryBean serviceFactory) {
         this.serviceFactory = serviceFactory;
     }
+
+    public String getWsdlLocation() {
+        return wsdlLocation;
+    }
+
+    public void setWsdlLocation(String wsdlLocation) {
+        this.wsdlLocation = wsdlLocation;
+    }
+    
 }

Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsImplementorInfo.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsImplementorInfo.java?view=diff&rev=506507&r1=506506&r2=506507
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsImplementorInfo.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsImplementorInfo.java Mon Feb 12 07:50:00 2007
@@ -36,6 +36,7 @@
 
 import org.apache.cxf.common.classloader.ClassLoaderUtils;
 import org.apache.cxf.common.logging.LogUtils;
+import org.apache.cxf.common.util.PackageUtils;
 import org.apache.cxf.common.util.StringUtils;
 import org.apache.cxf.jaxb.JAXBEncoderDecoder;
 
@@ -93,18 +94,22 @@
         if (implementorAnnotation != null) {
             serviceName = implementorAnnotation.serviceName();
             namespace = implementorAnnotation.targetNamespace();
-        } else {
-            // Must be a provider
+        } else if (wsProviderAnnotation != null) {
             serviceName = wsProviderAnnotation.serviceName();
             namespace = wsProviderAnnotation.targetNamespace();
+        } else {
+            return null;
         }
+
         if (StringUtils.isEmpty(serviceName)) {
-            serviceName = implementorClass.getName();
+            serviceName = implementorClass.getSimpleName() + "Service";
         }
-        if (!StringUtils.isEmpty(namespace) && !StringUtils.isEmpty(serviceName)) {
-            return new QName(namespace, serviceName);
+
+        if (StringUtils.isEmpty(namespace)) {
+            namespace = getDefaultNamespace(implementorClass);
         }
-        return null;
+
+        return new QName(namespace, serviceName);
     }
 
     /**
@@ -118,21 +123,64 @@
         if (implementorAnnotation != null) {
             portName = implementorAnnotation.portName();
             namespace = implementorAnnotation.targetNamespace();
-        } else {
-            // Must be a provider
+        } else if (wsProviderAnnotation != null) {
             portName = wsProviderAnnotation.portName();
             namespace = wsProviderAnnotation.targetNamespace();
+        } else {
+            return null;
         }
 
         if (StringUtils.isEmpty(portName)) {
             portName = implementorClass.getSimpleName() + "Port";
         }
 
-        if (!StringUtils.isEmpty(portName)) {
-            return new QName(namespace, portName);
+        if (StringUtils.isEmpty(namespace)) {
+            namespace = getDefaultNamespace(implementorClass);
+        }
+
+        return new QName(namespace, portName);
+    }
+
+    public QName getInterfaceName() {
+        String name = null;
+        String namespace = null;
+
+        if (seiAnnotation != null) {
+            if (StringUtils.isEmpty(seiAnnotation.name())) {
+                name = seiClass.getSimpleName();
+            } else {
+                name = seiAnnotation.name();
+            }
+            if (StringUtils.isEmpty(seiAnnotation.targetNamespace())) {
+                namespace = getDefaultNamespace(seiClass);
+            } else {
+                namespace = seiAnnotation.targetNamespace();
+            }
+        } else if (implementorAnnotation != null) {
+            if (StringUtils.isEmpty(implementorAnnotation.name())) {
+                name = implementorClass.getSimpleName();
+            } else {
+                name = implementorAnnotation.name();
+            }
+            if (StringUtils.isEmpty(implementorAnnotation.targetNamespace())) {
+                namespace = getDefaultNamespace(implementorClass);
+            } else {
+                namespace = implementorAnnotation.targetNamespace();
+            }
         } else {
-            return new QName(namespace, "NoNamedPort");
-        }        
+            return null;
+        }
+        
+        return new QName(namespace, name);
+    }
+
+    private String getDefaultNamespace(Class clazz) {
+        Package pkg = clazz.getPackage();
+        if (pkg == null) {
+            return null;
+        } else {
+            return PackageUtils.getNamespace(pkg.getName());
+        }
     }
         
     @SuppressWarnings("unchecked")

Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsServiceConfiguration.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsServiceConfiguration.java?view=diff&rev=506507&r1=506506&r2=506507
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsServiceConfiguration.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsServiceConfiguration.java Mon Feb 12 07:50:00 2007
@@ -63,40 +63,24 @@
         implInfo = ((JaxWsServiceFactoryBean)serviceFactory).getJaxWsImplementorInfo();
     }
 
-    WebService getConcreteWebServiceAttribute() {
-        return getServiceFactory().getServiceClass().getAnnotation(WebService.class);
-    }
-
-    WebService getPortTypeWebServiceAttribute() {
-        Class<?> epi = implInfo.getEndpointClass();
-        WebService ws = null;
-        if (epi != null) {
-            ws = epi.getAnnotation(WebService.class);
-        }
-        if (ws == null) {
-            ws = getConcreteWebServiceAttribute();
-        }
-        return ws;
-    }
-
     @Override
     public String getServiceName() {
-        WebService ws = getConcreteWebServiceAttribute();
-        if (ws != null && ws.serviceName().length() > 0) {
-            return ws.serviceName();
+        QName service = implInfo.getServiceName();
+        if (service == null) {
+            return null;
+        } else {
+            return service.getLocalPart();
         }
-
-        return null;
     }
 
     @Override
     public String getServiceNamespace() {
-        WebService ws = getConcreteWebServiceAttribute();
-        if (ws != null && ws.targetNamespace().length() > 0) {
-            return ws.targetNamespace();
+        QName service = implInfo.getServiceName();
+        if (service == null) {
+            return null;
+        } else {
+            return service.getNamespaceURI();
         }
-
-        return null;
     }
 
     @Override
@@ -105,19 +89,24 @@
     }
 
     @Override
+    public QName getInterfaceName() {
+        return implInfo.getInterfaceName();
+    }
+
+    @Override
     public URL getWsdlURL() {
-        WebService ws = getPortTypeWebServiceAttribute();
-        if (ws != null && ws.wsdlLocation().length() > 0) {
+        String wsdlLocation = implInfo.getWsdlLocation();
+        if (wsdlLocation != null && wsdlLocation.length() > 0) {
             try {
-                URIResolver resolver = new URIResolver(null, ws.wsdlLocation(), getClass());
+                URIResolver resolver = new URIResolver(null, wsdlLocation, getClass());
                 if (resolver.isResolved()) {
                     return resolver.getURI().toURL();
                 } else {
-                    throw new WebServiceException("Could not find WSDL with URL " + ws.wsdlLocation());
+                    throw new WebServiceException("Could not find WSDL with URL " + wsdlLocation);
                 }
             } catch (IOException e) {
                 throw new ServiceConstructionException(
-                    new Message("LOAD_WSDL_EXC", BUNDLE, ws.wsdlLocation()), e);
+                    new Message("LOAD_WSDL_EXC", BUNDLE, wsdlLocation), e);
             }
         }
         return null;

Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsServiceFactoryBean.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsServiceFactoryBean.java?view=diff&rev=506507&r1=506506&r2=506507
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsServiceFactoryBean.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsServiceFactoryBean.java Mon Feb 12 07:50:00 2007
@@ -56,7 +56,7 @@
     public JaxWsServiceFactoryBean(JaxWsImplementorInfo implInfo) {
         this();
         setJaxWsImplementorInfo(implInfo);
-        this.serviceClass = implInfo.getImplementorClass();
+        this.serviceClass = implInfo.getEndpointClass();
     }
 
     @Override

Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/ProviderServiceFactoryBean.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/ProviderServiceFactoryBean.java?view=diff&rev=506507&r1=506506&r2=506507
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/ProviderServiceFactoryBean.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/ProviderServiceFactoryBean.java Mon Feb 12 07:50:00 2007
@@ -128,7 +128,7 @@
             
             EndpointInfo ei = new EndpointInfo(si, bindingURI);
             ei.setBinding(bi);
-            ei.setName(new QName(getServiceName() + "Port"));
+            ei.setName(getEndpointName());
             si.addEndpoint(ei);
         } else if ("soapns".equals(bindingURI)) {
             // TODO

Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/WebServiceProviderConfiguration.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/WebServiceProviderConfiguration.java?view=diff&rev=506507&r1=506506&r2=506507
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/WebServiceProviderConfiguration.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/WebServiceProviderConfiguration.java Mon Feb 12 07:50:00 2007
@@ -25,7 +25,6 @@
 
 import javax.xml.namespace.QName;
 import javax.xml.ws.WebServiceException;
-import javax.xml.ws.WebServiceProvider;
 
 import org.apache.cxf.common.i18n.BundleUtils;
 import org.apache.cxf.common.i18n.Message;
@@ -38,29 +37,32 @@
     private static final ResourceBundle BUNDLE = BundleUtils.getBundle(WebServiceProviderConfiguration.class);
 
     private JaxWsImplementorInfo implInfo;
-    private WebServiceProvider wsProvider;
     
     @Override
     public void setServiceFactory(ReflectionServiceFactoryBean serviceFactory) {
         super.setServiceFactory(serviceFactory);
         implInfo = ((ProviderServiceFactoryBean) serviceFactory).getJaxWsImplementorInfo();
-        wsProvider = implInfo.getWsProvider();
     }
 
+
     @Override
     public String getServiceName() {
-        if (wsProvider.serviceName().length() > 0) {
-            return wsProvider.serviceName();
+        QName service = implInfo.getServiceName();
+        if (service == null) {
+            return null;
+        } else {
+            return service.getLocalPart();
         }
-        return null;
     }
 
     @Override
     public String getServiceNamespace() {
-        if (wsProvider.targetNamespace().length() > 0) {
-            return wsProvider.targetNamespace();
+        QName service = implInfo.getServiceName();
+        if (service == null) {
+            return null;
+        } else {
+            return service.getNamespaceURI();
         }
-        return null;
     }
 
     @Override
@@ -70,20 +72,18 @@
 
     @Override
     public URL getWsdlURL() {
-        String loc = wsProvider.wsdlLocation();
-        if (loc.length() > 0) {
+        String wsdlLocation = implInfo.getWsdlLocation();
+        if (wsdlLocation != null && wsdlLocation.length() > 0) {
             try {
-                URIResolver resolver = new URIResolver(null, loc, getClass());
+                URIResolver resolver = new URIResolver(null, wsdlLocation, getClass());
                 if (resolver.isResolved()) {
                     return resolver.getURI().toURL();
                 } else {
-                    throw new WebServiceException("Could not find WSDL with URL " + loc);
+                    throw new WebServiceException("Could not find WSDL with URL " + wsdlLocation);
                 }
             } catch (IOException e) {
-                throw new ServiceConstructionException(new Message("LOAD_WSDL_EXC", 
-                                                                   BUNDLE, 
-                                                                   loc),
-                                                       e);
+                throw new ServiceConstructionException(
+                    new Message("LOAD_WSDL_EXC", BUNDLE, wsdlLocation), e);
             }
         }
         return null;

Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/resources/org/apache/cxf/jaxws/spring/jaxws.xsd
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/resources/org/apache/cxf/jaxws/spring/jaxws.xsd?view=diff&rev=506507&r1=506506&r2=506507
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/resources/org/apache/cxf/jaxws/spring/jaxws.xsd (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/resources/org/apache/cxf/jaxws/spring/jaxws.xsd Mon Feb 12 07:50:00 2007
@@ -27,6 +27,7 @@
           <xsd:attribute name="publish" type="xsd:boolean" default="true"/>
           <xsd:attribute name="portName" type="xsd:QName" />
           <xsd:attribute name="serviceName" type="xsd:QName" />
+          <xsd:attribute name="wsdlLocation" type="xsd:string" />
         </xsd:extension>
       </xsd:complexContent>
     </xsd:complexType>
@@ -51,6 +52,7 @@
           <xsd:attribute name="serviceBean" type="xsd:string"/>
           <xsd:attribute name="start" type="xsd:boolean" default="true"/>
           <xsd:attribute name="transportId" type="xsd:string"/>
+          <xsd:attribute name="wsdlLocation" type="xsd:string" />
         </xsd:extension>
       </xsd:complexContent>
     </xsd:complexType>

Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/CodeFirstTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/CodeFirstTest.java?view=diff&rev=506507&r1=506506&r2=506507
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/CodeFirstTest.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/CodeFirstTest.java Mon Feb 12 07:50:00 2007
@@ -52,9 +52,9 @@
         Document wsdl = WSDLFactory.newInstance().newWSDLWriter().getDocument(d);
         addNamespace("svc", "http://service.jaxws.cxf.apache.org/");
         
-        assertValid("/wsdl:definitions/wsdl:service[@name='Hello']", wsdl);
+        assertValid("/wsdl:definitions/wsdl:service[@name='HelloService']", wsdl);
         assertValid("//wsdl:port/wsdlsoap:address[@location='" + address + "']", wsdl);
-        assertValid("//wsdl:portType[@name='HelloPortType']", wsdl);
+        assertValid("//wsdl:portType[@name='Hello']", wsdl);
         assertValid("/wsdl:definitions/wsdl:message[@name='sayHi']"
                     + "/wsdl:part[@type='xsd:string'][@name='text']",
                     wsdl);
@@ -67,9 +67,9 @@
         
         addNamespace("svc", "http://service.jaxws.cxf.apache.org");
         
-        assertValid("/wsdl:definitions/wsdl:service[@name='Hello']", wsdl);
+        assertValid("/wsdl:definitions/wsdl:service[@name='HelloService']", wsdl);
         assertValid("//wsdl:port/wsdlsoap:address[@location='" + address + "']", wsdl);
-        assertValid("//wsdl:portType[@name='HelloPortType']", wsdl);
+        assertValid("//wsdl:portType[@name='Hello']", wsdl);
         assertValid("/wsdl:definitions/wsdl:message[@name='sayHi']"
                     + "/wsdl:part[@element='ns1:sayHi'][@name='sayHi']",
                     wsdl);

Added: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/CodeFirstWSDLTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/CodeFirstWSDLTest.java?view=auto&rev=506507
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/CodeFirstWSDLTest.java (added)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/CodeFirstWSDLTest.java Mon Feb 12 07:50:00 2007
@@ -0,0 +1,115 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * 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.
+ */
+package org.apache.cxf.jaxws;
+
+import java.util.Collection;
+
+import javax.wsdl.Definition;
+import javax.xml.namespace.QName;
+
+import org.apache.cxf.Bus;
+
+import org.apache.cxf.frontend.ServerFactoryBean;
+import org.apache.cxf.jaxws.service.Hello2;
+import org.apache.cxf.jaxws.service.Hello3;
+import org.apache.cxf.jaxws.support.JaxWsImplementorInfo;
+import org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean;
+import org.apache.cxf.service.Service;
+import org.apache.cxf.service.factory.ReflectionServiceFactoryBean;
+import org.apache.cxf.service.model.BindingInfo;
+import org.apache.cxf.service.model.InterfaceInfo;
+import org.apache.cxf.wsdl11.ServiceWSDLBuilder;
+
+public class CodeFirstWSDLTest extends AbstractJaxWsTest {
+    String address = "local://localhost:9000/Hello";
+    
+    private Definition createService(Class clazz) throws Exception {
+        
+        JaxWsImplementorInfo info = new JaxWsImplementorInfo(clazz);
+        ReflectionServiceFactoryBean bean = new JaxWsServiceFactoryBean(info);
+
+        Bus bus = getBus();
+        bean.setBus(bus);
+        
+        Service service = bean.create();
+
+        InterfaceInfo i = service.getServiceInfo().getInterface();
+        assertEquals(2, i.getOperations().size());
+
+        ServerFactoryBean svrFactory = new ServerFactoryBean();
+        svrFactory.setBus(bus);
+        svrFactory.setServiceFactory(bean);
+        svrFactory.setAddress(address);
+        svrFactory.create();
+        
+        Collection<BindingInfo> bindings = service.getServiceInfo().getBindings();
+        assertEquals(1, bindings.size());
+        
+        ServiceWSDLBuilder wsdlBuilder = 
+            new ServiceWSDLBuilder(service.getServiceInfo());
+        return wsdlBuilder.build();
+    }
+
+    public void testWSDL1() throws Exception {
+        Definition d = createService(Hello2.class);
+
+        QName serviceName = new QName("http://service.jaxws.cxf.apache.org/", "Hello2Service");
+
+        javax.wsdl.Service service = d.getService(serviceName);
+
+        assertNotNull(service);
+
+        QName portName = new QName("http://service.jaxws.cxf.apache.org/", "Hello2Port");
+
+        javax.wsdl.Port port = service.getPort(portName.getLocalPart());
+
+        assertNotNull(port);
+
+        QName portTypeName = new QName("http://service.jaxws.cxf.apache.org/", "HelloInterface");
+
+        javax.wsdl.PortType portType = d.getPortType(portTypeName);
+
+        assertNotNull(portType);
+        assertEquals(2, portType.getOperations().size());
+    }
+
+    public void testWSDL2() throws Exception {
+        Definition d = createService(Hello3.class);
+
+        QName serviceName = new QName("http://mynamespace.com/", "MyService");
+
+        javax.wsdl.Service service = d.getService(serviceName);
+
+        assertNotNull(service);
+
+        QName portName = new QName("http://mynamespace.com/", "MyPort");
+
+        javax.wsdl.Port port = service.getPort(portName.getLocalPart());
+
+        assertNotNull(port);
+
+        QName portTypeName = new QName("http://service.jaxws.cxf.apache.org/", "HelloInterface");
+
+        javax.wsdl.PortType portType = d.getPortType(portTypeName);
+
+        assertNotNull(portType);
+        assertEquals(2, portType.getOperations().size());
+    }
+
+}

Propchange: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/CodeFirstWSDLTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/CodeFirstWSDLTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/Hello2.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/Hello2.java?view=auto&rev=506507
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/Hello2.java (added)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/Hello2.java Mon Feb 12 07:50:00 2007
@@ -0,0 +1,43 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * 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.
+ */
+package org.apache.cxf.jaxws.service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.jws.WebService;
+
+@WebService(endpointInterface = "org.apache.cxf.jaxws.service.HelloInterface")
+public class Hello2 implements HelloInterface {
+
+    public String sayHi(String text) {
+        return text;
+    }
+    
+    public List<String> getGreetings() {
+        List<String> strings = new ArrayList<String>();
+        strings.add("Hello");
+        strings.add("Bonjour");
+        return strings;
+    }
+
+    public void sayGoodbye() {
+    }
+
+}

Propchange: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/Hello2.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/Hello2.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/Hello3.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/Hello3.java?view=auto&rev=506507
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/Hello3.java (added)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/Hello3.java Mon Feb 12 07:50:00 2007
@@ -0,0 +1,46 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * 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.
+ */
+package org.apache.cxf.jaxws.service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.jws.WebService;
+
+@WebService(serviceName = "MyService", 
+            portName = "MyPort",
+            targetNamespace = "http://mynamespace.com/",
+            endpointInterface = "org.apache.cxf.jaxws.service.HelloInterface")
+public class Hello3 implements HelloInterface {
+
+    public String sayHi(String text) {
+        return text;
+    }
+    
+    public List<String> getGreetings() {
+        List<String> strings = new ArrayList<String>();
+        strings.add("Hello");
+        strings.add("Bonjour");
+        return strings;
+    }
+
+    public void sayGoodbye() {
+    }
+
+}

Propchange: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/Hello3.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/Hello3.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/SpringBeansTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/SpringBeansTest.java?view=diff&rev=506507&r1=506506&r2=506507
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/SpringBeansTest.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/SpringBeansTest.java Mon Feb 12 07:50:00 2007
@@ -27,7 +27,7 @@
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
 public class SpringBeansTest extends TestCase {
-    public void xtestEndpoints() throws Exception {
+    public void testEndpoints() throws Exception {
         ClassPathXmlApplicationContext ctx = 
             new ClassPathXmlApplicationContext(new String[] {"/org/apache/cxf/jaxws/spring/endpoints.xml"});
 
@@ -64,6 +64,9 @@
         
         ep = (EndpointImpl) bean;
         assertTrue(ep.getImplementor() instanceof Hello);
+        
+        bean = ctx.getBean("wsdlLocation");
+        assertNotNull(bean);
     }
     
     public void testServers() throws Exception {

Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/endpoints.xml
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/endpoints.xml?view=diff&rev=506507&r1=506506&r2=506507
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/endpoints.xml (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/endpoints.xml Mon Feb 12 07:50:00 2007
@@ -62,5 +62,9 @@
   
   <jaxws:endpoint id="classImpl" 
     implementor="org.apache.cxf.jaxws.service.Hello"
-    address="http://localhost:8080/test"/>
+    address="http://localhost:8080/test"/>
+    
+  <jaxws:endpoint id="wsdlLocation" 
+    implementor="#greeter" address="http://localhost:8080/simpleWithAddress"
+    wsdlLocation="wsdl/hello_world.wsdl"/>
 </beans>

Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/support/ProviderServiceFactoryBeanTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/support/ProviderServiceFactoryBeanTest.java?view=diff&rev=506507&r1=506506&r2=506507
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/support/ProviderServiceFactoryBeanTest.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/support/ProviderServiceFactoryBeanTest.java Mon Feb 12 07:50:00 2007
@@ -82,14 +82,15 @@
 
         Service service = bean.create();
 
-        assertEquals("SourcePayloadProvider", service.getName().getLocalPart());
+        assertEquals("SourcePayloadProviderService", service.getName().getLocalPart());
         
         InterfaceInfo intf = service.getServiceInfo().getInterface();
         assertNotNull(intf);
         
         assertEquals(1, service.getServiceInfo().getEndpoints().size());
         
-        EndpointInfo ei = service.getServiceInfo().getEndpoint(new QName("SourcePayloadProviderPort"));
+        QName portName = new QName("http://support.jaxws.cxf.apache.org/", "SourcePayloadProviderPort");
+        EndpointInfo ei = service.getServiceInfo().getEndpoint(portName);
         
         assertNotNull(ei);