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 32 import org.w3c.dom.Document ; 33 import org.w3c.dom.Element ; 34 35 import org.apache.axis.constants.Scope; 36 import org.apache.axis.wsdl.toJava.GeneratedFileInfo; 37 import org.apache.geronimo.ews.ws4j2ee.context.webservices.client.ServiceReferanceImpl; 38 import org.apache.geronimo.ews.ws4j2ee.context.webservices.client.interfaces.ServiceReferanceContext; 39 40 import org.objectweb.jonas_lib.I18n; 41 import org.objectweb.jonas_lib.deployment.api.HandlerDesc; 42 import org.objectweb.jonas_lib.genbase.GenBaseException; 43 import org.objectweb.jonas_lib.genbase.archive.Archive; 44 import org.objectweb.jonas_lib.genbase.archive.EjbJar; 45 import org.objectweb.jonas_lib.genbase.archive.J2EEArchive; 46 import org.objectweb.jonas_lib.genbase.archive.WebApp; 47 import org.objectweb.jonas_lib.genbase.generator.Config; 48 import org.objectweb.jonas_lib.genbase.utils.XMLUtils; 49 import org.objectweb.jonas_lib.loader.AbsModuleClassLoader; 50 51 import org.objectweb.jonas_ws.deployment.api.ServiceRefDesc; 52 import org.objectweb.jonas_ws.wsgen.WsGenException; 53 import org.objectweb.jonas_ws.wsgen.ddmodifier.WsClientDDModifier; 54 import org.objectweb.jonas_ws.wsgen.generator.WsClientGenerator; 55 import org.objectweb.jonas_ws.wsgen.generator.ews.wsdltoj2ee.JOnASJ2EEWebServicesContext; 56 import org.objectweb.jonas_ws.wsgen.generator.ews.wsdltoj2ee.emitter.FullEmitter; 57 import org.objectweb.jonas_ws.wsgen.generator.ews.wsdltoj2ee.factory.JOnASClientGeneratorFactory; 58 import org.objectweb.jonas_ws.wsgen.generator.ews.wsdltoj2ee.wscf.JOnASWSCFHandler; 59 60 import org.objectweb.jonas.common.Log; 61 62 import org.objectweb.util.monolog.api.BasicLevel; 63 import org.objectweb.util.monolog.api.Logger; 64 65 71 public class EWSWsClientGenerator extends WsClientGenerator { 72 73 76 private static Logger logger = Log.getLogger(Log.JONAS_WSGEN_EWS_PREFIX); 77 78 81 private static final String CLIENT_CONFIG = "axis.clientConfigFile"; 82 83 84 private File generated = null; 85 86 89 private static final String WEB_PREFIX = "WEB-INF/"; 90 91 94 private static I18n i18n = I18n.getInstance(EWSWsClientGenerator.class); 95 96 105 public EWSWsClientGenerator(Config config, ServiceRefDesc srd, WsClientDDModifier ddm, Archive archive) 106 throws GenBaseException, WsGenException { 107 super(config, srd, ddm, archive); 108 } 109 110 114 public void generate() throws WsGenException { 115 116 125 boolean hasWSDL = getRef().getWsdlFileName() != null; 126 127 if (hasWSDL) { 128 J2EEArchive j2eeArchive = (J2EEArchive) getArchive(); 130 AbsModuleClassLoader cl = (AbsModuleClassLoader) j2eeArchive.getModuleClassloader(); 131 getConfig().setClasspath(getConfig().getClasspath() + cl.getClasspath()); 132 133 try { 134 FullEmitter wsEmitter = new FullEmitter(); 136 wsEmitter.setMappingFileInputStream(getRef().getMappingFileURL().openStream()); 137 JOnASClientGeneratorFactory factory = new JOnASClientGeneratorFactory(); 138 factory.setEmitter(wsEmitter); 139 140 wsEmitter.setTypeMappingVersion("1.3"); 141 wsEmitter.setScope(Scope.REQUEST); 142 wsEmitter.setWrapArrays(true); 143 144 wsEmitter.setClassLoader(cl); 147 148 wsEmitter.setFactory(factory); 149 151 wsEmitter.setJOnASWsContext(prepareJ2EEWebServicesContext(getRef())); 152 153 wsEmitter.setOutputDir(this.getSources().getCanonicalPath()); 154 wsEmitter.setAllowInvalidURL(true); 155 156 wsEmitter.run(getRef().getLocalWSDLURL().toExternalForm()); 157 158 generated = new File (findClientConfigFile(wsEmitter.getGeneratedFileInfo())); 159 160 getLogger().log(BasicLevel.INFO, "Web Services Classes successfully generated by EWS."); 161 getLogger().log(BasicLevel.INFO, 162 "Webservice client WSDD file '" + generated + "' sucessfully generated by EWS."); 163 } catch (Exception e) { 164 String err = getI18n().getMessage("EWSWsClientGenerator.generate.WSDL2Java", e.getMessage()); 165 logger.log(BasicLevel.ERROR, err, e); 166 throw new WsGenException(err, e); 167 } 168 169 } 170 171 } 172 173 177 private static String findClientConfigFile(GeneratedFileInfo generatedFileInfo) { 178 List generated = generatedFileInfo.getFileNames(); 179 boolean found = false; 180 String filename = null; 181 for (Iterator i = generated.iterator(); i.hasNext() && !found;) { 182 String entry = (String ) i.next(); 183 if (entry.matches(".*deploy-client-\\d+\\.wsdd$")) { 185 found = true; 186 filename = entry; 187 } 188 } 189 return filename; 190 } 191 192 196 private JOnASJ2EEWebServicesContext prepareJ2EEWebServicesContext(ServiceRefDesc ref) { 197 198 JOnASJ2EEWebServicesContext wsCtx = new JOnASJ2EEWebServicesContext(); 199 ServiceReferanceContext sRefCtx = new ServiceReferanceImpl(); 200 sRefCtx.setServcieQName(ref.getServiceQName()); 201 202 for (Iterator i = ref.getHandlerRefs().iterator(); i.hasNext();) { 203 HandlerDesc handler = (HandlerDesc) i.next(); 204 sRefCtx.addHandler(new JOnASWSCFHandler(handler)); 205 } 206 wsCtx.addServiceReferanceContext(sRefCtx); 207 return wsCtx; 208 } 209 210 215 public void addFiles(Archive archive) throws WsGenException { 216 if (archive instanceof WebApp) { 217 archive.addDirectoryIn("WEB-INF/classes/", getClasses()); 218 archive.addDirectoryIn("WEB-INF/sources/", getSources()); 219 220 if (generated != null) { 221 archive.addFileIn("WEB-INF/", generated); 222 223 if (!getModifier().hasJonasServiceRef()) { 225 if (!getArchive().getContainedFiles().contains("WEB-INF/jonas-web.xml")) { 226 createEmptyJonasWeb((J2EEArchive) archive); 228 } 229 Element jsr = getModifier().createJonasServiceRef(getRef().getServiceRefName()); 230 getModifier().setElement(jsr); 232 233 } 234 235 getModifier().addJonasInitParam(CLIENT_CONFIG, WEB_PREFIX + generated.getName()); 237 } 238 } else if (archive instanceof EjbJar) { 239 archive.addDirectory(getClasses()); 240 241 if (generated != null) { 242 archive.addFileIn("META-INF/", generated); 243 244 if (!getModifier().hasJonasServiceRef()) { 246 Element jsr = getModifier().createJonasServiceRef(getRef().getServiceRefName()); 247 getModifier().setElement(jsr); 249 } 250 251 getModifier().addJonasInitParam(CLIENT_CONFIG, "META-INF/" + generated.getName()); 253 } 254 } else { 255 archive.addDirectory(getClasses()); 256 257 if (generated != null) { 258 archive.addFileIn("META-INF/", generated); 259 260 if (!getModifier().hasJonasServiceRef()) { 262 if (!getArchive().getContainedFiles().contains("META-INF/jonas-client.xml")) { 263 createEmptyJonasClient((J2EEArchive) archive); 265 } 266 Element jsr = getModifier().createJonasServiceRef(getRef().getServiceRefName()); 267 getModifier().setElement(jsr); 269 270 } 271 272 getModifier().addJonasInitParam(CLIENT_CONFIG, "META-INF/" + generated.getName()); 274 } 275 } 276 } 277 278 282 private void createEmptyJonasWeb(J2EEArchive archive) { 283 Document doc = XMLUtils.newJonasWeb(); 284 archive.getDescriptors().put("WEB-INF/jonas-web.xml", doc); 285 getModifier().setDocument(doc); 286 } 287 288 292 private void createEmptyJonasClient(J2EEArchive archive) { 293 Document doc = XMLUtils.newJonasClient(); 294 archive.getDescriptors().put("META-INF/jonas-client.xml", doc); 295 getModifier().setDocument(doc); 296 } 297 298 301 public static I18n getI18n() { 302 return i18n; 303 } 304 } | Popular Tags |