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 2007/04/20 04:21:03 UTC

svn commit: r530612 - in /incubator/cxf/trunk: rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/ rt/core/src/main/java/org/apache/cxf/transport/http/ rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/ rt/transports/ht...

Author: dkulp
Date: Thu Apr 19 19:21:02 2007
New Revision: 530612

URL: http://svn.apache.org/viewvc?view=rev&rev=530612
Log:
More ?wsdl and ?xsd updates


Modified:
    incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/SoapTransportFactory.java
    incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/transport/http/WSDLQueryHandler.java
    incubator/cxf/trunk/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPDestination.java
    incubator/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/AbstractHTTPDestination.java
    incubator/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/AbstractHTTPTransportFactory.java
    incubator/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/ServletController.java
    incubator/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/ServletDestination.java
    incubator/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/ServletTransportFactory.java
    incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/servlet/spring.xml

Modified: incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/SoapTransportFactory.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/SoapTransportFactory.java?view=diff&rev=530612&r1=530611&r2=530612
==============================================================================
--- incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/SoapTransportFactory.java (original)
+++ incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/SoapTransportFactory.java Thu Apr 19 19:21:02 2007
@@ -185,10 +185,15 @@
             Object extensor = itr.next();
 
             if (SOAPBindingUtil.isSOAPAddress(extensor)) {
-                SoapAddress sa = SOAPBindingUtil.getSoapAddress(extensor);
+                final SoapAddress sa = SOAPBindingUtil.getSoapAddress(extensor);
 
                 SoapBindingInfo sbi = (SoapBindingInfo)b;
-                EndpointInfo info = new EndpointInfo(serviceInfo, sbi.getTransportURI());
+                EndpointInfo info = new EndpointInfo(serviceInfo, sbi.getTransportURI()) {
+                    public void setAddress(String s) {
+                        super.setAddress(s);
+                        sa.setLocationURI(s);
+                    }
+                };
                 info.setAddress(sa.getLocationURI());
                 return info;
             }

Modified: incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/transport/http/WSDLQueryHandler.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/transport/http/WSDLQueryHandler.java?view=diff&rev=530612&r1=530611&r2=530612
==============================================================================
--- incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/transport/http/WSDLQueryHandler.java (original)
+++ incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/transport/http/WSDLQueryHandler.java Thu Apr 19 19:21:02 2007
@@ -154,7 +154,7 @@
                 Element el = (Element)nl.item(x);
                 String sl = el.getAttribute("schemaLocation");
                 if (smp.containsKey(sl)) {
-                    el.setAttribute("schemaLocation", smp.get(sl).getSchemaLocationURI());
+                    el.setAttribute("schemaLocation", base + "?xsd=" + sl);
                 }
             }
             nl = doc.getDocumentElement()
@@ -164,7 +164,17 @@
                 Element el = (Element)nl.item(x);
                 String sl = el.getAttribute("schemaLocation");
                 if (smp.containsKey(sl)) {
-                    el.setAttribute("schemaLocation", smp.get(sl).getSchemaLocationURI());
+                    el.setAttribute("schemaLocation", base + "?xsd=" + sl);
+                }
+            }
+            nl = doc.getDocumentElement()
+                .getElementsByTagNameNS("http://schemas.xmlsoap.org/wsdl/",
+                                    "import");
+            for (int x = 0; x < nl.getLength(); x++) {
+                Element el = (Element)nl.item(x);
+                String sl = el.getAttribute("location");
+                if (mp.containsKey(sl)) {
+                    el.setAttribute("location", base + "?wsdl=" + sl);
                 }
             }
             
@@ -201,11 +211,6 @@
                     //check to see if it's aleady in a URL format.  If so, leave it.
                     new URL(start);
                 } catch (MalformedURLException e) {
-                    String uri = start;
-                    if (!uri.startsWith(base)) {
-                        uri = base + "?wsdl=" + uri;
-                    }
-                    imp.setLocationURI(uri);
                     done.put(start, imp.getDefinition());
                     updateDefinition(imp.getDefinition(), done, doneSchemas, base, ei);
                 }
@@ -241,12 +246,6 @@
                         //check to see if it's aleady in a URL format.  If so, leave it.
                         new URL(start);
                     } catch (MalformedURLException e) {
-                    
-                        String uri = start;
-                        if (!uri.startsWith(base)) {
-                            uri = base + "?xsd=" + uri;
-                        }
-                        imp.setSchemaLocationURI(uri);
                         doneSchemas.put(start, imp);
                         updateSchemaImports(imp.getReferencedSchema(), doneSchemas, base);
                     }
