1 25 26 package org.objectweb.jonas_ws.wsgen.generator.ews; 27 28 import java.io.File ; 29 import java.util.Iterator ; 30 import java.util.List ; 31 import org.w3c.dom.NodeList ; 32 import org.apache.axis.constants.Scope; 33 import org.apache.axis.wsdl.toJava.GeneratedFileInfo; 34 import org.apache.geronimo.ews.jaxrpcmapping.J2eeGeneratorFactory; 35 import org.apache.geronimo.ews.ws4j2ee.context.J2EEWebServiceContext; 36 import org.objectweb.jonas_lib.I18n; 37 import org.objectweb.jonas_lib.genbase.GenBaseException; 38 import org.objectweb.jonas_lib.genbase.archive.Archive; 39 import org.objectweb.jonas_lib.genbase.archive.J2EEArchive; 40 import org.objectweb.jonas_lib.genbase.archive.WebApp; 41 import org.objectweb.jonas_lib.genbase.generator.Config; 42 import org.objectweb.jonas_lib.loader.AbsModuleClassLoader; 43 import org.objectweb.jonas_ws.deployment.api.JaxRpcPortComponentDesc; 44 import org.objectweb.jonas_ws.deployment.api.PortComponentDesc; 45 import org.objectweb.jonas_ws.deployment.api.ServiceDesc; 46 import org.objectweb.jonas_ws.wsgen.WsGenException; 47 import org.objectweb.jonas_ws.wsgen.ddmodifier.WebServicesDDModifier; 48 import org.objectweb.jonas_ws.wsgen.ddmodifier.WsEndpointDDModifier; 49 import org.objectweb.jonas_ws.wsgen.generator.WsEndpointGenerator; 50 import org.objectweb.jonas_ws.wsgen.generator.ews.wsdltoj2ee.JOnASJ2EEWebServicesContext; 51 import org.objectweb.jonas_ws.wsgen.generator.ews.wsdltoj2ee.emitter.FullEmitter; 52 import org.objectweb.jonas_ws.wsgen.generator.ews.wsdltoj2ee.factory.JOnASEndpointGeneratorFactory; 53 import org.objectweb.jonas.common.Log; 54 import org.objectweb.util.monolog.api.BasicLevel; 55 import org.objectweb.util.monolog.api.Logger; 56 57 61 public class EWSWsEndpointGenerator extends WsEndpointGenerator { 62 63 66 private static Logger logger = Log.getLogger(Log.JONAS_WSGEN_EWS_PREFIX); 67 68 71 private static final String AXIS_SERVLET_CLASS = "org.objectweb.jonas.ws.axis.JAxisServlet"; 72 73 76 private static final String SERVER_CONFIG = "axis.serverConfigFile"; 77 78 81 private File generatedServerConfig; 82 83 86 private static I18n i18n = I18n.getInstance(EWSWsClientGenerator.class); 87 88 98 public EWSWsEndpointGenerator(Config config, ServiceDesc serviceDesc, WsEndpointDDModifier ddm, 99 WebServicesDDModifier wsddm, Archive arch) throws GenBaseException, WsGenException { 100 super(config, serviceDesc, ddm, wsddm, arch); 101 } 102 103 107 public void generate() throws WsGenException { 108 109 String filename = null; 111 try { 112 FullEmitter emitter = new FullEmitter(); 113 114 emitter.setWscontext(prepareJ2EEWebServicesContext(getService())); 115 emitter.setMappingFileInputStream(getService().getMappingFileURL().openStream()); 116 emitter.setOutputDir(this.getSources().getCanonicalPath()); 117 J2eeGeneratorFactory factory = new JOnASEndpointGeneratorFactory(); 118 factory.setEmitter(emitter); 119 emitter.setFactory(factory); 120 emitter.setTypeMappingVersion("1.3"); 121 emitter.setScope(Scope.REQUEST); 122 emitter.setWrapArrays(true); 123 124 emitter.setServerSide(true); 125 emitter.run(getService().getLocalWSDLURL().toExternalForm()); 126 127 generatedServerConfig = new File (findServerConfigFile(emitter.getGeneratedFileInfo())); 128 filename = generatedServerConfig.getName(); 129 getLogger().log(BasicLevel.INFO, 130 "Webservice endpoint WSDD file '" + filename + "' sucessfully generated by EWS."); 131 } catch (Exception e) { 132 String err = i18n.getMessage("EWSWsEndpointGenerator.generate.WSDL2Java", getService().getName(), e 133 .getMessage()); 134 logger.log(BasicLevel.ERROR, err, e); 135 throw new WsGenException(err, e); 136 } 137 138 J2EEArchive j2eeArchive = (J2EEArchive) getArchive(); 140 AbsModuleClassLoader cl = (AbsModuleClassLoader) j2eeArchive.getModuleClassloader(); 141 getConfig().setClasspath(getConfig().getClasspath() + cl.getClasspath()); 142 143 for (Iterator i = getService().getPortComponents().iterator(); i.hasNext();) { 147 PortComponentDesc desc = (PortComponentDesc) i.next(); 148 149 String urlPatternOld = null; 150 NodeList securityRoleRefs = null; 151 152 if (desc.hasJaxRpcImpl()) { 154 JaxRpcPortComponentDesc jax = (JaxRpcPortComponentDesc) desc; 155 156 if (logger.isLoggable(BasicLevel.DEBUG)) { 157 logger.log(BasicLevel.DEBUG, "Removing servlet '" + jax.getSibLink() + "'"); 158 } 159 160 urlPatternOld = getModifier().removeServletMapping(jax.getSibLink()); 162 163 securityRoleRefs = getModifier().removeServletWithSecurity(jax.getSibLink()); 166 } 167 168 getModifier().addServlet(desc.getSibLink(), AXIS_SERVLET_CLASS); 172 getModifier().addServletParam(desc.getSibLink(), SERVER_CONFIG, filename); 173 getModifier().addServletParam(desc.getSibLink(), "axis.development.system", "true"); 174 175 String mapping = "/" + desc.getName() + "/*"; 176 getModifier().addServletMapping(desc.getSibLink(), mapping); 177 178 if (desc.hasJaxRpcImpl()) { 179 if (securityRoleRefs != null) { 184 getModifier().addServletSecurityRoleRefs(desc.getSibLink(), securityRoleRefs); 185 } 186 getModifier().updateSecurityConstraint(urlPatternOld, mapping); 188 } 189 } 190 } 191 192 196 private static String findServerConfigFile(GeneratedFileInfo generatedFileInfo) { 197 List generated = generatedFileInfo.getFileNames(); 198 boolean found = false; 199 String filename = null; 200 for (Iterator i = generated.iterator(); i.hasNext() && !found;) { 201 String entry = (String ) i.next(); 202 if (entry.matches(".*deploy-server-\\d+\\.wsdd$")) { 204 found = true; 205 filename = entry; 206 } 207 } 208 return filename; 209 } 210 211 215 private J2EEWebServiceContext prepareJ2EEWebServicesContext(ServiceDesc service) { 216 JOnASJ2EEWebServicesContext ctx = new JOnASJ2EEWebServicesContext(); 217 ctx.setServiceDesc(service); 218 return ctx; 219 } 220 221 226 public void addFiles(Archive archive) throws WsGenException { 227 if (!(archive instanceof WebApp)) { 229 String err = getI18n().getMessage("AxisWsEndpointGenerator.addFiles.illegal", archive.getRootFile()); 230 throw new IllegalArgumentException (err); 231 } 232 233 WebApp web = (WebApp) archive; 234 web.addFileIn("WEB-INF/", generatedServerConfig); 235 236 web.addDirectoryIn("WEB-INF/classes/", getClasses()); 237 web.addDirectoryIn("WEB-INF/sources/", getSources()); 238 } 239 } | Popular Tags |