JAxisServlet.java

00001 
00025 package org.objectweb.jonas.ws.axis;
00026 
00027 import java.io.IOException;
00028 import java.net.URL;
00029 
00030 import javax.naming.InitialContext;
00031 import javax.naming.NamingException;
00032 import javax.servlet.ServletContext;
00033 import javax.servlet.ServletException;
00034 import javax.servlet.http.HttpServletRequest;
00035 import javax.servlet.http.HttpServletResponse;
00036 
00037 import org.apache.axis.AxisFault;
00038 import org.apache.axis.server.AxisServer;
00039 import org.apache.axis.transport.http.AxisServlet;
00040 import org.apache.axis.wsdl.gen.Parser;
00041 import org.apache.axis.wsdl.symbolTable.SymbolTable;
00042 
00043 import org.objectweb.jonas_ws.deployment.api.ServiceDesc;
00044 
00050 public class JAxisServlet extends AxisServlet {
00051 
00060     public void doPost(HttpServletRequest req, HttpServletResponse res) throws
00061     ServletException, IOException {
00062 
00063         // try to see if we already have the parsed WSDL
00064         ServletContext servletContext = getServletContext();
00065         Object o = servletContext.getAttribute(getEngine().getName() + "_symbol.table");
00066         if (o != null) {
00067             super.doPost(req, res);
00068             return;
00069         }
00070 
00071 
00072         // else, need to parse WSDL
00073 
00074         // Before calling  super method, add the WSDL in ServletContext
00075         InitialContext iCtx;
00076         AxisServer axisServer = getEngine();
00077         ServiceDesc serviceDesc = null;
00078         try {
00079             iCtx = new InitialContext();
00080             serviceDesc = (ServiceDesc) iCtx.lookup("java:comp/jonas/" + axisServer.getName() + "/dd");
00081         } catch (NamingException e) {
00082             throw new AxisFault("Servlet name not found : " + axisServer.getName(), e);
00083         }
00084 
00085         // Get WSDL
00086         URL wsdlUrl = serviceDesc.getLocalWSDLURL();
00087 
00088         // Then parse it
00089         log.debug("WSDL Url found is '" + wsdlUrl + "'");
00090         SymbolTable symbolTable = null;
00091         if (wsdlUrl != null) {
00092             Parser parser = new Parser();
00093             try {
00094                 //parser.setNowrap(true);
00095                 parser.run(wsdlUrl.toExternalForm());
00096             } catch (Exception e) {
00097                 log.warn("Cannot get parser on Wsdl file '" + wsdlUrl + "'.");
00098             }
00099             if (parser != null) {
00100                 symbolTable = parser.getSymbolTable();
00101             }
00102         }
00103 
00104 
00105         // Get servlet context
00106         if (symbolTable != null) {
00107             if (servletContext != null) {
00108                 servletContext.setAttribute(getEngine().getName() + "_symbol.table", symbolTable);
00109             }
00110         }
00111 
00112 
00113         super.doPost(req, res);
00114     }
00115 
00116 }

Generated on Tue Feb 15 15:05:35 2005 for JOnAS by  doxygen 1.3.9.1