AxisWsEndpointGenerator.java

00001 
00026 package org.objectweb.jonas_ws.wsgen.generator.axis;
00027 
00028 import java.io.File;
00029 import java.util.Iterator;
00030 import java.util.List;
00031 import java.util.Vector;
00032 
00033 import org.apache.velocity.VelocityContext;
00034 
00035 import org.objectweb.jonas_lib.genbase.GenBaseException;
00036 import org.objectweb.jonas_lib.genbase.archive.Archive;
00037 import org.objectweb.jonas_lib.genbase.archive.WebApp;
00038 import org.objectweb.jonas_lib.genbase.generator.Config;
00039 
00040 import org.objectweb.jonas_ws.deployment.api.JaxRpcPortComponentDesc;
00041 import org.objectweb.jonas_ws.deployment.api.PortComponentDesc;
00042 import org.objectweb.jonas_ws.deployment.api.ServiceDesc;
00043 import org.objectweb.jonas_ws.wsgen.WsGenException;
00044 import org.objectweb.jonas_ws.wsgen.ddmodifier.WebServicesDDModifier;
00045 import org.objectweb.jonas_ws.wsgen.ddmodifier.WsEndpointDDModifier;
00046 import org.objectweb.jonas_ws.wsgen.generator.WsEndpointGenerator;
00047 
00048 import org.objectweb.jonas.common.Log;
00049 
00050 import org.objectweb.util.monolog.api.BasicLevel;
00051 import org.objectweb.util.monolog.api.Logger;
00052 
00058 public class AxisWsEndpointGenerator extends WsEndpointGenerator {
00059 
00063     private static JVelocity jvelocity = null;
00064 
00068     private static Logger logger = Log.getLogger(Log.JONAS_WSGEN_PREFIX);
00069 
00073     private static final String AXIS_SERVLET_CLASS = "org.objectweb.jonas.ws.axis.JAxisServlet";
00074 
00078     private static final String SERVER_CONFIG = "axis.serverConfigFile";
00079 
00083     private static final String WSDD_SUFFIX = ".wsdd";
00084 
00088     private static final String WSDD_PREFIX = "deploy-server-";
00089 
00093     private static int count = 0;
00094 
00098     private File generatedServerConfig;
00099 
00111     public AxisWsEndpointGenerator(Config config, ServiceDesc serviceDesc, WsEndpointDDModifier ddm,
00112             WebServicesDDModifier wsddm, Archive arch) throws GenBaseException, WsGenException {
00113         super(config, serviceDesc, ddm, wsddm, arch);
00114 
00115         // init velocity
00116         if (jvelocity == null) {
00117             jvelocity = new JVelocity("deploy_endpoint.vm");
00118         }
00119     }
00120 
00126     public void generate() throws WsGenException {
00127         String sName = getService().getName();
00128 
00129         // construct VelocityContext
00130         VelocityContext vc = VContextFactory.getContext(getService());
00131 
00132         // Generate file
00133         String filename = WSDD_PREFIX + (count++) + WSDD_SUFFIX;
00134         generatedServerConfig = new File(getSources(), filename);
00135         jvelocity.generate(generatedServerConfig, vc);
00136 
00137         // remove existing servlets
00138         for (Iterator i = getService().getPortComponents().iterator(); i.hasNext();) {
00139             Object obj = i.next();
00140             if (obj instanceof JaxRpcPortComponentDesc) {
00141                 JaxRpcPortComponentDesc jax = (JaxRpcPortComponentDesc) obj;
00142 
00143                 if (logger.isLoggable(BasicLevel.DEBUG)) {
00144                     logger.log(BasicLevel.DEBUG, "Removing servlet '" + jax.getSibLink() + "'");
00145                 }
00146 
00147                 // remove servlet mapping
00148                 getModifier().removeServletMapping(jax.getSibLink());
00149                 // remove old servlet
00150                 getModifier().removeServlet(jax.getSibLink());
00151                 // change sib-link
00152                 getWsModifier().changeServletLink(sName, jax.getSibLink(), sName);
00153             }
00154         }
00155 
00156         // and use our own
00157         getModifier().addServlet(sName, AXIS_SERVLET_CLASS);
00158         getModifier().addServletParam(sName, SERVER_CONFIG, filename);
00159 
00160         // setup servlet-mappings
00161         boolean requireDefaultMapping = false;
00162         List usedServletMappings = new Vector();
00163         for (Iterator i = getService().getPortComponents().iterator(); i.hasNext();) {
00164             PortComponentDesc pcd = (PortComponentDesc) i.next();
00165             String mapping = pcd.getMapping();
00166             if (mapping != null) {
00167                 // port has specified an endpoint URI
00168                 // use it for servlet-mapping
00169                 if (!usedServletMappings.contains(mapping)) {
00170                     usedServletMappings.add(mapping);
00171 
00172                     if (logger.isLoggable(BasicLevel.DEBUG)) {
00173                         logger.log(BasicLevel.DEBUG, "Adding servlet-mapping for '" + sName + "' -> '" + mapping + "'");
00174                     }
00175 
00176                     getModifier().addServletMapping(sName, mapping);
00177                 }
00178             } else {
00179                 // no specified endpoint uri for the port
00180                 requireDefaultMapping = true;
00181             }
00182         }
00183         if (requireDefaultMapping) {
00184             // try to set a default mapping
00185             String defaultEndpointURI = getService().getEndpointURI();
00186             if (defaultEndpointURI == null) {
00187                 // default behavior
00188                 getModifier().addServletMapping(sName, "/" + sName + "/*");
00189             } else {
00190                 // use retieved value
00191                 getModifier().addServletMapping(sName, defaultEndpointURI);
00192             }
00193         }
00194 
00195     }
00196 
00204     public void addFiles(Archive archive) throws WsGenException {
00205         // archive must be a WebApp
00206         if (!(archive instanceof WebApp)) {
00207             String err = getI18n().getMessage("AxisWsEndpointGenerator.addFiles.illegal", archive.getRootFile());
00208             throw new IllegalArgumentException(err);
00209         }
00210 
00211         WebApp web = (WebApp) archive;
00212         web.addFileIn("WEB-INF/", generatedServerConfig);
00213 
00214     }
00215 }

Generated on Tue Feb 15 15:06:00 2005 for JOnAS by  doxygen 1.3.9.1