You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by mm...@apache.org on 2007/04/27 14:08:26 UTC

svn commit: r533072 - in /incubator/cxf/trunk: common/common/src/main/java/org/apache/cxf/helpers/ rt/frontend/simple/src/main/java/org/apache/cxf/service/factory/ tools/common/src/main/java/org/apache/cxf/tools/common/ tools/common/src/main/java/org/a...

Author: mmao
Date: Fri Apr 27 05:08:24 2007
New Revision: 533072

URL: http://svn.apache.org/viewvc?view=rev&rev=533072
Log:
CXF-509
Wrapper bean class source generation

Added:
    incubator/cxf/trunk/tools/common/src/test/java/org/apache/cxf/tools/common/model/JavaInterfaceTest.java
    incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/generator/wsdl11/JCodeModelFilter.java
    incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/generator/wsdl11/WrapperBeanGenerator.java
    incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/processor/internal/jaxws/RequestWrapper.java
    incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/processor/internal/jaxws/ResponseWrapper.java
    incubator/cxf/trunk/tools/javato/src/test/java/org/apache/cxf/tools/fortest/withannotation/doc/Greeter.java
    incubator/cxf/trunk/tools/javato/src/test/java/org/apache/cxf/tools/java2wsdl/processor/internal/jaxws/WrapperTest.java
Modified:
    incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/helpers/FileUtils.java
    incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/service/factory/ReflectionServiceFactoryBean.java
    incubator/cxf/trunk/tools/common/src/main/java/org/apache/cxf/tools/common/ToolConstants.java
    incubator/cxf/trunk/tools/common/src/main/java/org/apache/cxf/tools/common/model/JavaInterface.java
    incubator/cxf/trunk/tools/common/src/main/java/org/apache/cxf/tools/util/JAXBUtils.java
    incubator/cxf/trunk/tools/javato/pom.xml
    incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/generator/AbstractGenerator.java
    incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/generator/wsdl11/WSDL11Generator.java
    incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/java2wsdl.xml
    incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/processor/JavaToProcessor.java
    incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/processor/internal/jaxws/Messages.properties
    incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/processor/internal/jaxws/Wrapper.java
    incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/processor/internal/jaxws/WrapperUtil.java
    incubator/cxf/trunk/tools/javato/src/test/java/org/apache/cxf/tools/java2wsdl/processor/JavaToProcessorTest.java
    incubator/cxf/trunk/tools/javato/src/test/java/org/apache/cxf/tools/java2wsdl/processor/internal/jaxws/WrapperUtilTest.java
    incubator/cxf/trunk/tools/wsdlto/databinding/jaxb/src/main/java/org/apache/cxf/tools/wsdlto/databinding/jaxb/JAXBBindErrorListener.java
    incubator/cxf/trunk/tools/wsdlto/databinding/jaxb/src/main/java/org/apache/cxf/tools/wsdlto/databinding/jaxb/JAXBDataBinding.java

Modified: incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/helpers/FileUtils.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/helpers/FileUtils.java?view=diff&rev=533072&r1=533071&r2=533072
==============================================================================
--- incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/helpers/FileUtils.java (original)
+++ incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/helpers/FileUtils.java Fri Apr 27 05:08:24 2007
@@ -20,11 +20,15 @@
 package org.apache.cxf.helpers;
 
 import java.io.File;
+import java.text.DecimalFormat;
 import java.util.Locale;
+import java.util.Random;
 
 public final class FileUtils {
     private static final int RETRY_SLEEP_MILLIS = 10;
-    
+    private static Random rand = new Random(System.currentTimeMillis()
+                                            + Runtime.getRuntime().freeMemory());
+
     private FileUtils() {
         
     }
@@ -102,5 +106,30 @@
     private static boolean isWindows() {
         String osName = System.getProperty("os.name").toLowerCase(Locale.US);
         return osName.indexOf("windows") > -1;
+    }
+
+    public static File createTempFile(String prefix, String suffix) {
+        return createTempFile(prefix, suffix, null, true);
+    }
+
+    public static File createTempFile(String prefix, String suffix, File parentDir,
+                               boolean deleteOnExit) {
+        File result = null;
+        String parent = (parentDir == null)
+            ? System.getProperty("java.io.tmpdir")
+            : parentDir.getPath();
+
+        DecimalFormat fmt = new DecimalFormat("#####");
+        synchronized (rand) {
+            do {
+                result = new File(parent,
+                                  prefix + fmt.format(Math.abs(rand.nextInt()))
+                                  + suffix);
+            } while (result.exists());
+        }
+        if (deleteOnExit) {
+            result.deleteOnExit();
+        }
+        return result;
     }
 }

Modified: incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/service/factory/ReflectionServiceFactoryBean.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/service/factory/ReflectionServiceFactoryBean.java?view=diff&rev=533072&r1=533071&r2=533072
==============================================================================
--- incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/service/factory/ReflectionServiceFactoryBean.java (original)
+++ incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/service/factory/ReflectionServiceFactoryBean.java Fri Apr 27 05:08:24 2007
@@ -344,6 +344,7 @@
 
     protected OperationInfo createOperation(ServiceInfo serviceInfo, InterfaceInfo intf, Method m) {
         OperationInfo op = intf.addOperation(getOperationName(intf, m));
+        op.setProperty(m.getClass().getName(), m);
         op.setProperty("action", getAction(op, m));
         
         if (isWrapped(m)) {

Modified: incubator/cxf/trunk/tools/common/src/main/java/org/apache/cxf/tools/common/ToolConstants.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/common/src/main/java/org/apache/cxf/tools/common/ToolConstants.java?view=diff&rev=533072&r1=533071&r2=533072
==============================================================================
--- incubator/cxf/trunk/tools/common/src/main/java/org/apache/cxf/tools/common/ToolConstants.java (original)
+++ incubator/cxf/trunk/tools/common/src/main/java/org/apache/cxf/tools/common/ToolConstants.java Fri Apr 27 05:08:24 2007
@@ -94,6 +94,7 @@
     public static final String CFG_USETYPES = "usetypes";
     public static final String CFG_CLASSNAME = "classname";
     public static final String CFG_PORTTYPE = "porttype";
+    public static final String CFG_SOURCEDIR = "sourcedir";
 
 
     // WSDL2Service Constants

Modified: incubator/cxf/trunk/tools/common/src/main/java/org/apache/cxf/tools/common/model/JavaInterface.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/common/src/main/java/org/apache/cxf/tools/common/model/JavaInterface.java?view=diff&rev=533072&r1=533071&r2=533072
==============================================================================
--- incubator/cxf/trunk/tools/common/src/main/java/org/apache/cxf/tools/common/model/JavaInterface.java (original)
+++ incubator/cxf/trunk/tools/common/src/main/java/org/apache/cxf/tools/common/model/JavaInterface.java Fri Apr 27 05:08:24 2007
@@ -199,5 +199,18 @@
     public void setHandlerChains(Element elem) {
         this.handlerChains = elem;
     }
-    
+
+    public void setFullClassName(String fullName) {
+        int index = fullName.lastIndexOf(".");
+        setPackageName(fullName.substring(0, index));
+        setName(fullName.substring(index + 1, fullName.length()));
+    }
+
+    public String getFullClassName() {
+        StringBuffer sb = new StringBuffer();
+        sb.append(getPackageName());
+        sb.append(".");
+        sb.append(getName());
+        return sb.toString();
+    }
 }

Modified: incubator/cxf/trunk/tools/common/src/main/java/org/apache/cxf/tools/util/JAXBUtils.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/common/src/main/java/org/apache/cxf/tools/util/JAXBUtils.java?view=diff&rev=533072&r1=533071&r2=533072
==============================================================================
--- incubator/cxf/trunk/tools/common/src/main/java/org/apache/cxf/tools/util/JAXBUtils.java (original)
+++ incubator/cxf/trunk/tools/common/src/main/java/org/apache/cxf/tools/util/JAXBUtils.java Fri Apr 27 05:08:24 2007
@@ -19,7 +19,16 @@
 
 package org.apache.cxf.tools.util;
 
-import org.w3c.dom.*;
+import java.io.File;
+import java.io.FileOutputStream;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+import org.apache.cxf.helpers.DOMUtils;
+import org.apache.cxf.helpers.FileUtils;
 import org.apache.cxf.helpers.XMLUtils;
 import org.apache.cxf.tools.common.ToolConstants;
 
@@ -81,5 +90,40 @@
         schemaBindings.appendChild(packagename);
 
         return schemaBindings.getParentNode().getParentNode();
+    }
+
+    /**
+     * Create the jaxb binding file to customize namespace to package mapping
+     * 
+     * @param namespace
+     * @param pkgName
+     * @return file
+     */
+    public static File getPackageMappingSchemaBindingFile(String namespace, String pkgName) {
+        Document doc = DOMUtils.createDocument();
+        Element rootElement = doc.createElement("schema");
+        rootElement.setAttribute("xmlns", ToolConstants.SCHEMA_URI);
+        rootElement.setAttribute("xmlns:jaxb", ToolConstants.NS_JAXB_BINDINGS);
+        rootElement.setAttribute("jaxb:version", "1.0");
+        rootElement.setAttribute("targetNamespace", namespace);
+        Element annoElement = doc.createElement("annotation");
+        Element appInfo = doc.createElement("appinfo");
+        Element schemaBindings = doc.createElement("jaxb:schemaBindings");
+        Element pkgElement = doc.createElement("jaxb:package");
+        pkgElement.setAttribute("name", pkgName);
+        annoElement.appendChild(appInfo);
+        appInfo.appendChild(schemaBindings);
+        schemaBindings.appendChild(pkgElement);
+        rootElement.appendChild(annoElement);
+        File tmpFile = null;
+        try {
+            tmpFile = FileUtils.createTempFile("customzied", ".xsd");
+            FileOutputStream fout = new FileOutputStream(tmpFile);
+            DOMUtils.writeXml(rootElement, fout);
+            fout.close();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return tmpFile;
     }
 }

