cxf-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From e..@apache.org
Subject svn commit: r1452650 - in /cxf/branches/2.5.x-fixes: ./ api/src/main/java/org/apache/cxf/tools/common/ common/common/src/main/java/org/apache/cxf/helpers/ tools/common/src/main/java/org/apache/cxf/tools/util/ tools/wsdlto/core/src/main/java/org/apache/...
Date Tue, 05 Mar 2013 03:31:17 GMT
Author: ema
Date: Tue Mar  5 03:31:17 2013
New Revision: 1452650

URL: http://svn.apache.org/r1452650
Log:
Merged revisions 1452646 via svnmerge from 
https://svn.apache.org/repos/asf/cxf/branches/2.6.x-fixes

................
  r1452646 | ema | 2013-03-05 11:01:52 +0800 (Tue, 05 Mar 2013) | 16 lines
  
  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.5.x-fixes/   (props changed)
    cxf/branches/2.5.x-fixes/api/src/main/java/org/apache/cxf/tools/common/ToolConstants.java
    cxf/branches/2.5.x-fixes/common/common/src/main/java/org/apache/cxf/helpers/FileUtils.java
    cxf/branches/2.5.x-fixes/tools/common/src/main/java/org/apache/cxf/tools/util/ClassCollector.java
    cxf/branches/2.5.x-fixes/tools/wsdlto/core/src/main/java/org/apache/cxf/tools/wsdlto/Messages.properties
    cxf/branches/2.5.x-fixes/tools/wsdlto/core/src/main/java/org/apache/cxf/tools/wsdlto/WSDLToJavaContainer.java
    cxf/branches/2.5.x-fixes/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/jaxws-toolspec.xml
    cxf/branches/2.5.x-fixes/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/template/service.vm
    cxf/branches/2.5.x-fixes/tools/wsdlto/test/src/test/java/org/apache/cxf/tools/wsdlto/jaxws/CodeGenTest.java

Propchange: cxf/branches/2.5.x-fixes/
------------------------------------------------------------------------------
--- svn:mergeinfo (added)
+++ svn:mergeinfo Tue Mar  5 03:31:17 2013
@@ -0,0 +1,3 @@
+/cxf/branches/2.6.x-fixes:1452646
+/cxf/branches/2.7.x-fixes:1452641
+/cxf/trunk:1452640

Propchange: cxf/branches/2.5.x-fixes/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.

