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
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
00130 VelocityContext vc = VContextFactory.getContext(getService());
00131
00132
00133 String filename = WSDD_PREFIX + (count++) + WSDD_SUFFIX;
00134 generatedServerConfig = new File(getSources(), filename);
00135 jvelocity.generate(generatedServerConfig, vc);
00136
00137
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
00148 getModifier().removeServletMapping(jax.getSibLink());
00149
00150 getModifier().removeServlet(jax.getSibLink());
00151
00152 getWsModifier().changeServletLink(sName, jax.getSibLink(), sName);
00153 }
00154 }
00155
00156
00157 getModifier().addServlet(sName, AXIS_SERVLET_CLASS);
00158 getModifier().addServletParam(sName, SERVER_CONFIG, filename);
00159
00160
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
00168
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
00180 requireDefaultMapping = true;
00181 }
00182 }
00183 if (requireDefaultMapping) {
00184
00185 String defaultEndpointURI = getService().getEndpointURI();
00186 if (defaultEndpointURI == null) {
00187
00188 getModifier().addServletMapping(sName, "/" + sName + "/*");
00189 } else {
00190
00191 getModifier().addServletMapping(sName, defaultEndpointURI);
00192 }
00193 }
00194
00195 }
00196
00204 public void addFiles(Archive archive) throws WsGenException {
00205
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 }