You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by jl...@apache.org on 2007/04/03 11:37:31 UTC

svn commit: r525112 - in /incubator/cxf/trunk: rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/spring/ rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/ systests/src/test/java/org/apache/cxf/systest/servlet/

Author: jliu
Date: Tue Apr  3 02:37:30 2007
New Revision: 525112

URL: http://svn.apache.org/viewvc?view=rev&rev=525112
Log:
Fix failed test of CXFServletTest.testGetImportedXSD(). Also CXF-483 (Make sure imported xsd access works when there are multiple endpoints deployed in Servlet)

Modified:
    incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/spring/EndpointFactoryBean.java
    incubator/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/ServletController.java
    incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/servlet/CXFServletTest.java

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=525112&r1=525111&r2=525112
==============================================================================
--- 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 Tue Apr  3 02:37:30 2007
@@ -86,8 +86,9 @@
                 //if wsdl can't be found, we will try to init Endpoint without wsdl
                 URL wsdl = ClassLoaderUtils.getResource(wsdlLocation, this.getClass());                
                 endpoint = new EndpointImpl(bus, implementor, binding, wsdl);
+            } else {
+                endpoint = new EndpointImpl(bus, implementor, binding);
             }
-            endpoint = new EndpointImpl(bus, implementor, binding);            
         } else {
             endpoint = new EndpointImpl(bus, implementor, serviceFactory);
         }

Modified: incubator/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/ServletController.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/ServletController.java?view=diff&rev=525112&r1=525111&r2=525112
==============================================================================
--- incubator/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/ServletController.java (original)
+++ incubator/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/ServletController.java Tue Apr  3 02:37:30 2007
@@ -21,7 +21,6 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
-import java.net.URL;
 import java.util.List;
 import java.util.logging.Level;
 import java.util.logging.Logger;
@@ -65,8 +64,7 @@
     private ServletTransportFactory transport;
     private ServletContext servletContext;
     private CXFServlet cxfServlet;
-    private URL wsdlLocation;
-
+ 
     public ServletController(ServletTransportFactory df, ServletContext servCont, CXFServlet servlet) {
         this.transport = df;
         this.servletContext = servCont;
@@ -87,26 +85,34 @@
         }
         try {
             EndpointInfo ei = new EndpointInfo();
-            ei.setAddress("http://localhost" + request.getServletPath() + request.getPathInfo());
+            String address = "";
             
+            if (xsd) {
+                address = "http://localhost"
+                          + request.getServletPath()
+                          + request.getPathInfo()
+                              .substring(0, request.getPathInfo().lastIndexOf(xsdName) - 1);
+            } else {
+                address = "http://localhost" + request.getServletPath() + request.getPathInfo();
+            }
+            ei.setAddress(address);
+           
             ServletDestination d = (ServletDestination)transport.getDestination(ei);
 
             if (d.getMessageObserver() == null) {
-                if (xsd) {
-                    generateXSD(request, res, xsdName);
+                if (request.getRequestURI().endsWith("services")) {
+                    generateServiceList(request, res);
                 } else {
-                    if (request.getRequestURI().endsWith("services")) {
-                        generateServiceList(request, res);
-                    } else {
-                        LOG.warning("Can't find the the request for" 
-                                    + "http://localhost" + request.getServletPath() 
-                                    + request.getPathInfo() + " 's Observer ");
-                        generateNotFound(request, res);
-                    }    
+                    LOG.warning("Can't find the the request for" + "http://localhost"
+                                + request.getServletPath() + request.getPathInfo() + " 's Observer ");
+                    generateNotFound(request, res);
                 }
+
+            } else if (xsd) {
+                generateXSD(request, res, d, xsdName);
             } else if (wsdl) {
                 generateWSDL(request, res, d);
-            } else {                
+            } else {
                 invokeDestination(request, res, d);
             }
         } catch (IOException e) {
@@ -114,10 +120,6 @@
         }
     }
     