Added: incubator/cxf/trunk/tools/common/src/test/java/org/apache/cxf/tools/common/model/JavaInterfaceTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/common/src/test/java/org/apache/cxf/tools/common/model/JavaInterfaceTest.java?view=auto&rev=533072
==============================================================================
--- incubator/cxf/trunk/tools/common/src/test/java/org/apache/cxf/tools/common/model/JavaInterfaceTest.java (added)
+++ incubator/cxf/trunk/tools/common/src/test/java/org/apache/cxf/tools/common/model/JavaInterfaceTest.java Fri Apr 27 05:08:24 2007
@@ -0,0 +1,34 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.tools.common.model;
+
+import junit.framework.TestCase;
+import org.junit.Test;
+
+public class JavaInterfaceTest extends TestCase {
+    @Test
+    public void testSetFullClassName() throws Exception {
+        String fullName = "org.apache.cxf.tools.common.model.JavaInterface";
+        JavaInterface intf = new JavaInterface();
+        intf.setFullClassName(fullName);
+        assertEquals("org.apache.cxf.tools.common.model", intf.getPackageName());
+        assertEquals("JavaInterface", intf.getName());
+    }
+}

Modified: incubator/cxf/trunk/tools/javato/pom.xml
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/javato/pom.xml?view=diff&rev=533072&r1=533071&r2=533072
==============================================================================
--- incubator/cxf/trunk/tools/javato/pom.xml (original)
+++ incubator/cxf/trunk/tools/javato/pom.xml Fri Apr 27 05:08:24 2007
@@ -118,6 +118,22 @@
             <scope>test</scope>
         </dependency>
 
+        <dependency>
+            <groupId>com.sun.xml.bind</groupId>
+            <artifactId>jaxb-xjc</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.sun.xml.bind</groupId>
+            <artifactId>jaxb-impl</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.cxf</groupId>
+            <artifactId>cxf-tools-wsdlto-databinding-jaxb</artifactId>
+	    <version>${project.version}</version>
+        </dependency>
+
+
     </dependencies>
 
     <scm>