@@ -261,11 +260,6 @@
                     //check to see if it's aleady in a URL format.  If so, leave it.
                     new URL(start);
                 } catch (MalformedURLException e) {
-                    String uri = start;
-                    if (!uri.startsWith(base)) {
-                        uri = base + "?xsd=" + uri;
-                    }
-                    included.setSchemaLocationURI(uri);
                     doneSchemas.put(start, included);
                     updateSchemaImports(included.getReferencedSchema(), doneSchemas, base);
                 }

Modified: incubator/cxf/trunk/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPDestination.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPDestination.java?view=diff&rev=530612&r1=530611&r2=530612
==============================================================================
--- incubator/cxf/trunk/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPDestination.java (original)
+++ incubator/cxf/trunk/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPDestination.java Thu Apr 19 19:21:02 2007
@@ -48,6 +48,7 @@
     protected ServerEngine engine;
     protected ServerEngine alternateEngine;
     protected JettyHTTPTransportFactory transportFactory;
+    protected URL nurl;
     
     /**
      * Constructor, using Jetty server engine.
@@ -60,7 +61,6 @@
     public JettyHTTPDestination(Bus b, JettyHTTPTransportFactory ci, 
                                 EndpointInfo endpointInfo) throws IOException {
         this(b, ci, endpointInfo, null);
-        this.transportFactory = ci;
     }
 
     /**
@@ -79,6 +79,7 @@
         super(b, ci, endpointInfo, true);
         alternateEngine = eng;
         this.transportFactory = ci;
+        nurl = new URL(endpointInfo.getAddress());
     }
 
     protected Logger getLogger() {

Modified: incubator/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/AbstractHTTPDestination.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/AbstractHTTPDestination.java?view=diff&rev=530612&r1=530611&r2=530612
==============================================================================
--- incubator/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/AbstractHTTPDestination.java (original)
+++ incubator/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/AbstractHTTPDestination.java Thu Apr 19 19:21:02 2007
@@ -22,7 +22,6 @@
 import java.io.IOException;
 import java.io.OutputStream;
 import java.net.HttpURLConnection;
-import java.net.URL;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Enumeration;
@@ -75,8 +74,6 @@
 
     protected final Bus bus;
     protected final ConduitInitiator conduitInitiator;
-    protected String name;
-    protected URL nurl;
 
     // Configuration values
     protected HTTPServerPolicy server;
@@ -104,9 +101,6 @@
         conduitInitiator = ci;
         
         initConfig();
- 
-        nurl = new URL(ei.getAddress());
-        name = nurl.getPath();
     }
     
     

Modified: incubator/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/AbstractHTTPTransportFactory.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/AbstractHTTPTransportFactory.java?view=diff&rev=530612&r1=530611&r2=530612
==============================================================================
--- incubator/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/AbstractHTTPTransportFactory.java (original)
+++ incubator/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/AbstractHTTPTransportFactory.java Thu Apr 19 19:21:02 2007
@@ -180,19 +180,29 @@
             Object extensor = itr.next();
 
             if (extensor instanceof HTTPAddress) {
-                HTTPAddress httpAdd = (HTTPAddress)extensor;
+                final HTTPAddress httpAdd = (HTTPAddress)extensor;
 
                 EndpointInfo info = 
                     new EndpointInfo(serviceInfo, 
-                            "http://schemas.xmlsoap.org/wsdl/http/");
+                            "http://schemas.xmlsoap.org/wsdl/http/") {
+                        public void setAddress(String a) {
+                            super.setAddress(a);
+                            httpAdd.setLocationURI(a);
+                        }
+                    };
                 info.setAddress(httpAdd.getLocationURI());
                 return info;
             } else if (extensor instanceof AddressType) {
-                AddressType httpAdd = (AddressType)extensor;
+                final AddressType httpAdd = (AddressType)extensor;
 
                 EndpointInfo info = 
                     new EndpointInfo(serviceInfo, 
-                            "http://schemas.xmlsoap.org/wsdl/http/");
+                            "http://schemas.xmlsoap.org/wsdl/http/") {
+                        public void setAddress(String a) {
+                            super.setAddress(a);
+                            httpAdd.setLocation(a);
+                        }
+                    };
                 info.setAddress(httpAdd.getLocation());
                 return info;
             }

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=530612&r1=530611&r2=530612
==============================================================================
--- 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 Thu Apr 19 19:21:02 2007
@@ -22,6 +22,7 @@
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.util.Collection;
+import java.util.Set;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
@@ -45,52 +46,75 @@
 
     private ServletTransportFactory transport;
     private CXFServlet cxfServlet;
+    private String lastBase = "";
  
     public ServletController(ServletTransportFactory df, CXFServlet servlet) {
         this.transport = df;
         this.cxfServlet = servlet;
     }
+    
+    private synchronized void updateDests(HttpServletRequest request) {
+        String pathInfo = request.getPathInfo() == null ? "" : request.getPathInfo();
+        String base = request.getRequestURL().toString();
+        base = base.substring(0, base.length() - pathInfo.length());
+        
+        if (base.equals(lastBase)) {
+            return;
+        }
+        Set<String> paths = transport.getDestinationsPaths();
+        for (String path : paths) {
+            ServletDestination d2 = transport.getDestinationForPath(path);
+            String ad = d2.getEndpointInfo().getAddress();
+            if (ad.equals(path)
+                || ad.equals(lastBase + path)) {
+                d2.getEndpointInfo().setAddress(base + path);
+            }
+        }
+        lastBase = base;
+    }
 
     public void invoke(HttpServletRequest request, HttpServletResponse res) throws ServletException {
         try {
             EndpointInfo ei = new EndpointInfo();
-            String address = "http://localhost" 
-                + (request.getPathInfo() == null ? "" : request.getPathInfo());
+            String address = request.getPathInfo() == null ? "" : request.getPathInfo();
 
             ei.setAddress(address);
             ServletDestination d = (ServletDestination)transport.getDestination(ei);
 
             if (d.getMessageObserver() == null) {
+                updateDests(request);
                 if (request.getRequestURI().endsWith("services")
                     || request.getRequestURI().endsWith("services/")
-                    || StringUtils.isEmpty(request.getPathInfo())) {
+                    || StringUtils.isEmpty(request.getPathInfo())
+                    || "/".equals(request.getPathInfo())) {
                     generateServiceList(request, res);
                 } else {
-                    LOG.warning("Can't find the the request for " + request.getRequestURI() + "'s Observer ");
+                    LOG.warning("Can't find the the request for " + request.getRequestURL() + "'s Observer ");
                     generateNotFound(request, res);
                 }
             } else {
+                updateDests(request);
                 ei = d.getEndpointInfo();
                 Bus bus = cxfServlet.getBus();
-                if (bus.getExtension(QueryHandlerRegistry.class) != null) { 
+                if (null != request.getQueryString() 
+                    && request.getQueryString().length() > 0
+                    && bus.getExtension(QueryHandlerRegistry.class) != null) {
+                    
+                    String ctxUri = request.getPathInfo();
+                    String baseUri = request.getRequestURL().toString() 
+                        + "?" + request.getQueryString();
+
                     for (QueryHandler qh : bus.getExtension(QueryHandlerRegistry.class).getHandlers()) {
-                        if (null != request.getQueryString() && request.getQueryString().length() > 0) {
-                            String ctxUri = request.getPathInfo();
-                            String baseUri = request.getRequestURL().toString() 
-                                + "?" + request.getQueryString();
+                        if (qh.isRecognizedQuery(baseUri, ctxUri, ei)) {
                             
-                            if (qh.isRecognizedQuery(baseUri, ctxUri, ei)) {
-                                
-                                res.setContentType(qh.getResponseContentType(baseUri, ctxUri));
-                                OutputStream out = res.getOutputStream();
-                                try {
-                                    qh.writeResponse(baseUri, ctxUri, ei, out);
-                                    out.flush();
-                                    return;
-                                } catch (Exception e) {
-                                    throw new ServletException(e);
-                                }
-                                
+                            res.setContentType(qh.getResponseContentType(baseUri, ctxUri));
+                            OutputStream out = res.getOutputStream();
+                            try {
+                                qh.writeResponse(baseUri, ctxUri, ei, out);
+                                out.flush();
+                                return;
+                            } catch (Exception e) {
+                                throw new ServletException(e);
                             }
                         }   
                     }
@@ -109,20 +133,14 @@
         response.setContentType("text/html");        
         response.getWriter().write("<html><body>");
         
-        String reqPerfix = request.getScheme() + "://" + request.getServerName();
-        if (request.getServerPort() != 80 && request.getServerPort() != 0) {
-            reqPerfix += ":" + request.getServerPort();
-        }
-        reqPerfix += request.getContextPath() + request.getServletPath() + "/";
+        String reqPerfix = request.getRequestURL().toString();
+        String pathInfo = request.getPathInfo() == null ? "" : request.getPathInfo();
+        reqPerfix = reqPerfix.substring(0, reqPerfix.length() - pathInfo.length());
         
         if (destinations.size() > 0) {  
             for (ServletDestination sd : destinations) {
                 if (null != sd.getEndpointInfo().getName()) {
-                    String address = sd.getAddress().getAddress().getValue();
-                    
-                    address = reqPerfix
-                        + address.substring("http://localhost/".length());
-                    
+                    String address = sd.getEndpointInfo().getAddress();
                     response.getWriter().write("<p> <a href=\"" + address + "?wsdl\">");
                     response.getWriter().write(sd.getEndpointInfo().getName() + "</a> </p>");
                 }    

Modified: incubator/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/ServletDestination.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/ServletDestination.java?view=diff&rev=530612&r1=530611&r2=530612
==============================================================================
--- incubator/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/ServletDestination.java (original)
+++ incubator/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/ServletDestination.java Thu Apr 19 19:21:02 2007
@@ -40,8 +40,6 @@
         
     private static final long serialVersionUID = 1L;        
     
-    protected String name;
-    
     
     /**
      * Constructor, allowing subsititution of configuration.
@@ -57,21 +55,9 @@
                               EndpointInfo ei)
         throws IOException {
         // would add the default port to the address
-        super(b, ci, updateEndpointAddress(ei), false);
+        super(b, ci, ei, false);
     }
     
-    private static EndpointInfo updateEndpointAddress(EndpointInfo ei) {
-        String ad = ei.getAddress();
-        if (ad != null && ad.indexOf("://") == -1) {
-            if (ad.startsWith("/")) {
-                ad = "http://localhost" + ad;
-            } else {
-                ad = "http://localhost/" + ad;
-            }
-            ei.setAddress(ad);
-        }
-        return ei;
-    }
     
     protected Logger getLogger() {
         return LOG;

Modified: incubator/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/ServletTransportFactory.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/ServletTransportFactory.java?view=diff&rev=530612&r1=530611&r2=530612
==============================================================================
--- incubator/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/ServletTransportFactory.java (original)
+++ incubator/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/ServletTransportFactory.java Thu Apr 19 19:21:02 2007
@@ -38,7 +38,7 @@
 public class ServletTransportFactory extends AbstractTransportFactory
     implements DestinationFactory {
 
-    private Bus bus;    
+    private Bus bus;
     private Map<String, ServletDestination> destinations = 
         new ConcurrentHashMap<String, ServletDestination>();
     
@@ -48,7 +48,7 @@
 
     public ServletTransportFactory() {
     }
-    
+
     public Bus getBus() {
         return bus;
     }
@@ -60,14 +60,16 @@
     
     public Destination getDestination(EndpointInfo endpointInfo)
         throws IOException {
-        //String origAddress = endpointInfo.getAddress();
         ServletDestination d = destinations.get(endpointInfo.getAddress());
         if (d == null) { 
             d = new ServletDestination(bus, null, endpointInfo);
-            //destinations.put(origAddress, d);
             destinations.put(endpointInfo.getAddress(), d);
         }
         return d;
+    }
+    
+    public ServletDestination getDestinationForPath(String path) {
+        return destinations.get(path);
     }
     
     public Collection<ServletDestination> getDestinations() {

Modified: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/servlet/spring.xml
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/servlet/spring.xml?view=diff&rev=530612&r1=530611&r2=530612
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/servlet/spring.xml (original)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/servlet/spring.xml Thu Apr 19 19:21:02 2007
@@ -34,19 +34,19 @@
     <property name="serviceBean">
       <bean class="org.apache.hello_world_soap_http.GreeterImpl"/>
     </property>
-    <property name="address" value="http://localhost/services/Greeter"/>
+    <property name="address" value="/services/Greeter"/>
     <property name="bus" ref="cxf"/>
   </bean>
   
    <jaxws:endpoint id="endpoint1" 
               implementor="org.apache.hello_world_soap_http.GreeterImpl"
-              address="http://localhost/services/Greeter1"
+              address="/services/Greeter1"
               wsdlLocation="/wsdl/hello_world.wsdl"
               />
    
     <jaxws:endpoint id="endpoint2" 
               implementor="org.apache.hello_world_soap_http.GreeterImpl"
-              address="http://localhost/services/Greeter2"
+              address="/services/Greeter2"
               />     
   
 </beans>