-    public void setWsdlLocation(URL location) {
-        this.wsdlLocation = location;
-    }
-    
     private void generateServiceList(HttpServletRequest request, HttpServletResponse response)
         throws IOException {
         List<ServletDestination> destinations = transport.getDestinations();
@@ -140,15 +142,18 @@
         response.getWriter().write("</body></html>");
     }
 
-    private void generateXSD(HttpServletRequest request, HttpServletResponse response, String xsdName) 
-        throws ServletException {
+    private void generateXSD(HttpServletRequest request, HttpServletResponse response, ServletDestination d,
+                             String xsdName) throws ServletException {
         response.setHeader(HttpHeaderHelper.CONTENT_TYPE, "text/xml");
         try {
             OutputStream os = response.getOutputStream();
             ExtendedURIResolver resolver = new ExtendedURIResolver();
             Source source = null;
-            if (wsdlLocation != null) {
-                InputSource inputSource = resolver.resolve(xsdName, wsdlLocation.toString());
+
+            EndpointInfo ei = d.getEndpointInfo();
+            String wsdlBaseURI = ei.getService().getDescription().getBaseURI();
+            if (wsdlBaseURI != null) {
+                InputSource inputSource = resolver.resolve(xsdName, wsdlBaseURI);
                 source = new SAXSource(inputSource);
 
             } else {

Modified: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/servlet/CXFServletTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/servlet/CXFServletTest.java?view=diff&rev=525112&r1=525111&r2=525112
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/servlet/CXFServletTest.java (original)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/servlet/CXFServletTest.java Tue Apr  3 02:37:30 2007
@@ -33,7 +33,6 @@
 import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
 import org.apache.cxf.service.invoker.BeanInvoker;
 import org.apache.hello_world_soap_http.GreeterImpl;
-import org.junit.Ignore;
 import org.junit.Test;
 
 
@@ -90,26 +89,22 @@
     @Test
     public void testGetServiceList() throws Exception {
         ServletUnitClient client = newClient();
-        setupJaxwsService();
         client.setExceptionsThrownOnErrorStatus(false);
 
         WebResponse res = client.getResponse("http://localhost/services");    
         
         WebLink[] links = res.getLinks();
-        //REVISIT: there are two services, one is created by cxf-servlet.xml
-        //we will remove the service created by setupJaxwsService() later.
-        assertEquals("There should get one link for service", links.length, 2);
-        assertEquals(links[0].getURLString(), "http://localhost/services/Greeter?wsdl");       
+        assertEquals("There should get one link for service", links.length, 1);
+        assertEquals(links[0].getURLString(), "http://localhost/services/greeter?wsdl");       
         assertEquals("text/html", res.getContentType());
     }
     
     @Test
     public void testGetWSDL() throws Exception {
         ServletUnitClient client = newClient();
-        setupJaxwsService();
         client.setExceptionsThrownOnErrorStatus(true);
         
-        WebRequest req = new GetMethodQueryWebRequest("http://localhost/services/Greeter?wsdl");
+        WebRequest req = new GetMethodQueryWebRequest("http://localhost/services/greeter?wsdl");
         
         WebResponse res = client.getResponse(req); 
         assertEquals(200, res.getResponseCode());
@@ -136,16 +131,14 @@
     }
     
     @Test
-    @Ignore
     public void testGetImportedXSD() throws Exception {
         ServletUnitClient client = newClient();
         client.setExceptionsThrownOnErrorStatus(true);
 
-        WebRequest req = new GetMethodQueryWebRequest("http://localhost/services/test_import.xsd");
+        WebRequest req = new GetMethodQueryWebRequest("http://localhost/services/greeter/test_import.xsd");
         
         WebResponse res = client.getResponse(req); 
         assertEquals(200, res.getResponseCode());
-        System.out.println(res.getText());
         //assertEquals("text/xml", res.getContentType());
         assertTrue("the xsd should contain the completType SimpleStruct",
                    res.getText().contains("<complexType name=\"SimpleStruct\">"));