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
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
00073
00074
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
00086 URL wsdlUrl = serviceDesc.getLocalWSDLURL();
00087
00088
00089 log.debug("WSDL Url found is '" + wsdlUrl + "'");
00090 SymbolTable symbolTable = null;
00091 if (wsdlUrl != null) {
00092 Parser parser = new Parser();
00093 try {
00094
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
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 }