Modified: cxf/branches/2.5.x-fixes/api/src/main/java/org/apache/cxf/tools/common/ToolConstants.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.5.x-fixes/api/src/main/java/org/apache/cxf/tools/common/ToolConstants.java?rev=1452650&r1=1452649&r2=1452650&view=diff
==============================================================================
--- cxf/branches/2.5.x-fixes/api/src/main/java/org/apache/cxf/tools/common/ToolConstants.java
(original)
+++ cxf/branches/2.5.x-fixes/api/src/main/java/org/apache/cxf/tools/common/ToolConstants.java
Tue Mar  5 03:31:17 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.5.x-fixes/common/common/src/main/java/org/apache/cxf/helpers/FileUtils.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.5.x-fixes/common/common/src/main/java/org/apache/cxf/helpers/FileUtils.java?rev=1452650&r1=1452649&r2=1452650&view=diff
==============================================================================
--- cxf/branches/2.5.x-fixes/common/common/src/main/java/org/apache/cxf/helpers/FileUtils.java
(original)
+++ cxf/branches/2.5.x-fixes/common/common/src/main/java/org/apache/cxf/helpers/FileUtils.java
Tue Mar  5 03:31:17 2013
@@ -58,39 +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) {
             throw new RuntimeException("dir attribute is required");

Modified: cxf/branches/2.5.x-fixes/tools/common/src/main/java/org/apache/cxf/tools/util/ClassCollector.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.5.x-fixes/tools/common/src/main/java/org/apache/cxf/tools/util/ClassCollector.java?rev=1452650&r1=1452649&r2=1452650&view=diff
==============================================================================
--- cxf/branches/2.5.x-fixes/tools/common/src/main/java/org/apache/cxf/tools/util/ClassCollector.java
(original)
+++ cxf/branches/2.5.x-fixes/tools/common/src/main/java/org/apache/cxf/tools/util/ClassCollector.java
Tue Mar  5 03:31:17 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.5.x-fixes/tools/wsdlto/core/src/main/java/org/apache/cxf/tools/wsdlto/Messages.properties
URL: http://svn.apache.org/viewvc/cxf/branches/2.5.x-fixes/tools/wsdlto/core/src/main/java/org/apache/cxf/tools/wsdlto/Messages.properties?rev=1452650&r1=1452649&r2=1452650&view=diff
==============================================================================
--- cxf/branches/2.5.x-fixes/tools/wsdlto/core/src/main/java/org/apache/cxf/tools/wsdlto/Messages.properties
(original)
+++ cxf/branches/2.5.x-fixes/tools/wsdlto/core/src/main/java/org/apache/cxf/tools/wsdlto/Messages.properties
Tue Mar  5 03:31:17 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.5.x-fixes/tools/wsdlto/core/src/main/java/org/apache/cxf/tools/wsdlto/WSDLToJavaContainer.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.5.x-fixes/tools/wsdlto/core/src/main/java/org/apache/cxf/tools/wsdlto/WSDLToJavaContainer.java?rev=1452650&r1=1452649&r2=1452650&view=diff
==============================================================================
--- cxf/branches/2.5.x-fixes/tools/wsdlto/core/src/main/java/org/apache/cxf/tools/wsdlto/WSDLToJavaContainer.java
(original)
+++ cxf/branches/2.5.x-fixes/tools/wsdlto/core/src/main/java/org/apache/cxf/tools/wsdlto/WSDLToJavaContainer.java
Tue Mar  5 03:31:17 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;
@@ -47,6 +62,10 @@ import org.apache.cxf.common.logging.Log
 import org.apache.cxf.common.util.PropertiesLoaderUtils;
 import org.apache.cxf.common.util.StringUtils;
 import org.apache.cxf.common.xmlschema.SchemaCollection;
+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;
@@ -62,6 +81,7 @@ 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.URIParserUtil;
 import org.apache.cxf.tools.validator.ServiceValidator;
 import org.apache.cxf.tools.wsdlto.core.AbstractWSDLBuilder;
@@ -69,6 +89,7 @@ import org.apache.cxf.tools.wsdlto.core.
 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 {
 
@@ -252,6 +273,11 @@ public class WSDLToJavaContainer extends
             processor.setEnvironment(context);
             processor.process();
         }
+        
+        if (context.optionSet(ToolConstants.CFG_CLIENT_JAR)) {
+            enforceWSDLLocation(context);
+        }
+        
         if (!isSuppressCodeGen()) {
             // Generate artifacts
             for (FrontEndGenerator generator : frontend.getGenerators()) {
@@ -272,6 +298,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() {
@@ -635,4 +746,111 @@ 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());
+            }
+            
+            
+            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())
+                        .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.5.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.5.x-fixes/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/jaxws-toolspec.xml?rev=1452650&r1=1452649&r2=1452650&view=diff
==============================================================================
--- cxf/branches/2.5.x-fixes/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/jaxws-toolspec.xml
(original)
+++ cxf/branches/2.5.x-fixes/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/jaxws-toolspec.xml
Tue Mar  5 03:31:17 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.5.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.5.x-fixes/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/template/service.vm?rev=1452650&r1=1452649&r2=1452650&view=diff
==============================================================================
--- cxf/branches/2.5.x-fixes/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/template/service.vm
(original)
+++ cxf/branches/2.5.x-fixes/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/template/service.vm
Tue Mar  5 03:31:17 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.5.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.5.x-fixes/tools/wsdlto/test/src/test/java/org/apache/cxf/tools/wsdlto/jaxws/CodeGenTest.java?rev=1452650&r1=1452649&r2=1452650&view=diff
==============================================================================
--- cxf/branches/2.5.x-fixes/tools/wsdlto/test/src/test/java/org/apache/cxf/tools/wsdlto/jaxws/CodeGenTest.java
(original)
+++ cxf/branches/2.5.x-fixes/tools/wsdlto/test/src/test/java/org/apache/cxf/tools/wsdlto/jaxws/CodeGenTest.java
Tue Mar  5 03:31:17 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;
@@ -1639,4 +1643,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"));
+    }
+    
 }



Mime
View raw message