You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by ff...@apache.org on 2006/11/22 10:13:04 UTC

svn commit: r478094 - in /incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/servlet: CXFServlet.java ServletController.java

Author: ffang
Date: Wed Nov 22 01:13:02 2006
New Revision: 478094

URL: http://svn.apache.org/viewvc?view=rev&rev=478094
Log:
[CXF-264] servlet should publish xsd file
                        

Modified:
    incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/servlet/CXFServlet.java
    incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/servlet/ServletController.java

Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/servlet/CXFServlet.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/servlet/CXFServlet.java?view=diff&rev=478094&r1=478093&r2=478094
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/servlet/CXFServlet.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/servlet/CXFServlet.java Wed Nov 22 01:13:02 2006
@@ -68,7 +68,7 @@
     private ServletController controller;
 
     public ServletController createServletController() {
-        return new ServletController(servletTransportFactory);
+        return new ServletController(servletTransportFactory, this.getServletContext());
     }
 
     public ServletController getController() {

Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/servlet/ServletController.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/servlet/ServletController.java?view=diff&rev=478094&r1=478093&r2=478094
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/servlet/ServletController.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/servlet/ServletController.java Wed Nov 22 01:13:02 2006
@@ -25,6 +25,7 @@
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
+import javax.servlet.ServletContext;
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
@@ -34,6 +35,11 @@
 import javax.wsdl.extensions.ExtensibilityElement;
 import javax.wsdl.factory.WSDLFactory;
 import javax.wsdl.xml.WSDLWriter;
+import javax.xml.transform.Result;
+import javax.xml.transform.Source;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.stream.StreamResult;
+import javax.xml.transform.stream.StreamSource;
 
 import org.apache.cxf.message.Message;
 import org.apache.cxf.message.MessageImpl;
@@ -51,17 +57,25 @@
     private static final Logger LOG = Logger.getLogger(ServletController.class.getName());
 
     private ServletTransportFactory transport;
+    private ServletContext servletContext;
 
-    public ServletController(ServletTransportFactory df) {
+    public ServletController(ServletTransportFactory df, ServletContext servCont) {
         this.transport = df;
+        this.servletContext = servCont;   
     }
 
     public void invoke(HttpServletRequest request, HttpServletResponse res) throws ServletException {
         boolean wsdl = false;
+        boolean xsd = false;
         if (request.getQueryString() != null && request.getQueryString().trim().equalsIgnoreCase("wsdl")) {
             wsdl = true;
         }
-
+        String xsdName = request.getRequestURI().substring(
+            request.getRequestURI().lastIndexOf("/") + 1); 
+        if (xsdName != null 
+                && xsdName.substring(xsdName.lastIndexOf(".") + 1).equalsIgnoreCase("xsd")) {
+            xsd = true;
+        }
         try {
             EndpointInfo ei = new EndpointInfo();
             ei.setAddress("http://localhost" + request.getServletPath() + request.getPathInfo());
@@ -69,16 +83,35 @@
             ServletDestination d = (ServletDestination)transport.getDestination(ei);
 
             if (d.getMessageObserver() == null) {
-                LOG.warning("Can't find the the request for" 
+                if (xsd) {
+                    generateXSD(request, res, xsdName);
+                } else { 
+                    LOG.warning("Can't find the the request for" 
                          + "http://localhost" + request.getServletPath() 
                          + request.getPathInfo() + " 's Observer ");
-                generateNotFound(request, res);
+                    generateNotFound(request, res);
+                }
             } else if (wsdl) {
                 generateWSDL(request, res, d);
             } else {
                 invokeDestination(request, res, d);
             }
         } catch (IOException e) {
+            throw new ServletException(e);
+        }
+    }
+
+    private void generateXSD(HttpServletRequest request, HttpServletResponse response, String xsdName) 
+        throws ServletException {
+        response.setHeader("Content-Type", "text/xml");
+        try {
+            OutputStream os = response.getOutputStream();
+                 
+            Source source = new StreamSource(servletContext.getResourceAsStream("/WEB-INF/wsdl/" + xsdName));
+            Result result = new StreamResult(os);
+            TransformerFactory.newInstance().newTransformer().transform(source, result);
+            response.getOutputStream().flush();
+        } catch (Exception e) {
             throw new ServletException(e);
         }
     }