Modified: incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/generator/AbstractGenerator.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/generator/AbstractGenerator.java?view=diff&rev=533072&r1=533071&r2=533072
==============================================================================
--- incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/generator/AbstractGenerator.java (original)
+++ incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/generator/AbstractGenerator.java Fri Apr 27 05:08:24 2007
@@ -25,6 +25,15 @@
 public abstract class AbstractGenerator<T> {
     private ServiceInfo service;
     private boolean allowImports;
+    private File outputdir;
+
+    public void setOutputBase(File out) {
+        this.outputdir = out;
+    }
+
+    public File getOutputBase() {
+        return this.outputdir;
+    }
 
     public void setServiceModel(ServiceInfo s) {
         this.service = s;

Added: incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/generator/wsdl11/JCodeModelFilter.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/generator/wsdl11/JCodeModelFilter.java?view=auto&rev=533072
==============================================================================
--- incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/generator/wsdl11/JCodeModelFilter.java (added)
+++ incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/generator/wsdl11/JCodeModelFilter.java Fri Apr 27 05:08:24 2007
@@ -0,0 +1,75 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.tools.java2wsdl.generator.wsdl11;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+import com.sun.codemodel.JCodeModel;
+import com.sun.codemodel.JDefinedClass;
+import com.sun.codemodel.JPackage;
+import org.apache.cxf.tools.common.model.JavaClass;
+
+public final class JCodeModelFilter {
+    final JCodeModel model;
+
+    public JCodeModelFilter(JCodeModel m) {
+        this.model = m;
+    }
+
+    public void include(List<JavaClass> included) {
+        Set<String> includedPackages = new HashSet<String>();
+        List<String> includedClasses = new ArrayList<String>();
+        
+        for (JavaClass clz : included) {
+            includedPackages.add(clz.getPackageName());
+            includedClasses.add(clz.getFullClassName());
+        }
+
+        for (Iterator<JPackage> iter = this.model.packages(); iter.hasNext();) {
+            JPackage pkg = iter.next();
+            if (!includedPackages.contains(pkg.name())) {
+                remove(pkg);
+            } else {
+                remove(pkg, includedClasses);
+            }
+        }
+    }
+
+    private void remove(JPackage pkg, List<String> includedClasses) {
+        List<JDefinedClass> toRemove = new ArrayList<JDefinedClass>();
+        for (Iterator<JDefinedClass> iter = pkg.classes(); iter.hasNext();) {
+            JDefinedClass clz = iter.next();
+            if (!includedClasses.contains(pkg.name() + "." + clz.name())) {
+                toRemove.add(clz);
+            }
+        }
+        for (JDefinedClass clz : toRemove) {
+            pkg.remove(clz);
+        }
+    }
+    
+    private void remove(JPackage pkg) {
+        remove(pkg, new ArrayList<String>());
+    }
+}

Modified: incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/generator/wsdl11/WSDL11Generator.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/generator/wsdl11/WSDL11Generator.java?view=diff&rev=533072&r1=533071&r2=533072
==============================================================================
--- incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/generator/wsdl11/WSDL11Generator.java (original)
+++ incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/generator/wsdl11/WSDL11Generator.java Fri Apr 27 05:08:24 2007
@@ -35,7 +35,18 @@
 
 public class WSDL11Generator extends AbstractGenerator<Definition> {
 
-    public Definition generate(File file) {
+    public Definition generate(final File dir) {
+        File file = getOutputBase();
+        if (file == null && dir != null) {
+            if (dir.isDirectory()) {
+                file = new File(dir, getServiceModel().getName().getLocalPart() + ".wsdl");
+            } else {
+                file = dir;
+            }
+        } else if (dir == null) {
+            file = new File(getServiceModel().getName().getLocalPart() + ".wsdl");
+        }
+
         createOutputDir(file);
         Definition def = null;
         try {

Added: incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/generator/wsdl11/WrapperBeanGenerator.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/generator/wsdl11/WrapperBeanGenerator.java?view=auto&rev=533072
==============================================================================
--- incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/generator/wsdl11/WrapperBeanGenerator.java (added)
+++ incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/generator/wsdl11/WrapperBeanGenerator.java Fri Apr 27 05:08:24 2007
@@ -0,0 +1,162 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.tools.java2wsdl.generator.wsdl11;
+
+import java.io.File;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import javax.xml.namespace.QName;
+
+import org.w3c.dom.Element;
+import org.xml.sax.InputSource;
+
+import com.sun.codemodel.JCodeModel;
+import com.sun.tools.xjc.api.S2JJAXBModel;
+import com.sun.tools.xjc.api.XJC;
+import com.sun.tools.xjc.api.impl.s2j.SchemaCompilerImpl;
+
+import org.apache.cxf.service.model.OperationInfo;
+import org.apache.cxf.service.model.SchemaInfo;
+import org.apache.cxf.service.model.ServiceInfo;
+import org.apache.cxf.tools.common.model.JavaClass;
+import org.apache.cxf.tools.java2wsdl.generator.AbstractGenerator;
+import org.apache.cxf.tools.java2wsdl.processor.internal.jaxws.RequestWrapper;
+import org.apache.cxf.tools.java2wsdl.processor.internal.jaxws.ResponseWrapper;
+import org.apache.cxf.tools.util.JAXBUtils;
+import org.apache.cxf.tools.wsdlto.databinding.jaxb.JAXBBindErrorListener;
+import org.apache.cxf.tools.wsdlto.databinding.jaxb.TypesCodeWriter;
+
+
+public final class WrapperBeanGenerator extends AbstractGenerator<File> {
+
+    private Class<?> serviceClass;
+    
+    public File generate(final File sourcedir) {
+        File dir = getOutputBase();
+        if (dir == null) {
+            dir = sourcedir;
+        }
+        if (dir == null) {
+            dir = new File("./");
+        }
+        generateWrapperBeanClasses(getServiceModel(), dir);
+        return sourcedir;
+    }
+
+
+    public Class<?> getServiceClass() {
+        return this.serviceClass;
+    }
+    
+    public void setServiceClass(Class<?> clz) {
+        this.serviceClass = clz;
+    }
+    
+    private List<InputSource> getExternalSchemaBindings(final Map<String, String> mapping) {
+        List<InputSource> externalSchemaBinding = new ArrayList<InputSource>();
+
+        for (String ns : mapping.keySet()) {
+            File file = JAXBUtils.getPackageMappingSchemaBindingFile(ns, mapping.get(ns));
+            externalSchemaBinding.add(new InputSource(file.toURI().toString()));
+        }
+        return externalSchemaBinding;
+    }
+    
+    private void generateWrapperBeanClasses(final ServiceInfo serviceInfo, final File dir) {
+        List<JavaClass> wrapperClasses = new ArrayList<JavaClass>();
+        Map<String, String> nsPkgMapping = new HashMap<String, String>();
+        
+        for (OperationInfo op : serviceInfo.getInterface().getOperations()) {
+            if (op.getUnwrappedOperation() != null) {
+                if (op.hasInput()) {
+                    QName wrapperBeanName = op.getInput().getMessageParts().get(0).getElementQName();
+                    
+                    RequestWrapper requestWrapper = new RequestWrapper();
+                    requestWrapper.setName(wrapperBeanName);
+                    requestWrapper.setMethod((Method) op.getProperty(Method.class.getName()));
+                    JavaClass jClass = requestWrapper.getJavaClass();
+
+                    if (requestWrapper.isWrapperAbsent()) {
+                        nsPkgMapping.put(wrapperBeanName.getNamespaceURI(), jClass.getPackageName());
+                    }
+
+                    if (requestWrapper.isWrapperBeanClassNotExist()) {
+                        wrapperClasses.add(jClass);
+                    }
+                }
+                if (op.hasOutput()) {
+                    QName wrapperBeanName = op.getOutput().getMessageParts().get(0).getElementQName();
+                    ResponseWrapper responseWrapper = new ResponseWrapper();
+                    responseWrapper.setName(wrapperBeanName);
+                    responseWrapper.setMethod((Method) op.getProperty(Method.class.getName()));
+                    JavaClass jClass = responseWrapper.getJavaClass();
+
+                    if (responseWrapper.isWrapperAbsent()) {
+                        nsPkgMapping.put(wrapperBeanName.getNamespaceURI(), jClass.getPackageName());
+                    }
+
+                    if (responseWrapper.isWrapperBeanClassNotExist()) {
+                        wrapperClasses.add(jClass);
+                    }
+                }
+            }
+        }
+
+        if (wrapperClasses.isEmpty()) {
+            return;
+        }
+
+        
+        Map<String, Element> schemas = new HashMap<String, Element>();
+        for (SchemaInfo s : serviceInfo.getSchemas()) {
+            schemas.put(s.getSchema().getTargetNamespace(), s.getElement());
+        }
+
+        SchemaCompilerImpl schemaCompiler = (SchemaCompilerImpl)XJC.createSchemaCompiler();
+        JAXBBindErrorListener listener = new JAXBBindErrorListener(false);
+        schemaCompiler.setErrorListener(listener);
+
+        Set<String> keys = schemas.keySet();
+        for (String key : keys) {
+            schemaCompiler.parseSchema(key, schemas.get(key));
+        }
+        for (InputSource is : getExternalSchemaBindings(nsPkgMapping)) {
+            schemaCompiler.parseSchema(is);
+        }
+
+        S2JJAXBModel rawJaxbModelGenCode = schemaCompiler.bind();
+        JCodeModel jcodeModel = rawJaxbModelGenCode.generateCode(null, null);
+
+        JCodeModelFilter filter = new JCodeModelFilter(jcodeModel);
+        filter.include(wrapperClasses);
+        
+        try {
+            createOutputDir(dir);
+            jcodeModel.build(new TypesCodeWriter(dir, new ArrayList<String>()));
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+    
+}

Modified: incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/java2wsdl.xml
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/java2wsdl.xml?view=diff&rev=533072&r1=533071&r2=533072
==============================================================================
--- incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/java2wsdl.xml (original)
+++ incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/java2wsdl.xml Fri Apr 27 05:08:24 2007
@@ -57,6 +57,14 @@
 				</associatedArgument>
 			</option>
 
+			<option id="sourcedir" maxOccurs="1">
+			    <annotation>The directory in which the generated source files are placed</annotation>
+			    <switch>s</switch>
+			    <associatedArgument placement="afterSpace">
+				<annotation>source-directory</annotation>
+			    </associatedArgument>
+			</option>
+			
 			<option id="classpath" maxOccurs="1">
 				<annotation>
 					Specify the SEI and types class search path of

Modified: incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/processor/JavaToProcessor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/processor/JavaToProcessor.java?view=diff&rev=533072&r1=533071&r2=533072
==============================================================================
--- incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/processor/JavaToProcessor.java (original)
+++ incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/processor/JavaToProcessor.java Fri Apr 27 05:08:24 2007
@@ -20,6 +20,8 @@
 package org.apache.cxf.tools.java2wsdl.processor;
 
 import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.logging.Logger;
 import javax.xml.namespace.QName;
 import javax.xml.ws.BindingType;
@@ -44,6 +46,7 @@
 import org.apache.cxf.tools.common.WSDLConstants;
 import org.apache.cxf.tools.java2wsdl.generator.AbstractGenerator;
 import org.apache.cxf.tools.java2wsdl.generator.WSDLGeneratorFactory;
+import org.apache.cxf.tools.java2wsdl.generator.wsdl11.WrapperBeanGenerator;
 import org.apache.cxf.tools.java2wsdl.processor.internal.ServiceBuilder;
 import org.apache.cxf.tools.java2wsdl.processor.internal.ServiceBuilderFactory;
 import org.apache.cxf.tools.util.AnnotationUtil;
@@ -52,35 +55,61 @@
     private static final Logger LOG = LogUtils.getL7dLogger(JavaToProcessor.class);
     private static final String DEFAULT_ADDRESS = "http://localhost:9090/hello";
     private ToolContext context;
+    private final List<AbstractGenerator> generators = new ArrayList<AbstractGenerator>();
 
+    private void customize(ServiceInfo service) {
+        if (context.containsKey(ToolConstants.CFG_TNS)) {
+            String ns = (String)context.get(ToolConstants.CFG_TNS);
+            service.setTargetNamespace(ns);
+        }
+        
+        if (context.containsKey(ToolConstants.CFG_PORT)) {
+            String portName = (String)context.get(ToolConstants.CFG_PORT);
+            EndpointInfo einfo = service.getEndpoints().iterator().next();
+            QName qn = new QName(einfo.getName().getNamespaceURI(), portName); 
+            einfo.setName(qn);
+        }
+    }
+    
     public void process() throws ToolException {
         ServiceBuilder builder = getServiceBuilder();
         ServiceInfo service = builder.build();
+
+        customize(service);
+
+        File wsdlFile = getOutputFile(builder.getOutputFile(),
+                                      service.getName().getLocalPart() + ".wsdl");
+
+        File outputDir = getOutputDir(wsdlFile);
+        
+        generators.add(getWSDLGenerator(wsdlFile));
+        generators.add(getWrapperBeanGenerator());
         
-        File output = getOutputFile(builder.getOutputFile(),
-                                    service.getName().getLocalPart() + ".wsdl");
-        generate(service, output);
+        generate(service, outputDir);
     }
 
-    public void generate(ServiceInfo service, File output) throws ToolException {
+    private AbstractGenerator getWrapperBeanGenerator() {
+        WrapperBeanGenerator generator = new WrapperBeanGenerator();
+        generator.setOutputBase(getSourceDir());
+        generator.setServiceClass(getServiceClass());
+        return generator;
+    }
+
+    private AbstractGenerator getWSDLGenerator(final File wsdlFile) {
         WSDLGeneratorFactory factory = WSDLGeneratorFactory.getInstance();
         factory.setWSDLVersion(getWSDLVersion());
 
         AbstractGenerator generator = factory.newGenerator();
         generator.setAllowImports(context.containsKey(ToolConstants.CFG_CREATE_XSD_IMPORTS));
-        if (context.containsKey(ToolConstants.CFG_TNS)) {
-            String ns = (String)context.get(ToolConstants.CFG_TNS);
-            service.setTargetNamespace(ns);
-        }
-        
-        if (context.containsKey(ToolConstants.CFG_PORT)) {
-            String portName = (String)context.get(ToolConstants.CFG_PORT);
-            EndpointInfo einfo = service.getEndpoints().iterator().next();
-            QName qn = new QName(einfo.getName().getNamespaceURI(), portName); 
-            einfo.setName(qn);
+        generator.setOutputBase(wsdlFile);
+        return generator;
+    }
+
+    public void generate(ServiceInfo service, File output) throws ToolException {
+        for (AbstractGenerator generator : generators) {
+            generator.setServiceModel(service);
+            generator.generate(output);
         }
-        generator.setServiceModel(service);
-        generator.generate(output);
     }
 
     public ServiceBuilder getServiceBuilder() throws ToolException {
@@ -136,7 +165,19 @@
         return true;
     }
 
-    protected File getOutputFile(File nameFromClz, String defaultOutputFile) {
+    private File getOutputDir(File wsdlLocation) {
+        String dir = (String)context.get(ToolConstants.CFG_OUTPUTDIR);
+        if (dir == null) {
+            if (wsdlLocation == null) {
+                dir = "./";
+            } else {
+                dir = wsdlLocation.getParent();
+            }
+        }
+        return new File(dir);
+    }
+    
+    private File getOutputFile(File nameFromClz, String defaultOutputFile) {
         String output = (String) context.get(ToolConstants.CFG_OUTPUTFILE);
         String dir = (String)context.get(ToolConstants.CFG_OUTPUTDIR);
         if (dir == null) {
@@ -181,6 +222,14 @@
     public String getServiceName() {
         return (String) this.context.get(ToolConstants.CFG_SERVICENAME);
     }
+
+    public File getSourceDir() {
+        String dir = (String) this.context.get(ToolConstants.CFG_SOURCEDIR);
+        if (StringUtils.isEmpty(dir)) {
+            return null;
+        }
+        return new File(dir);
+    }
     
     public Bus getBus() {
         return BusFactory.getDefaultBus();
@@ -201,4 +250,5 @@
             System.setProperty("java.class.path", newCp + File.pathSeparator + classpath);
         }
     }
+
 }

Modified: incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/processor/internal/jaxws/Messages.properties
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/processor/internal/jaxws/Messages.properties?view=diff&rev=533072&r1=533071&r2=533072
==============================================================================
--- incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/processor/internal/jaxws/Messages.properties (original)
+++ incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/processor/internal/jaxws/Messages.properties Fri Apr 27 05:08:24 2007
@@ -1,3 +1,4 @@
 LOAD_WRAPPER_CLASS_FAILED = Can not load wrapper class {0}, please check the @RequestWrapper or @ResponseWrapper and also check the class is in your classpath
 WRAPPER_CLASS_NOT_EXIST = Wrapper class not exist
-SOAPBinding_RPC_ON_METHOD = Method [{0}] processing error : SOAPBinding annotation can not be placed on method with RPC style 
\ No newline at end of file
+SOAPBinding_RPC_ON_METHOD = Method [{0}] processing error : SOAPBinding annotation can not be placed on method with RPC style 
+LOADING_WRAPPER_CLASS = Tring to load wrapper class {0}
\ No newline at end of file

Added: incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/processor/internal/jaxws/RequestWrapper.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/processor/internal/jaxws/RequestWrapper.java?view=auto&rev=533072
==============================================================================
--- incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/processor/internal/jaxws/RequestWrapper.java (added)
+++ incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/processor/internal/jaxws/RequestWrapper.java Fri Apr 27 05:08:24 2007
@@ -0,0 +1,51 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.tools.java2wsdl.processor.internal.jaxws;
+
+import java.lang.reflect.Method;
+
+import org.apache.cxf.common.util.StringUtils;
+import org.apache.cxf.tools.common.model.JavaClass;
+import org.apache.cxf.tools.util.AnnotationUtil;
+
+public class RequestWrapper extends Wrapper {
+    public boolean isWrapperAbsent(final Method method) {
+        javax.xml.ws.RequestWrapper reqWrapper = method.getAnnotation(javax.xml.ws.RequestWrapper.class);
+        return reqWrapper == null || StringUtils.isEmpty(reqWrapper.className());
+    }
+
+    public JavaClass getWrapperBeanClass(final Method method) {
+        javax.xml.ws.RequestWrapper reqWrapper = method.getAnnotation(javax.xml.ws.RequestWrapper.class);
+        String reqClassName = "";
+        String reqNs = null;
+        
+        if (!isWrapperAbsent(method)) {
+            reqClassName = reqWrapper.className().length() > 0 ? reqWrapper.className() : reqClassName;
+            reqNs = reqWrapper.targetNamespace();
+        } else {
+            reqClassName = getPackageName(method) + ".jaxws." + AnnotationUtil.capitalize(method.getName());
+        }
+
+        JavaClass jClass = new JavaClass();
+        jClass.setFullClassName(reqClassName);
+        jClass.setNamespace(reqNs);
+        return jClass;
+    }
+}

Added: incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/processor/internal/jaxws/ResponseWrapper.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/processor/internal/jaxws/ResponseWrapper.java?view=auto&rev=533072
==============================================================================
--- incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/processor/internal/jaxws/ResponseWrapper.java (added)
+++ incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/processor/internal/jaxws/ResponseWrapper.java Fri Apr 27 05:08:24 2007
@@ -0,0 +1,54 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.tools.java2wsdl.processor.internal.jaxws;
+
+import java.lang.reflect.Method;
+
+import org.apache.cxf.common.util.StringUtils;
+import org.apache.cxf.tools.common.model.JavaClass;
+import org.apache.cxf.tools.util.AnnotationUtil;
+
+public final class ResponseWrapper extends Wrapper {
+    public boolean isWrapperAbsent(final Method method) {
+        javax.xml.ws.ResponseWrapper resWrapper = method.getAnnotation(javax.xml.ws.ResponseWrapper.class);
+        return resWrapper == null || StringUtils.isEmpty(resWrapper.className());
+    }
+
+
+    public JavaClass getWrapperBeanClass(final Method method) {
+        javax.xml.ws.ResponseWrapper resWrapper = method.getAnnotation(javax.xml.ws.ResponseWrapper.class);
+        String resClassName = "";
+        String resNs = null;
+        
+        if (!isWrapperAbsent(method)) {
+            resClassName = resWrapper.className();
+            resNs = resWrapper.targetNamespace();
+        } else {
+            resClassName = getPackageName(method) + ".jaxws." 
+                + AnnotationUtil.capitalize(method.getName())
+                + "Response";
+        }
+        
+        JavaClass jClass = new JavaClass();
+        jClass.setFullClassName(resClassName);
+        jClass.setNamespace(resNs);
+        return jClass;
+    }
+}

Modified: incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/processor/internal/jaxws/Wrapper.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/processor/internal/jaxws/Wrapper.java?view=diff&rev=533072&r1=533071&r2=533072
==============================================================================
--- incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/processor/internal/jaxws/Wrapper.java (original)
+++ incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/processor/internal/jaxws/Wrapper.java Fri Apr 27 05:08:24 2007
@@ -19,35 +19,103 @@
 
 package org.apache.cxf.tools.java2wsdl.processor.internal.jaxws;
 
+import java.lang.reflect.Method;
 import java.util.logging.Level;
 import java.util.logging.Logger;
+import javax.xml.namespace.QName;
 
 import org.apache.cxf.common.i18n.Message;
 import org.apache.cxf.common.logging.LogUtils;
 import org.apache.cxf.tools.common.ToolException;
+import org.apache.cxf.tools.common.model.JavaClass;
 import org.apache.cxf.tools.util.AnnotationUtil;
+import org.apache.cxf.tools.util.NameUtil;
+import org.apache.cxf.tools.util.URIParserUtil;
 
 public class Wrapper {
     private static final Logger LOG = LogUtils.getL7dLogger(Wrapper.class);
-    protected String className;
-    protected String localName;
-    protected String targetNamespace;
-    protected String wrapperClass;
-
-    public Wrapper() {
+    private QName name;
+    private JavaClass javaClass;
+    private Method mehtod;
+
+    public void setMethod(Method m) {
+        this.mehtod = m;
+    }
+
+    public void setName(QName n) {
+        this.name = n;
+    }
+
+    public JavaClass getWrapperBeanClass(Method m) {
+        return new JavaClass();
     }
+    
+    protected JavaClass getWrapperBeanClass(QName wrapperBeanName) {
+        JavaClass jClass = new JavaClass();
+        if (wrapperBeanName == null) {
+            return jClass;
+        }
 
-    public Wrapper(String clz, String name, String ns) {
-        this.className = clz;
-        this.localName = name;
-        this.targetNamespace = ns;
+        String ns = wrapperBeanName.getNamespaceURI();
+        jClass.setNamespace(ns);
+        jClass.setPackageName(URIParserUtil.getPackageName(ns));
+        jClass.setName(NameUtil.mangleNameToClassName(wrapperBeanName.getLocalPart()));
+        return jClass;
+    }
+
+    private JavaClass merge(final JavaClass c1, final JavaClass c2) {
+        if (c1.getNamespace() == null) {
+            c1.setNamespace(c2.getNamespace());
+        }
+
+        if (c1.getPackageName() == null) {
+            c1.setPackageName(c2.getPackageName());
+        }
+
+        if (c1.getName() == null) {
+            c1.setName(c2.getName());
+        }
+        return c1;
+    }
+    
+    public JavaClass getJavaClass() {
+        if (javaClass == null) {
+            JavaClass jClass1 = getWrapperBeanClass(this.name);
+            JavaClass jClass2 = getWrapperBeanClass(this.mehtod);
+            javaClass = merge(jClass2, jClass1);
+        }
+        return javaClass;
+    }
+
+    protected String getPackageName(final Method m) {
+        return m.getDeclaringClass().getPackage().getName();
+    }
+
+    public boolean isWrapperAbsent() {
+        return isWrapperAbsent(this.mehtod);
+    }
+
+    public boolean isWrapperAbsent(final Method m) {
+        return false;
+    }
+
+    public boolean isWrapperBeanClassNotExist() {
+        try {
+            Message msg = new Message("LOADING_WRAPPER_CLASS", LOG, getJavaClass().getFullClassName());
+            LOG.log(Level.INFO, msg.toString());
+            getWrapperClass();
+            return false;
+        } catch (ToolException e) {
+            return true;
+        }
     }
 
     public Class getWrapperClass() {
         try {
-            return AnnotationUtil.loadClass(className, getClass().getClassLoader());
+            return AnnotationUtil.loadClass(getJavaClass().getFullClassName(),
+                                            getClass().getClassLoader());
         } catch (Exception e) {
-            Message msg = new Message("LOAD_WRAPPER_CLASS_FAILED", LOG, className);
+            Message msg = new Message("LOAD_WRAPPER_CLASS_FAILED", LOG, getJavaClass().getFullClassName());
             LOG.log(Level.WARNING, msg.toString());
             throw new ToolException(msg);
         }

Modified: incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/processor/internal/jaxws/WrapperUtil.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/processor/internal/jaxws/WrapperUtil.java?view=diff&rev=533072&r1=533071&r2=533072
==============================================================================
--- incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/processor/internal/jaxws/WrapperUtil.java (original)
+++ incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/processor/internal/jaxws/WrapperUtil.java Fri Apr 27 05:08:24 2007
@@ -22,63 +22,26 @@
 import java.lang.reflect.Method;
 
 import javax.jws.Oneway;
-import javax.xml.ws.RequestWrapper;
-import javax.xml.ws.ResponseWrapper;
-
-import org.apache.cxf.common.util.StringUtils;
-import org.apache.cxf.tools.util.AnnotationUtil;
 
 public final class WrapperUtil {
     
     private WrapperUtil() {
     }
 
-    public static Wrapper getRequestWrapper(Method method) {
-        RequestWrapper reqWrapper = method.getAnnotation(RequestWrapper.class);
-        String reqClassName = "";
-        String reqName = method.getName();
-        String reqNS = null;
-        if (reqWrapper != null && !StringUtils.isEmpty(reqWrapper.className())) {
-            reqClassName = reqWrapper.className().length() > 0 ? reqWrapper.className() : reqClassName;
-        } else {
-            reqClassName = getPackageName(method) + ".jaxws." + AnnotationUtil.capitalize(method.getName());
-        }
-
-        return new Wrapper(reqClassName, reqName, reqNS);
-    }
-
-    public static Wrapper getResponseWrapper(Method method) {
-        ResponseWrapper resWrapper = method.getAnnotation(ResponseWrapper.class);
-        String resClassName = "";
-        // rule 3.5 suffix -"Response"
-        String resName = method.getName() + "Response";
-        String resNS = null;
-        if (resWrapper != null && !StringUtils.isEmpty(resWrapper.className())) {
-            resClassName = resWrapper.className();
-        } else {
-            resClassName = getPackageName(method) + ".jaxws." 
-                + AnnotationUtil.capitalize(method.getName())
-                + "Response";
-        }
-        return new Wrapper(resClassName, resName, resNS);
-    }
-
     public static boolean isWrapperClassExists(Method method) {
-        Wrapper requestWrapper = getRequestWrapper(method);
-        Wrapper responseWrapper = getResponseWrapper(method);
-        boolean isOneWay = method.isAnnotationPresent(Oneway.class);
+        Wrapper requestWrapper = new RequestWrapper();
+        requestWrapper.setMethod(method);
         try {
             requestWrapper.getWrapperClass();
+            boolean isOneWay = method.isAnnotationPresent(Oneway.class);
             if (!isOneWay) {
+                Wrapper responseWrapper = new ResponseWrapper();
+                responseWrapper.setMethod(method);
                 responseWrapper.getWrapperClass();
             }
         } catch (Exception e) {
             return false;
         }
         return true;
-    }
-
-    private static String getPackageName(Method method) {
-        return method.getDeclaringClass().getPackage().getName();
     }
 }

Added: incubator/cxf/trunk/tools/javato/src/test/java/org/apache/cxf/tools/fortest/withannotation/doc/Greeter.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/javato/src/test/java/org/apache/cxf/tools/fortest/withannotation/doc/Greeter.java?view=auto&rev=533072
==============================================================================
--- incubator/cxf/trunk/tools/javato/src/test/java/org/apache/cxf/tools/fortest/withannotation/doc/Greeter.java (added)
+++ incubator/cxf/trunk/tools/javato/src/test/java/org/apache/cxf/tools/fortest/withannotation/doc/Greeter.java Fri Apr 27 05:08:24 2007
@@ -0,0 +1,33 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.tools.fortest.withannotation.doc;
+
+import javax.jws.WebMethod;
+import javax.jws.WebService;
+import javax.xml.ws.RequestWrapper;
+import javax.xml.ws.ResponseWrapper;
+
+@WebService(name = "Hello")
+public interface Greeter {
+    @WebMethod
+    @RequestWrapper(className = "org.apache.cxf.tools.fortest.withannotation.doc.SayHi")
+    @ResponseWrapper(className = "org.apache.cxf.tools.fortest.withannotation.doc.SayHiResponse")
+    String sayHi();
+}

Modified: incubator/cxf/trunk/tools/javato/src/test/java/org/apache/cxf/tools/java2wsdl/processor/JavaToProcessorTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/javato/src/test/java/org/apache/cxf/tools/java2wsdl/processor/JavaToProcessorTest.java?view=diff&rev=533072&r1=533071&r2=533072
==============================================================================
--- incubator/cxf/trunk/tools/javato/src/test/java/org/apache/cxf/tools/java2wsdl/processor/JavaToProcessorTest.java (original)
+++ incubator/cxf/trunk/tools/javato/src/test/java/org/apache/cxf/tools/java2wsdl/processor/JavaToProcessorTest.java Fri Apr 27 05:08:24 2007
@@ -224,5 +224,53 @@
         String expectedFile = getClass().getResource("expected/my_hello_soap12.wsdl").getFile();
         assertFileEquals(new File(expectedFile), new File(output, "my_hello_soap12.wsdl"));
     }
+    @Test
+    public void testGenWrapperBeanClasses() throws Exception {
+        env.put(ToolConstants.CFG_CLASSNAME,
+                "org.apache.cxf.tools.fortest.classnoanno.docwrapped.Calculator");
+        env.put(ToolConstants.CFG_OUTPUTFILE, output.getPath() + "/my_calculator.wsdl");
+        
+        processor.setEnvironment(env);
+        processor.process();
+
+        String pkgBase = "org/apache/cxf/tools/fortest/classnoanno/docwrapped/jaxws";
+        File requestWrapperClass = new File(output, pkgBase + "/Add.java");
+        File responseWrapperClass = new File(output, pkgBase + "/AddResponse.java");
+        assertTrue(requestWrapperClass.exists());
+        assertTrue(responseWrapperClass.exists());
+    }
+
+    @Test
+    public void testNoNeedGenWrapperBeanClasses() throws Exception {
+        env.put(ToolConstants.CFG_CLASSNAME, "org.apache.cxf.tools.fortest.withannotation.doc.Stock");
+        env.put(ToolConstants.CFG_OUTPUTFILE, output.getPath() + "/my_stock.wsdl");
+        
+        processor.setEnvironment(env);
+        processor.process();
+
+        String pkgBase = "org/apache/cxf/tools/fortest/classnoanno/docwrapped/jaxws";
+        File requestWrapperClass = new File(output, pkgBase + "/Add.java");
+        File responseWrapperClass = new File(output, pkgBase + "/AddResponse.java");
+        assertFalse(requestWrapperClass.exists());
+        assertFalse(responseWrapperClass.exists());
+    }
+
+    @Test
+    public void testSetSourceDir() throws Exception {
+        env.put(ToolConstants.CFG_CLASSNAME,
+                "org.apache.cxf.tools.fortest.classnoanno.docwrapped.Calculator");
+        env.put(ToolConstants.CFG_OUTPUTFILE, output.getPath() + "/my_stock.wsdl");
+        env.put(ToolConstants.CFG_SOURCEDIR, output.getPath() + "/beans");
+        
+        processor.setEnvironment(env);
+        processor.process();
+
+        String pkgBase = "beans/org/apache/cxf/tools/fortest/classnoanno/docwrapped/jaxws";
+        File requestWrapperClass = new File(output, pkgBase + "/Add.java");
+        File responseWrapperClass = new File(output, pkgBase + "/AddResponse.java");
+        assertTrue(requestWrapperClass.exists());
+        assertTrue(responseWrapperClass.exists());
+    }
+
         
 }

Added: incubator/cxf/trunk/tools/javato/src/test/java/org/apache/cxf/tools/java2wsdl/processor/internal/jaxws/WrapperTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/javato/src/test/java/org/apache/cxf/tools/java2wsdl/processor/internal/jaxws/WrapperTest.java?view=auto&rev=533072
==============================================================================
--- incubator/cxf/trunk/tools/javato/src/test/java/org/apache/cxf/tools/java2wsdl/processor/internal/jaxws/WrapperTest.java (added)
+++ incubator/cxf/trunk/tools/javato/src/test/java/org/apache/cxf/tools/java2wsdl/processor/internal/jaxws/WrapperTest.java Fri Apr 27 05:08:24 2007
@@ -0,0 +1,109 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.tools.java2wsdl.processor.internal.jaxws;
+
+import java.lang.reflect.Method;
+import javax.xml.namespace.QName;
+
+import junit.framework.TestCase;
+import org.apache.cxf.tools.common.model.JavaClass;
+import org.junit.Test;
+
+public class WrapperTest extends TestCase {
+    @Test
+    public void testGetWrapperBeanClassFromQName() {
+        QName qname = new QName("http://cxf.apache.org", "sayHi");
+
+        Wrapper wrapper = new Wrapper();
+        wrapper.setName(qname);
+
+        JavaClass jClass = wrapper.getWrapperBeanClass(qname);
+
+        assertEquals("org.apache.cxf", jClass.getPackageName());
+        assertEquals("SayHi", jClass.getName());
+        assertEquals("http://cxf.apache.org", jClass.getNamespace());
+    }
+
+    @Test
+    public void testGetWrapperBeanClassFromMethod() throws Exception {
+        String pkgName = "org.apache.cxf.tools.fortest.classnoanno.docwrapped";
+        Class stockClass = Class.forName(pkgName + ".Stock");
+        Method method = stockClass.getMethod("getPrice", String.class);
+
+        Wrapper wrapper = new Wrapper();
+        wrapper.setMethod(method);
+
+        JavaClass jClass = wrapper.getWrapperBeanClass(method);
+        assertNotNull(jClass);
+        assertNull(jClass.getPackageName());
+        assertNull(jClass.getName());
+
+        wrapper = new RequestWrapper();
+        jClass = wrapper.getWrapperBeanClass(method);
+        assertEquals("GetPrice", jClass.getName());
+        assertEquals(pkgName + ".jaxws", jClass.getPackageName());
+
+        wrapper = new ResponseWrapper();
+        jClass = wrapper.getWrapperBeanClass(method);
+        assertEquals("GetPriceResponse", jClass.getName());
+        assertEquals(pkgName + ".jaxws", jClass.getPackageName());
+    }
+    
+    @Test
+    public void testIsWrapperBeanClassNotExist() throws Exception {
+        String pkgName = "org.apache.cxf.tools.fortest.classnoanno.docwrapped";
+        Class stockClass = Class.forName(pkgName + ".Stock");
+        Method method = stockClass.getMethod("getPrice", String.class);
+        
+        Wrapper wrapper = new RequestWrapper();
+        wrapper.setMethod(method);
+        assertTrue(wrapper.isWrapperAbsent());
+        assertFalse(wrapper.isWrapperBeanClassNotExist());
+        assertEquals(pkgName + ".jaxws", wrapper.getJavaClass().getPackageName());
+        assertEquals("GetPrice", wrapper.getJavaClass().getName());
+        
+        pkgName = "org.apache.cxf.tools.fortest.withannotation.doc";
+        stockClass = Class.forName(pkgName + ".Stock");
+        method = stockClass.getMethod("getPrice", String.class);
+
+        wrapper = new RequestWrapper();
+        wrapper.setMethod(method);
+        assertFalse(wrapper.isWrapperAbsent());
+        assertFalse(wrapper.isWrapperBeanClassNotExist());
+        assertEquals(pkgName + ".jaxws", wrapper.getJavaClass().getPackageName());
+        assertEquals("GetPrice", wrapper.getJavaClass().getName());
+
+        pkgName = "org.apache.cxf.tools.fortest.withannotation.doc";
+        Class clz = Class.forName(pkgName + ".Greeter");
+        method = clz.getMethod("sayHi");
+
+        wrapper = new RequestWrapper();
+        wrapper.setMethod(method);
+        assertFalse(wrapper.isWrapperAbsent());
+        assertFalse(wrapper.isWrapperBeanClassNotExist());
+        assertEquals(pkgName, wrapper.getJavaClass().getPackageName());
+        assertEquals("SayHi", wrapper.getJavaClass().getName());
+
+        wrapper = new ResponseWrapper();
+        wrapper.setMethod(method);
+        assertEquals(pkgName, wrapper.getJavaClass().getPackageName());
+        assertEquals("SayHiResponse", wrapper.getJavaClass().getName());
+    }
+}

Modified: incubator/cxf/trunk/tools/javato/src/test/java/org/apache/cxf/tools/java2wsdl/processor/internal/jaxws/WrapperUtilTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/javato/src/test/java/org/apache/cxf/tools/java2wsdl/processor/internal/jaxws/WrapperUtilTest.java?view=diff&rev=533072&r1=533071&r2=533072
==============================================================================
--- incubator/cxf/trunk/tools/javato/src/test/java/org/apache/cxf/tools/java2wsdl/processor/internal/jaxws/WrapperUtilTest.java (original)
+++ incubator/cxf/trunk/tools/javato/src/test/java/org/apache/cxf/tools/java2wsdl/processor/internal/jaxws/WrapperUtilTest.java Fri Apr 27 05:08:24 2007
@@ -21,6 +21,7 @@
 
 import java.lang.reflect.Method;
 import junit.framework.TestCase;
+import org.junit.Test;
 
 public class WrapperUtilTest extends TestCase {
     String pkgName = "org.apache.cxf.tools.fortest.classnoanno.docwrapped";
@@ -34,26 +35,12 @@
         assertNotNull(method);
     }
 
-    public void testGetRequestWrapper() {
-        Wrapper wrapper = WrapperUtil.getRequestWrapper(method);
-        assertNotNull(wrapper);
-        assertEquals(pkgName + ".jaxws.GetPrice", wrapper.className);
-        assertEquals("getPrice", wrapper.localName);
-        assertNull(wrapper.targetNamespace);
-    }
-
-    public void testGetResponseWrapper() {
-        Wrapper wrapper = WrapperUtil.getResponseWrapper(method);
-        assertNotNull(wrapper);
-        assertEquals(pkgName + ".jaxws.GetPriceResponse", wrapper.className);
-        assertEquals("getPriceResponse", wrapper.localName);
-        assertNull(wrapper.targetNamespace);
-    }
-
+    @Test
     public void testIsWrapperClassExists() {
         assertTrue(WrapperUtil.isWrapperClassExists(method));
     }
 
+    @Test
     public void testWrapperClassNotExists() throws Exception {
         Class helloClass = Class.forName("org.apache.cxf.tools.fortest.withannotation.doc.HelloWrapped");
         assertNotNull(helloClass);

Modified: incubator/cxf/trunk/tools/wsdlto/databinding/jaxb/src/main/java/org/apache/cxf/tools/wsdlto/databinding/jaxb/JAXBBindErrorListener.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/wsdlto/databinding/jaxb/src/main/java/org/apache/cxf/tools/wsdlto/databinding/jaxb/JAXBBindErrorListener.java?view=diff&rev=533072&r1=533071&r2=533072
==============================================================================
--- incubator/cxf/trunk/tools/wsdlto/databinding/jaxb/src/main/java/org/apache/cxf/tools/wsdlto/databinding/jaxb/JAXBBindErrorListener.java (original)
+++ incubator/cxf/trunk/tools/wsdlto/databinding/jaxb/src/main/java/org/apache/cxf/tools/wsdlto/databinding/jaxb/JAXBBindErrorListener.java Fri Apr 27 05:08:24 2007
@@ -20,17 +20,14 @@
 package org.apache.cxf.tools.wsdlto.databinding.jaxb;
 import com.sun.tools.xjc.api.ErrorListener;
 
-import org.apache.cxf.tools.common.ToolContext;
 import org.apache.cxf.tools.common.ToolException;
 
-
-
 public class JAXBBindErrorListener implements ErrorListener {
-    private ToolContext env;
+    private boolean isVerbose;
     private String prefix = "Thrown by JAXB : ";
 
-    public JAXBBindErrorListener(ToolContext penv) {
-        env = penv;
+    public JAXBBindErrorListener(boolean verbose) {
+        isVerbose = verbose;
     }
 
     public void error(org.xml.sax.SAXParseException exception) {
@@ -43,13 +40,13 @@
     }
 
     public void info(org.xml.sax.SAXParseException exception) {
-        if (this.env.isVerbose()) {
+        if (this.isVerbose) {
             System.out.println("JAXB Info: " + exception.toString());
         }
     }
 
     public void warning(org.xml.sax.SAXParseException exception) {
-        if (this.env.isVerbose()) {
+        if (this.isVerbose) {
             System.err.println("JAXB parsing schema warning " + exception.toString());
         }
     }

Modified: incubator/cxf/trunk/tools/wsdlto/databinding/jaxb/src/main/java/org/apache/cxf/tools/wsdlto/databinding/jaxb/JAXBDataBinding.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/wsdlto/databinding/jaxb/src/main/java/org/apache/cxf/tools/wsdlto/databinding/jaxb/JAXBDataBinding.java?view=diff&rev=533072&r1=533071&r2=533072
==============================================================================
--- incubator/cxf/trunk/tools/wsdlto/databinding/jaxb/src/main/java/org/apache/cxf/tools/wsdlto/databinding/jaxb/JAXBDataBinding.java (original)
+++ incubator/cxf/trunk/tools/wsdlto/databinding/jaxb/src/main/java/org/apache/cxf/tools/wsdlto/databinding/jaxb/JAXBDataBinding.java Fri Apr 27 05:08:24 2007
@@ -19,7 +19,6 @@
 package org.apache.cxf.tools.wsdlto.databinding.jaxb;
 
 import java.io.File;
-import java.io.FileOutputStream;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
@@ -49,12 +48,12 @@
 import org.apache.cxf.common.i18n.Message;
 import org.apache.cxf.common.logging.LogUtils;
 import org.apache.cxf.common.util.StringUtils;
-import org.apache.cxf.helpers.DOMUtils;
 import org.apache.cxf.helpers.FileUtils;
 import org.apache.cxf.tools.common.ToolConstants;
 import org.apache.cxf.tools.common.ToolContext;
 import org.apache.cxf.tools.common.ToolException;
 import org.apache.cxf.tools.util.ClassCollector;
+import org.apache.cxf.tools.util.JAXBUtils;
 import org.apache.cxf.tools.wsdlto.core.DataBindingProfile;
 
 public class JAXBDataBinding implements DataBindingProfile {
@@ -73,7 +72,7 @@
 
         schemaCompiler.setClassNameAllocator(allocator);
 
-        JAXBBindErrorListener listener = new JAXBBindErrorListener(context);
+        JAXBBindErrorListener listener = new JAXBBindErrorListener(context.isVerbose());
         schemaCompiler.setErrorListener(listener);
         // Collection<SchemaInfo> schemas = serviceInfo.getSchemas();
         List<InputSource> jaxbBindings = context.getJaxbBindingFile();
@@ -101,7 +100,7 @@
         } else {
             Map<String, String> nsPkgMap = context.getNamespacePackageMap();
             for (String ns : nsPkgMap.keySet()) {
-                File file = getCustomizedSchemaElement(ns, nsPkgMap.get(ns));
+                File file = JAXBUtils.getPackageMappingSchemaBindingFile(ns, nsPkgMap.get(ns));
                 InputSource ins = new InputSource(file.toURI().toString());
                 schemaCompiler.parseSchema(ins);
                 FileUtils.delete(file);
@@ -269,40 +268,5 @@
         return clone;
     }
 
-    /**
-     * Create the jaxb binding file to customize namespace to package mapping
-     * 
-     * @param namespace
-     * @param pkgName
-     * @return file
-     */
-    public File getCustomizedSchemaElement(String namespace, String pkgName) {
-        Document doc = DOMUtils.createDocument();
-        Element rootElement = doc.createElement("schema");
-        rootElement.setAttribute("xmlns", ToolConstants.SCHEMA_URI);
-        rootElement.setAttribute("xmlns:jaxb", ToolConstants.NS_JAXB_BINDINGS);
-        rootElement.setAttribute("jaxb:version", "1.0");
-        rootElement.setAttribute("targetNamespace", namespace);
-        Element annoElement = doc.createElement("annotation");
-        Element appInfo = doc.createElement("appinfo");
-        Element schemaBindings = doc.createElement("jaxb:schemaBindings");
-        Element pkgElement = doc.createElement("jaxb:package");
-        pkgElement.setAttribute("name", pkgName);
-        annoElement.appendChild(appInfo);
-        appInfo.appendChild(schemaBindings);
-        schemaBindings.appendChild(pkgElement);
-        rootElement.appendChild(annoElement);
-        File tmpFile = null;
-        try {
-            tmpFile = File.createTempFile("customzied", ".xsd");
-            FileOutputStream fout = new FileOutputStream(tmpFile);
-            DOMUtils.writeXml(rootElement, fout);
-            fout.close();
-        } catch (Exception e) {
-            Message msg = new Message("FAIL_TO_CREATE_JAXBBINIDNG_FILE", LOG);
-            throw new ToolException(msg, e);
-        }
-        return tmpFile;
-    }
 
 }