You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@cxf.apache.org by Colm O hEigeartaigh <co...@apache.org> on 2013/03/05 12:08:17 UTC
Re: svn commit: r1452646 - in /cxf/branches/2.6.x-fixes: ./
api/src/main/java/org/apache/cxf/helpers/ tools/common/src/main/java/org/apache/cxf/tools/common/
tools/common/src/main/java/org/apache/cxf/tools/util/ tools/wsdlto/core/src/main/java/org/apache/c...
This has broken 2.6.x + 2.5.x due to JDK 1.5 not having String.isEmpty().
Colm.
On Tue, Mar 5, 2013 at 3:01 AM, <em...@apache.org> wrote:
> Author: ema
> Date: Tue Mar 5 03:01:52 2013
> New Revision: 1452646
>
> URL: http://svn.apache.org/r1452646
> Log:
> Merged revisions 1452641 via svnmerge from
> https://svn.apache.org/repos/asf/cxf/branches/2.7.x-fixes
>
> ................
> r1452641 | ema | 2013-03-05 10:55:24 +0800 (Tue, 05 Mar 2013) | 9 lines
>
> Merged revisions 1452640 via svnmerge from
> https://svn.apache.org/repos/asf/cxf/trunk
>
> ........
> r1452640 | ema | 2013-03-05 10:27:41 +0800 (Tue, 05 Mar 2013) | 1 line
>
> [CXF-4871]:add -clientjar to wsdl2java tool
> ........
> ................
>
> Modified:
> cxf/branches/2.6.x-fixes/ (props changed)
>
> cxf/branches/2.6.x-fixes/api/src/main/java/org/apache/cxf/helpers/FileUtils.java
>
> cxf/branches/2.6.x-fixes/tools/common/src/main/java/org/apache/cxf/tools/common/ToolConstants.java
>
> cxf/branches/2.6.x-fixes/tools/common/src/main/java/org/apache/cxf/tools/util/ClassCollector.java
>
> cxf/branches/2.6.x-fixes/tools/wsdlto/core/src/main/java/org/apache/cxf/tools/wsdlto/Messages.properties
>
> cxf/branches/2.6.x-fixes/tools/wsdlto/core/src/main/java/org/apache/cxf/tools/wsdlto/WSDLToJavaContainer.java
>
> cxf/branches/2.6.x-fixes/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/jaxws-toolspec.xml
>
> cxf/branches/2.6.x-fixes/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/template/service.vm
>
> cxf/branches/2.6.x-fixes/tools/wsdlto/test/src/test/java/org/apache/cxf/tools/wsdlto/jaxws/CodeGenTest.java
>
> Propchange: cxf/branches/2.6.x-fixes/
>
> ------------------------------------------------------------------------------
> Merged /cxf/branches/2.7.x-fixes:r1452641
> Merged /cxf/trunk:r1452640
>
> Propchange: cxf/branches/2.6.x-fixes/
>
> ------------------------------------------------------------------------------
> Binary property 'svnmerge-integrated' - no diff available.
>
> Modified:
> cxf/branches/2.6.x-fixes/api/src/main/java/org/apache/cxf/helpers/FileUtils.java
> URL:
> http://svn.apache.org/viewvc/cxf/branches/2.6.x-fixes/api/src/main/java/org/apache/cxf/helpers/FileUtils.java?rev=1452646&r1=1452645&r2=1452646&view=diff
>
> ==============================================================================
> ---
> cxf/branches/2.6.x-fixes/api/src/main/java/org/apache/cxf/helpers/FileUtils.java
> (original)
> +++
> cxf/branches/2.6.x-fixes/api/src/main/java/org/apache/cxf/helpers/FileUtils.java
> Tue Mar 5 03:01:52 2013
> @@ -58,38 +58,43 @@ public final class FileUtils {
> }
> }
> if (defaultTempDir == null) {
> - int x = (int)(Math.random() * 1000000);
> - s = SystemPropertyAction.getProperty("java.io.tmpdir");
> - File checkExists = new File(s);
> - if (!checkExists.exists() || !checkExists.isDirectory()) {
> - throw new RuntimeException("The directory "
> - + checkExists.getAbsolutePath()
> - + " does not exist, please set
> java.io.tempdir"
> - + " to an existing directory");
> - }
> - if (!checkExists.canWrite()) {
> - throw new RuntimeException("The directory "
> - + checkExists.getAbsolutePath()
> - + " is now writable, please set
> java.io.tempdir"
> - + " to an writable directory");
> - }
> - File f = new File(s, "cxf-tmp-" + x);
> - while (!f.mkdir()) {
> - x = (int)(Math.random() * 1000000);
> - f = new File(s, "cxf-tmp-" + x);
> - }
> - defaultTempDir = f;
> - final File f2 = f;
> - Thread hook = new Thread() {
> - @Override
> - public void run() {
> - removeDir(f2, true);
> - }
> - };
> - Runtime.getRuntime().addShutdownHook(hook);
> + defaultTempDir = createTmpDir();
> }
> return defaultTempDir;
> }
> +
> + public static File createTmpDir() {
> + int x = (int)(Math.random() * 1000000);
> + String s = SystemPropertyAction.getProperty("java.io.tmpdir");
> + File checkExists = new File(s);
> + if (!checkExists.exists() || !checkExists.isDirectory()) {
> + throw new RuntimeException("The directory "
> + + checkExists.getAbsolutePath()
> + + " does not exist, please set
> java.io.tempdir"
> + + " to an existing directory");
> + }
> + if (!checkExists.canWrite()) {
> + throw new RuntimeException("The directory "
> + + checkExists.getAbsolutePath()
> + + " is now writable, please set
> java.io.tempdir"
> + + " to an writable directory");
> + }
> + File f = new File(s, "cxf-tmp-" + x);
> + while (!f.mkdir()) {
> + x = (int)(Math.random() * 1000000);
> + f = new File(s, "cxf-tmp-" + x);
> + }
> + File newTmpDir = f;
> + final File f2 = f;
> + Thread hook = new Thread() {
> + @Override
> + public void run() {
> + removeDir(f2, true);
> + }
> + };
> + Runtime.getRuntime().addShutdownHook(hook);
> + return newTmpDir;
> + }
>
> public static void mkDir(File dir) {
> if (dir == null) {
>
> Modified:
> cxf/branches/2.6.x-fixes/tools/common/src/main/java/org/apache/cxf/tools/common/ToolConstants.java
> URL:
> http://svn.apache.org/viewvc/cxf/branches/2.6.x-fixes/tools/common/src/main/java/org/apache/cxf/tools/common/ToolConstants.java?rev=1452646&r1=1452645&r2=1452646&view=diff
>
> ==============================================================================
> ---
> cxf/branches/2.6.x-fixes/tools/common/src/main/java/org/apache/cxf/tools/common/ToolConstants.java
> (original)
> +++
> cxf/branches/2.6.x-fixes/tools/common/src/main/java/org/apache/cxf/tools/common/ToolConstants.java
> Tue Mar 5 03:01:52 2013
> @@ -50,6 +50,7 @@ public final class ToolConstants {
> public static final String CFG_WEBSERVICE = "webservice";
> public static final String CFG_SERVER = "server";
> public static final String CFG_CLIENT = "client";
> + public static final String CFG_CLIENT_JAR = "clientjar";
> public static final String CFG_ALL = "all";
> public static final String CFG_IMPL = "impl";
> public static final String CFG_PACKAGENAME = "packagename";
>
> Modified:
> cxf/branches/2.6.x-fixes/tools/common/src/main/java/org/apache/cxf/tools/util/ClassCollector.java
> URL:
> http://svn.apache.org/viewvc/cxf/branches/2.6.x-fixes/tools/common/src/main/java/org/apache/cxf/tools/util/ClassCollector.java?rev=1452646&r1=1452645&r2=1452646&view=diff
>
> ==============================================================================
> ---
> cxf/branches/2.6.x-fixes/tools/common/src/main/java/org/apache/cxf/tools/util/ClassCollector.java
> (original)
> +++
> cxf/branches/2.6.x-fixes/tools/common/src/main/java/org/apache/cxf/tools/util/ClassCollector.java
> Tue Mar 5 03:01:52 2013
> @@ -29,12 +29,12 @@ import java.util.TreeSet;
>
> public class ClassCollector {
>
> - private final Map<String, String> seiClassNames
> + private Map<String, String> seiClassNames
> = new TreeMap<String, String>(String.CASE_INSENSITIVE_ORDER);
> - private final Map<String, String> typesClassNames = new
> HashMap<String, String>();
> - private final Map<String, String> exceptionClassNames = new
> HashMap<String, String>();
> - private final Map<String, String> serviceClassNames = new
> HashMap<String, String>();
> - private final Map<String, String> implClassNames = new
> HashMap<String, String>();
> + private Map<String, String> typesClassNames = new HashMap<String,
> String>();
> + private Map<String, String> exceptionClassNames = new HashMap<String,
> String>();
> + private Map<String, String> serviceClassNames = new HashMap<String,
> String>();
> + private Map<String, String> implClassNames = new HashMap<String,
> String>();
> private final Map<String, String> clientClassNames = new
> HashMap<String, String>();
> private final Map<String, String> serverClassNames = new
> HashMap<String, String>();
> private final Map<String, String> reservedClassNames = new
> HashMap<String, String>();
> @@ -154,5 +154,36 @@ public class ClassCollector {
> generatedFileList.addAll(clientClassNames.values());
> return generatedFileList;
> }
> -
> +
> + public Map<String, String> getSeiClassNames() {
> + return seiClassNames;
> + }
> + public void setSeiClassNames(Map<String, String> seiClassNames) {
> + this.seiClassNames = seiClassNames;
> + }
> + public Map<String, String> getTypesClassNames() {
> + return typesClassNames;
> + }
> + public void setTypesClassNames(Map<String, String> typesClassNames) {
> + this.typesClassNames = typesClassNames;
> + }
> + public Map<String, String> getExceptionClassNames() {
> + return exceptionClassNames;
> + }
> + public void setExceptionClassNames(Map<String, String>
> exceptionClassNames) {
> + this.exceptionClassNames = exceptionClassNames;
> + }
> + public Map<String, String> getServiceClassNames() {
> + return serviceClassNames;
> + }
> + public void setServiceClassNames(Map<String, String>
> serviceClassNames) {
> + this.serviceClassNames = serviceClassNames;
> + }
> + public Map<String, String> getImplClassNames() {
> + return implClassNames;
> + }
> + public void setImplClassNames(Map<String, String> implClassNames) {
> + this.implClassNames = implClassNames;
> + }
> +
> }
>
> Modified:
> cxf/branches/2.6.x-fixes/tools/wsdlto/core/src/main/java/org/apache/cxf/tools/wsdlto/Messages.properties
> URL:
> http://svn.apache.org/viewvc/cxf/branches/2.6.x-fixes/tools/wsdlto/core/src/main/java/org/apache/cxf/tools/wsdlto/Messages.properties?rev=1452646&r1=1452645&r2=1452646&view=diff
>
> ==============================================================================
> ---
> cxf/branches/2.6.x-fixes/tools/wsdlto/core/src/main/java/org/apache/cxf/tools/wsdlto/Messages.properties
> (original)
> +++
> cxf/branches/2.6.x-fixes/tools/wsdlto/core/src/main/java/org/apache/cxf/tools/wsdlto/Messages.properties
> Tue Mar 5 03:01:52 2013
> @@ -27,3 +27,8 @@ FOUND_NO_DATABINDING = Can not find data
> FOUND_NO_FRONTEND = Can not find frontend
>
> NO_WSDL_URL = WSDL URL can not be null
> +
> +FAILED_TO_CREAT_CLIENTJAR = Failed to create client jar
> +FAILED_ADD_JARENTRY = Failed to add jarentry into client jar file
> +FAILED_TO_GEN_LOCAL_WSDL = Failed to generate local wsdl for clientjar
> +
>
> Modified:
> cxf/branches/2.6.x-fixes/tools/wsdlto/core/src/main/java/org/apache/cxf/tools/wsdlto/WSDLToJavaContainer.java
> URL:
> http://svn.apache.org/viewvc/cxf/branches/2.6.x-fixes/tools/wsdlto/core/src/main/java/org/apache/cxf/tools/wsdlto/WSDLToJavaContainer.java?rev=1452646&r1=1452645&r2=1452646&view=diff
>
> ==============================================================================
> ---
> cxf/branches/2.6.x-fixes/tools/wsdlto/core/src/main/java/org/apache/cxf/tools/wsdlto/WSDLToJavaContainer.java
> (original)
> +++
> cxf/branches/2.6.x-fixes/tools/wsdlto/core/src/main/java/org/apache/cxf/tools/wsdlto/WSDLToJavaContainer.java
> Tue Mar 5 03:01:52 2013
> @@ -19,14 +19,22 @@
>
> package org.apache.cxf.tools.wsdlto;
>
> +import java.io.BufferedInputStream;
> +import java.io.BufferedOutputStream;
> import java.io.BufferedReader;
> +import java.io.ByteArrayOutputStream;
> import java.io.File;
> +import java.io.FileInputStream;
> +import java.io.FileOutputStream;
> import java.io.IOException;
> import java.io.InputStream;
> import java.io.InputStreamReader;
> +import java.io.OutputStream;
> +import java.io.Writer;
> import java.net.URI;
> import java.net.URL;
> import java.util.ArrayList;
> +import java.util.HashMap;
> import java.util.HashSet;
> import java.util.Iterator;
> import java.util.LinkedHashMap;
> @@ -34,12 +42,19 @@ import java.util.List;
> import java.util.Map;
> import java.util.Properties;
> import java.util.Set;
> +import java.util.jar.JarEntry;
> +import java.util.jar.JarOutputStream;
> +import java.util.jar.Manifest;
> import java.util.logging.Level;
> import java.util.logging.Logger;
>
> import javax.wsdl.Definition;
> +import javax.wsdl.factory.WSDLFactory;
> +import javax.wsdl.xml.WSDLWriter;
> import javax.xml.namespace.QName;
>
> +import org.w3c.dom.Element;
> +
> import org.apache.cxf.Bus;
> import org.apache.cxf.common.WSDLConstants;
> import org.apache.cxf.common.i18n.Message;
> @@ -49,6 +64,10 @@ import org.apache.cxf.common.util.String
> import org.apache.cxf.common.util.URIParserUtil;
> import org.apache.cxf.common.xmlschema.SchemaCollection;
> import org.apache.cxf.helpers.CastUtils;
> +import org.apache.cxf.helpers.DOMUtils;
> +import org.apache.cxf.helpers.FileUtils;
> +import org.apache.cxf.helpers.IOUtils;
> +import org.apache.cxf.helpers.XMLUtils;
> import org.apache.cxf.service.model.InterfaceInfo;
> import org.apache.cxf.service.model.ServiceInfo;
> import org.apache.cxf.tools.common.AbstractCXFToolContainer;
> @@ -64,12 +83,15 @@ import org.apache.cxf.tools.common.tools
> import org.apache.cxf.tools.common.toolspec.parser.CommandDocument;
> import org.apache.cxf.tools.common.toolspec.parser.ErrorVisitor;
> import org.apache.cxf.tools.util.ClassCollector;
> +import org.apache.cxf.tools.util.FileWriterUtil;
> +import org.apache.cxf.tools.util.OutputStreamCreator;
> import org.apache.cxf.tools.validator.ServiceValidator;
> import org.apache.cxf.tools.wsdlto.core.AbstractWSDLBuilder;
> import org.apache.cxf.tools.wsdlto.core.DataBindingProfile;
> import org.apache.cxf.tools.wsdlto.core.FrontEndProfile;
> import org.apache.cxf.wsdl.WSDLManager;
> import org.apache.cxf.wsdl11.WSDLServiceBuilder;
> +import org.apache.ws.commons.schema.XmlSchema;
>
> public class WSDLToJavaContainer extends AbstractCXFToolContainer {
>
> @@ -266,6 +288,11 @@ public class WSDLToJavaContainer extends
> if (context.getErrorListener().getErrorCount() > 0) {
> return;
> }
> +
> + if (context.optionSet(ToolConstants.CFG_CLIENT_JAR)) {
> + enforceWSDLLocation(context);
> + }
> +
> if (!isSuppressCodeGen()) {
> // Generate artifacts
> for (FrontEndGenerator generator : frontend.getGenerators()) {
> @@ -286,6 +313,91 @@ public class WSDLToJavaContainer extends
> throw new ToolException(e);
> }
> }
> + if (context.optionSet(ToolConstants.CFG_CLIENT_JAR)) {
> + processClientJar(context);
> + }
> + }
> +
> + private void enforceWSDLLocation(ToolContext context) {
> + String wsdlURL = (String)context.get(ToolConstants.CFG_WSDLURL);
> + @SuppressWarnings("unchecked")
> + List<ServiceInfo> serviceList =
> (List<ServiceInfo>)context.get(ToolConstants.SERVICE_LIST);
> + int slashIndex = wsdlURL.lastIndexOf("/");
> + int dotIndex = wsdlURL.indexOf(".", slashIndex);
> + String wsdlLocation = null;
> + if (slashIndex > -1 && dotIndex > -1) {
> + wsdlLocation = wsdlURL.substring(slashIndex + 1, dotIndex) +
> ".wsdl";
> + }
> + if (wsdlLocation == null) {
> + wsdlLocation = serviceList.get(0).getName().getLocalPart() +
> ".wsdl";
> + }
> + context.put(ToolConstants.CFG_WSDLLOCATION, wsdlLocation);
> + }
> +
> + private void processClientJar(ToolContext context) {
> + ClassCollector oldCollector = context.get(ClassCollector.class);
> + ClassCollector newCollector = new ClassCollector();
> + String oldClassDir =
> (String)context.get(ToolConstants.CFG_CLASSDIR);
> + File tmpDir = FileUtils.createTmpDir();
> + context.put(ToolConstants.CFG_CLASSDIR, tmpDir.getAbsolutePath());
> +
> +
> newCollector.setTypesClassNames(oldCollector.getTypesClassNames());
> + newCollector.setSeiClassNames(oldCollector.getSeiClassNames());
> +
> newCollector.setExceptionClassNames(oldCollector.getExceptionClassNames());
> +
> newCollector.setServiceClassNames(oldCollector.getServiceClassNames());
> + context.put(ClassCollector.class, newCollector);
> + new ClassUtils().compile(context);
> +
> + generateLocalWSDL(context);
> +
> +
> + File clientJarFile = new
> File((String)context.get(ToolConstants.CFG_OUTPUTDIR),
> +
> (String)context.get(ToolConstants.CFG_CLIENT_JAR));
> + JarOutputStream jarout = null;
> + try {
> + jarout = new JarOutputStream(new
> FileOutputStream(clientJarFile), new Manifest());
> + createClientJar(tmpDir, jarout);
> + jarout.close();
> + } catch (Exception e) {
> + LOG.log(Level.SEVERE, "FAILED_TO_CREAT_CLIENTJAR", e);
> + Message msg = new Message("FAILED_TO_CREAT_CLIENTJAR", LOG);
> + throw new ToolException(msg, e);
> + }
> + context.put(ToolConstants.CFG_CLASSDIR, oldClassDir);
> + context.put(ClassCollector.class, oldCollector);
> + }
> +
> + private void createClientJar(File tmpDirectory, JarOutputStream
> jarout) {
> + try {
> + URI parentFile = new
> URI((String)context.get(ToolConstants.CFG_CLASSDIR));
> + for (File file : tmpDirectory.listFiles()) {
> + URI relativePath = parentFile.relativize(new
> URI(file.getPath()));
> + String name = relativePath.toString().replace("\\", "/");
> + if (file.isDirectory()) {
> + if (!name.isEmpty()) {
> + if (!name.endsWith("/")) {
> + name += "/";
> + }
> + JarEntry entry = new JarEntry(name);
> + entry.setTime(file.lastModified());
> + jarout.putNextEntry(entry);
> + jarout.closeEntry();
> + }
> + createClientJar(file, jarout);
> + continue;
> + }
> + JarEntry entry = new JarEntry(name);
> + entry.setTime(file.lastModified());
> + jarout.putNextEntry(entry);
> + InputStream input = new BufferedInputStream(new
> FileInputStream(file));
> + IOUtils.copy(input, jarout);
> + input.close();
> + jarout.closeEntry();
> + }
> + } catch (Exception e) {
> + Message msg = new Message("FAILED_ADD_JARENTRY", LOG);
> + throw new ToolException(msg, e);
> + }
> }
>
> private boolean isSuppressCodeGen() {
> @@ -647,4 +759,121 @@ public class WSDLToJavaContainer extends
> }
> return validators;
> }
> +
> + @SuppressWarnings("unchecked")
> + private void generateLocalWSDL(ToolContext context) {
> + String outputdir =
> (String)context.get(ToolConstants.CFG_CLASSDIR);
> + File wsdlFile = new File(outputdir,
> (String)context.get(ToolConstants.CFG_WSDLLOCATION));
> + Definition def = context.get(Definition.class);
> + try {
> + //get imported schemas
> + int xsdCount = 0;
> + SchemaCollection schemas = (SchemaCollection)
> context.get(ToolConstants.XML_SCHEMA_COLLECTION);
> + Map<String, String> sourceMap = new HashMap<String, String>();
> + for (XmlSchema imp : schemas.getXmlSchemas()) {
> + if (imp.getSourceURI() != null &&
> !imp.getSourceURI().contains(".wsdl#")) {
> + String schemaFileName = "schema" + (++xsdCount) +
> ".xsd";
> + sourceMap.put(imp.getTargetNamespace(),
> schemaFileName);
> + }
> + }
> +
> + //get imported wsdls
> + List<Definition> defs =
> (List<Definition>)context.get(ToolConstants.IMPORTED_DEFINITION);
> + Map<String, String> importWSDLMap = new HashMap<String,
> String>();
> + for (Definition importDef : defs) {
> + File importedWsdlFile = null;
> + if (!StringUtils.isEmpty(importDef.getDocumentBaseURI()))
> {
> + importedWsdlFile = new
> File(importDef.getDocumentBaseURI());
> + } else {
> + importedWsdlFile = new
> File(importDef.getQName().getLocalPart() + ".wsdl");
> + }
> + importWSDLMap.put(importDef.getTargetNamespace(),
> importedWsdlFile.getName());
> + }
> +
> +
> + OutputStreamCreator outputStreamCreator = null;
> + if (context.get(OutputStreamCreator.class) != null) {
> + outputStreamCreator =
> context.get(OutputStreamCreator.class);
> + } else {
> + outputStreamCreator = new OutputStreamCreator();
> + context.put(OutputStreamCreator.class,
> outputStreamCreator);
> + }
> + Writer os = null;
> +
> +
> +
> + for (XmlSchema imp : schemas.getXmlSchemas()) {
> + if (imp.getSourceURI() != null &&
> !imp.getSourceURI().contains(".wsdl#")) {
> + String schemaFileName =
> sourceMap.get(imp.getTargetNamespace());
> + File impfile = new File(wsdlFile.getParentFile(),
> schemaFileName);
> + Element el =
> imp.getSchemaDocument().getDocumentElement();
> + updateImports(el, sourceMap);
> + os = new FileWriterUtil(impfile.getParent(),
> context.get(OutputStreamCreator.class))
> + .getWriter(impfile, "UTF-8");
> + XMLUtils.writeTo(el, os, 2);
> + os.close();
> + }
> + }
> +
> + //change the import location in wsdl file
> + OutputStream wsdloutput = new BufferedOutputStream(new
> FileOutputStream(wsdlFile));
> + WSDLWriter wsdlWriter =
> WSDLFactory.newInstance().newWSDLWriter();
> + ByteArrayOutputStream bout = new ByteArrayOutputStream();
> + wsdlWriter.writeWSDL(def, bout);
> + Element defEle =
> XMLUtils.parse(bout.toByteArray()).getDocumentElement();
> + List<Element> xsdElements =
> DOMUtils.findAllElementsByTagNameNS(defEle,
> +
> WSDLConstants.NS_SCHEMA_XSD,
> +
> "schema");
> + for (Element xsdEle : xsdElements) {
> + updateImports(xsdEle, sourceMap);
> + }
> + updateWSDLImports(defEle, importWSDLMap);
> + DOMUtils.writeXml(defEle, wsdloutput);
> + wsdloutput.close();
> +
> +
> + for (Definition importDef : defs) {
> + File importWsdlFile = new File(outputdir,
> importWSDLMap.get(importDef.getTargetNamespace()));
> + OutputStream wsdlOs = new BufferedOutputStream(new
> FileOutputStream(importWsdlFile));
> + bout = new ByteArrayOutputStream();
> + wsdlWriter.writeWSDL(importDef, bout);
> + Element importEle =
> XMLUtils.parse(bout.toByteArray()).getDocumentElement();
> +
> + xsdElements =
> DOMUtils.findAllElementsByTagNameNS(importEle, WSDLConstants.NS_SCHEMA_XSD,
> +
> "schema");
> + for (Element xsdEle : xsdElements) {
> + updateImports(xsdEle, sourceMap);
> + }
> + updateWSDLImports(importEle, importWSDLMap);
> + DOMUtils.writeXml(importEle, wsdlOs);
> + wsdlOs.close();
> +
> + }
> + } catch (Exception ex) {
> + LOG.log(Level.SEVERE, "FAILED_TO_GEN_LOCAL_WSDL", ex);
> + Message msg = new Message("FAILED_TO_GEN_LOCAL_WSDL", LOG);
> + throw new ToolException(msg, ex);
> + }
> + }
> +
> + private void updateImports(Element el, Map<String, String> sourceMap)
> {
> + List<Element> imps = DOMUtils.getChildrenWithName(el,
> +
> WSDLConstants.NS_SCHEMA_XSD,
> + "import");
> + for (Element e : imps) {
> + String ns = e.getAttribute("namespace");
> + e.setAttribute("schemaLocation", sourceMap.get(ns));
> +
> + }
> + }
> +
> + private void updateWSDLImports(Element el, Map<String, String>
> wsdlSourceMap) {
> + List<Element> imps = DOMUtils.getChildrenWithName(el,
> +
> WSDLConstants.QNAME_IMPORT.getNamespaceURI(),
> + "import");
> + for (Element e : imps) {
> + String ns = e.getAttribute("namespace");
> + e.setAttribute("location", wsdlSourceMap.get(ns));
> + }
> + }
> }
>
> Modified:
> cxf/branches/2.6.x-fixes/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/jaxws-toolspec.xml
> URL:
> http://svn.apache.org/viewvc/cxf/branches/2.6.x-fixes/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/jaxws-toolspec.xml?rev=1452646&r1=1452645&r2=1452646&view=diff
>
> ==============================================================================
> ---
> cxf/branches/2.6.x-fixes/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/jaxws-toolspec.xml
> (original)
> +++
> cxf/branches/2.6.x-fixes/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/jaxws-toolspec.xml
> Tue Mar 5 03:01:52 2013
> @@ -166,6 +166,16 @@ Examples:
> </annotation>
> <switch>client</switch>
> </option>
> +
> + <option id="clientjar" maxOccurs="1">
> + <annotation>
> + Package all the client classes and wsdl in a jar file
> + </annotation>
> + <associatedArgument placement="afterSpace">
> + <annotation>jar-file-name</annotation>
> + </associatedArgument>
> + <switch>clientjar</switch>
> + </option>
>
> <option id="all" maxOccurs="1">
> <annotation>
>
> Modified:
> cxf/branches/2.6.x-fixes/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/template/service.vm
> URL:
> http://svn.apache.org/viewvc/cxf/branches/2.6.x-fixes/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/template/service.vm?rev=1452646&r1=1452645&r2=1452646&view=diff
>
> ==============================================================================
> ---
> cxf/branches/2.6.x-fixes/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/template/service.vm
> (original)
> +++
> cxf/branches/2.6.x-fixes/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/template/service.vm
> Tue Mar 5 03:01:52 2013
> @@ -95,6 +95,9 @@ public class ${service.Name} extends ${s
> #elseif ($useGetResource)
> URL url = ${service.Name}.class.getResource("$wsdlLocation");
> if (url == null) {
> + url =
> ${service.Name}.class.getClassLoader().getResource("$wsdlLocation");
> + }
> + if (url == null) {
>
> java.util.logging.Logger.getLogger(${service.Name}.class.getName())
> .log(java.util.logging.Level.INFO,
> "Can not initialize the default wsdl from {0}",
> "$wsdlLocation");
>
> Modified:
> cxf/branches/2.6.x-fixes/tools/wsdlto/test/src/test/java/org/apache/cxf/tools/wsdlto/jaxws/CodeGenTest.java
> URL:
> http://svn.apache.org/viewvc/cxf/branches/2.6.x-fixes/tools/wsdlto/test/src/test/java/org/apache/cxf/tools/wsdlto/jaxws/CodeGenTest.java?rev=1452646&r1=1452645&r2=1452646&view=diff
>
> ==============================================================================
> ---
> cxf/branches/2.6.x-fixes/tools/wsdlto/test/src/test/java/org/apache/cxf/tools/wsdlto/jaxws/CodeGenTest.java
> (original)
> +++
> cxf/branches/2.6.x-fixes/tools/wsdlto/test/src/test/java/org/apache/cxf/tools/wsdlto/jaxws/CodeGenTest.java
> Tue Mar 5 03:01:52 2013
> @@ -19,6 +19,7 @@
> package org.apache.cxf.tools.wsdlto.jaxws;
>
> import java.io.File;
> +import java.io.FileInputStream;
> import java.io.ObjectStreamClass;
> import java.lang.annotation.Annotation;
> import java.lang.reflect.Field;
> @@ -26,8 +27,11 @@ import java.lang.reflect.Method;
> import java.lang.reflect.Modifier;
> import java.lang.reflect.ParameterizedType;
> import java.lang.reflect.Type;
> +import java.util.ArrayList;
> import java.util.Arrays;
> import java.util.List;
> +import java.util.jar.JarEntry;
> +import java.util.jar.JarInputStream;
>
> import javax.jws.HandlerChain;
> import javax.jws.Oneway;
> @@ -1651,4 +1655,29 @@ public class CodeGenTest extends Abstrac
> assertTrue(seiFile.exists());
> }
>
> + @Test
> + public void testClientJar() throws Exception {
> + env.put(ToolConstants.CFG_WSDLURL,
> getLocation("/wsdl2java_wsdl/hello_world_wsdl_import.wsdl"));
> + env.put(ToolConstants.CFG_CLIENT_JAR, "test-client.jar");
> + processor.setContext(env);
> + processor.execute();
> + File clientjarFile = new File(output, "test-client.jar");
> + assertTrue(clientjarFile.exists());
> +
> + List<String> jarEntries = new ArrayList<String>();
> + JarInputStream jarIns = new JarInputStream(new
> FileInputStream(clientjarFile));
> + JarEntry entry = null;
> + while ((entry = jarIns.getNextJarEntry()) != null) {
> + if (entry.getName().endsWith(".wsdl") ||
> entry.getName().endsWith(".class")) {
> + jarEntries.add(entry.getName());
> + }
> + }
> + jarIns.close();
> + assertEquals("15 files including wsdl and class files are
> expected", 15, jarEntries.size());
> + assertTrue("hello_world_messages.wsdl is expected",
> + jarEntries.contains("hello_world_messages.wsdl"));
> + assertTrue("org/apache/cxf/w2j/hello_world/SOAPService.class is
> expected",
> +
> jarEntries.contains("org/apache/cxf/w2j/hello_world/SOAPService.class"));
> + }
> +
> }
>
>
>
--
Colm O hEigeartaigh
Talend Community Coder
http://coders.talend.com