Author: jason.greene(a)jboss.com
Date: 2007-01-31 14:44:24 -0500 (Wed, 31 Jan 2007)
New Revision: 2221
Added:
trunk/build/etc/wsimport.bat
trunk/build/etc/wsimport.sh
trunk/jbossws-core/src/main/java/org/jboss/ws/tools/jaxws/WSImport.java
trunk/jbossws-core/src/main/java/org/jboss/ws/tools/jaxws/ant/WSImport.java
trunk/jbossws-core/src/main/java/org/jboss/ws/tools/jaxws/api/WebServiceImporter.java
trunk/jbossws-core/src/main/java/org/jboss/ws/tools/jaxws/spi/WebServiceImporterProvider.java
Modified:
trunk/build/etc/wsgen.bat
trunk/build/etc/wsgen.sh
Log:
initial implementation of wsimport
Modified: trunk/build/etc/wsgen.bat
===================================================================
--- trunk/build/etc/wsgen.bat 2007-01-31 19:43:41 UTC (rev 2220)
+++ trunk/build/etc/wsgen.bat 2007-01-31 19:44:24 UTC (rev 2221)
@@ -37,10 +37,7 @@
set WSGEN_CLASSPATH=%WSGEN_CLASSPATH%;%JBOSS_HOME%/client/jaxb-api.jar
set WSGEN_CLASSPATH=%WSGEN_CLASSPATH%;%JBOSS_HOME%/client/jaxb-impl.jar
set WSGEN_CLASSPATH=%WSGEN_CLASSPATH%;%JBOSS_HOME%/client/jbossall-client.jar
-set WSGEN_CLASSPATH=%WSGEN_CLASSPATH%;%JBOSS_HOME%/client/jbossretro-rt.jar
-set WSGEN_CLASSPATH=%WSGEN_CLASSPATH%;%JBOSS_HOME%/client/jboss-backport-concurrent.jar
set WSGEN_CLASSPATH=%WSGEN_CLASSPATH%;%JBOSS_HOME%/client/jbossws-client.jar
-set WSGEN_CLASSPATH=%WSGEN_CLASSPATH%;%JBOSS_HOME%/client/jbossws14-client.jar
set WSGEN_CLASSPATH=%WSGEN_CLASSPATH%;%JBOSS_HOME%/client/log4j.jar
set WSGEN_CLASSPATH=%WSGEN_CLASSPATH%;%JBOSS_HOME%/client/mail.jar
Modified: trunk/build/etc/wsgen.sh
===================================================================
--- trunk/build/etc/wsgen.sh 2007-01-31 19:43:41 UTC (rev 2220)
+++ trunk/build/etc/wsgen.sh 2007-01-31 19:44:24 UTC (rev 2221)
@@ -54,9 +54,6 @@
WSGEN_CLASSPATH="$WSGEN_CLASSPATH:$JBOSS_HOME/client/jaxb-api.jar"
WSGEN_CLASSPATH="$WSGEN_CLASSPATH:$JBOSS_HOME/client/jaxb-impl.jar"
WSGEN_CLASSPATH="$WSGEN_CLASSPATH:$JBOSS_HOME/client/jbossall-client.jar"
-WSGEN_CLASSPATH="$WSGEN_CLASSPATH:$JBOSS_HOME/client/jbossretro-rt.jar"
-WSGEN_CLASSPATH="$WSGEN_CLASSPATH:$JBOSS_HOME/client/jboss-backport-concurrent.jar"
-WSGEN_CLASSPATH="$WSGEN_CLASSPATH:$JBOSS_HOME/client/jbossws14-client.jar"
WSGEN_CLASSPATH="$WSGEN_CLASSPATH:$JBOSS_HOME/client/jbossws-client.jar"
WSGEN_CLASSPATH="$WSGEN_CLASSPATH:$JBOSS_HOME/client/log4j.jar"
WSGEN_CLASSPATH="$WSGEN_CLASSPATH:$JBOSS_HOME/client/mail.jar"
Added: trunk/build/etc/wsimport.bat
===================================================================
--- trunk/build/etc/wsimport.bat (rev 0)
+++ trunk/build/etc/wsimport.bat 2007-01-31 19:44:24 UTC (rev 2221)
@@ -0,0 +1,47 @@
+@echo off
+
+rem $Id: wsgen.bat 2158 2007-01-27 06:20:59Z jason.greene(a)jboss.com $
+
+@if not "%ECHO%" == "" echo %ECHO%
+@if "%OS%" == "Windows_NT" setlocal
+
+set DIRNAME=.\
+if "%OS%" == "Windows_NT" set DIRNAME=%~dp0%
+set PROGNAME=run.bat
+if "%OS%" == "Windows_NT" set PROGNAME=%~nx0%
+
+rem Read all command line arguments
+
+REM
+REM The %ARGS% env variable commented out in favor of using %* to include
+REM all args in java command line. See bug #840239. [jpl]
+REM
+REM set ARGS=
+REM :loop
+REM if [%1] == [] goto endloop
+REM set ARGS=%ARGS% %1
+REM shift
+REM goto loop
+REM :endloop
+
+set JAVA=%JAVA_HOME%\bin\java
+set JBOSS_HOME=%DIRNAME%\..
+rem Setup the java endorsed dirs
+set JBOSS_ENDORSED_DIRS=%JBOSS_HOME%\lib\endorsed
+
+rem Setup the wstools classpath
+set WSIMPORT_CLASSPATH=%WSIMPORT_CLASSPATH%;%JBOSS_HOME%/client/jboss-xml-binding.jar
+set WSIMPORT_CLASSPATH=%WSIMPORT_CLASSPATH%;%JBOSS_HOME%/client/activation.jar
+set WSIMPORT_CLASSPATH=%WSIMPORT_CLASSPATH%;%JBOSS_HOME%/client/javassist.jar
+set WSIMPORT_CLASSPATH=%WSIMPORT_CLASSPATH%;%JBOSS_HOME%/client/getopt.jar
+set WSIMPORT_CLASSPATH=%WSIMPORT_CLASSPATH%;%JBOSS_HOME%/client/jaxb-api.jar
+set WSIMPORT_CLASSPATH=%WSIMPORT_CLASSPATH%;%JBOSS_HOME%/client/jaxb-impl.jar
+set WSIMPORT_CLASSPATH=%WSIMPORT_CLASSPATH%;%JBOSS_HOME%/client/jaxb-xjc.jar
+set WSIMPORT_CLASSPATH=%WSIMPORT_CLASSPATH%;%JBOSS_HOME%/client/jbossws-sun-wsimport.jar
+set WSIMPORT_CLASSPATH=%WSIMPORT_CLASSPATH%;%JBOSS_HOME%/client/jbossall-client.jar
+set WSIMPORT_CLASSPATH=%WSIMPORT_CLASSPATH%;%JBOSS_HOME%/client/jbossws-client.jar
+set WSIMPORT_CLASSPATH=%WSIMPORT_CLASSPATH%;%JBOSS_HOME%/client/log4j.jar
+set WSIMPORT_CLASSPATH=%WSIMPORT_CLASSPATH%;%JBOSS_HOME%/client/mail.jar
+
+rem Execute the JVM
+"%JAVA%" %JAVA_OPTS% -Djava.endorsed.dirs="%JBOSS_ENDORSED_DIRS%"
-Dlog4j.configuration=wstools-log4j.xml -classpath "%WSIMPORT_CLASSPATH%"
org.jboss.ws.tools.jaxws.WSImport %*
Added: trunk/build/etc/wsimport.sh
===================================================================
--- trunk/build/etc/wsimport.sh (rev 0)
+++ trunk/build/etc/wsimport.sh 2007-01-31 19:44:24 UTC (rev 2221)
@@ -0,0 +1,78 @@
+#!/bin/sh
+
+# $Id: wsgen.sh 2158 2007-01-27 06:20:59Z jason.greene(a)jboss.com $
+
+DIRNAME=`dirname $0`
+PROGNAME=`basename $0`
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false;
+case "`uname`" in
+ CYGWIN*)
+ cygwin=true
+ ;;
+esac
+
+# For Cygwin, ensure paths are in UNIX format before anything is touched
+if $cygwin ; then
+ [ -n "$JBOSS_HOME" ] &&
+ JBOSS_HOME=`cygpath --unix "$JBOSS_HOME"`
+ [ -n "$JAVA_HOME" ] &&
+ JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
+fi
+
+# Setup JBOSS_HOME
+if [ "x$JBOSS_HOME" = "x" ]; then
+ # get the full path (without any relative bits)
+ JBOSS_HOME=`cd $DIRNAME/..; pwd`
+fi
+export JBOSS_HOME
+
+# Setup the JVM
+if [ "x$JAVA" = "x" ]; then
+ if [ "x$JAVA_HOME" != "x" ]; then
+ JAVA="$JAVA_HOME/bin/java"
+ else
+ JAVA="java"
+ fi
+fi
+
+#JPDA options. Uncomment and modify as appropriate to enable remote debugging .
+#JAVA_OPTS="-classic -Xdebug -Xnoagent -Djava.compiler=NONE
-Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n $JAVA_OPTS"
+
+# Setup JBoss sepecific properties
+JAVA_OPTS="$JAVA_OPTS"
+
+# Setup the java endorsed dirs
+JBOSS_ENDORSED_DIRS="$JBOSS_HOME/lib/endorsed"
+
+# Setup the wstools classpath
+WSIMPORT_CLASSPATH="$WSIMPORT_CLASSPATH:$JAVA_HOME/lib/tools.jar"
+WSIMPORT_CLASSPATH="$WSIMPORT_CLASSPATH:$JBOSS_HOME/client/jboss-xml-binding.jar"
+WSIMPORT_CLASSPATH="$WSIMPORT_CLASSPATH:$JBOSS_HOME/client/wstx.jar"
+WSIMPORT_CLASSPATH="$WSIMPORT_CLASSPATH:$JBOSS_HOME/client/jbossws-sun-wsimport.jar"
+WSIMPORT_CLASSPATH="$WSIMPORT_CLASSPATH:$JBOSS_HOME/client/activation.jar"
+WSIMPORT_CLASSPATH="$WSIMPORT_CLASSPATH:$JBOSS_HOME/client/getopt.jar"
+WSIMPORT_CLASSPATH="$WSIMPORT_CLASSPATH:$JBOSS_HOME/client/javassist.jar"
+WSIMPORT_CLASSPATH="$WSIMPORT_CLASSPATH:$JBOSS_HOME/client/jaxb-api.jar"
+WSIMPORT_CLASSPATH="$WSIMPORT_CLASSPATH:$JBOSS_HOME/client/jaxb-impl.jar"
+WSIMPORT_CLASSPATH="$WSIMPORT_CLASSPATH:$JBOSS_HOME/client/jaxb-xjc.jar"
+WSIMPORT_CLASSPATH="$WSIMPORT_CLASSPATH:$JBOSS_HOME/client/jbossall-client.jar"
+WSIMPORT_CLASSPATH="$WSIMPORT_CLASSPATH:$JBOSS_HOME/client/jbossws-client.jar"
+WSIMPORT_CLASSPATH="$WSIMPORT_CLASSPATH:$JBOSS_HOME/client/log4j.jar"
+WSIMPORT_CLASSPATH="$WSIMPORT_CLASSPATH:$JBOSS_HOME/client/mail.jar"
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin; then
+ JBOSS_HOME=`cygpath --path --windows "$JBOSS_HOME"`
+ JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
+ WSIMPORT_CLASSPATH=`cygpath --path --windows "$WSIMPORT_CLASSPATH"`
+ JBOSS_ENDORSED_DIRS=`cygpath --path --windows "$JBOSS_ENDORSED_DIRS"`
+fi
+
+# Execute the JVM
+"$JAVA" $JAVA_OPTS \
+ -Djava.endorsed.dirs="$JBOSS_ENDORSED_DIRS" \
+ -Dlog4j.configuration=wstools-log4j.xml \
+ -classpath "$WSIMPORT_CLASSPATH" \
+ org.jboss.ws.tools.jaxws.WSImport "$@"
Property changes on: trunk/build/etc/wsimport.sh
___________________________________________________________________
Name: svn:executable
+ *
Added: trunk/jbossws-core/src/main/java/org/jboss/ws/tools/jaxws/WSImport.java
===================================================================
--- trunk/jbossws-core/src/main/java/org/jboss/ws/tools/jaxws/WSImport.java
(rev 0)
+++ trunk/jbossws-core/src/main/java/org/jboss/ws/tools/jaxws/WSImport.java 2007-01-31
19:44:24 UTC (rev 2221)
@@ -0,0 +1,235 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+ */
+package org.jboss.ws.tools.jaxws;
+
+import gnu.getopt.Getopt;
+import gnu.getopt.LongOpt;
+
+import java.io.File;
+import java.io.PrintStream;
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.jboss.ws.tools.jaxws.api.WebServiceImporter;
+
+/**
+ * WSImport is a command line tool that generates portable JAX-WS artifacts
+ * from a WSDL file.
+ *
+ * <pre>
+ * usage: wsimport [options] <wsdl-urlgt;
+ * options:
+ * -h, --help Show this help message
+ * -b, --binding=<file> One or more JAX-WS or JAXB binding files
+ * -k, --keep Keep/Generate Java source
+ * -c --catalog=<file> Oasis XML Catalog file for entity
resolution
+ * -p --package=<name> The target package for generated source
+ * -w --wsdlLocation=<loc> Value to use for @(a)WebService.wsdlLocation
+ * -o, --output=<directory> The directory to put generated artifacts
+ * -s, --source=<directory> The directory to put Java source
+ * -q, --quiet Be somewhat more quiet
+ * -t, --show-traces Show full exception stack traces
+ * </pre>
+ *
+ * @author <a href="mailto:jason.greene@jboss.com">Jason T.
Greene</a>
+ * @version $Revision$
+ */
+public class WSImport
+{
+ private List<File> bindingFiles = new ArrayList<File>();
+ private boolean generateSource = false;
+ private File catalog = null;
+ private String targetPackage = null;
+ private String wsdlLocation = null;
+ private boolean quiet = false;
+ private boolean showTraces = false;
+ private File outputDir = new File("output");
+ private File sourceDir = null;
+
+ public static String PROGRAM_NAME = System.getProperty("program.name",
"wsimport");
+
+ public static void main(String[] args)
+ {
+ WSImport importer = new WSImport();
+ URL wsdl = importer.parseArguments(args);
+ System.exit(importer.importServices(wsdl));
+ }
+
+ private URL parseArguments(String[] args)
+ {
+ String shortOpts = "hb:kc:p:w:o:s:qt";
+ LongOpt[] longOpts =
+ {
+ new LongOpt("help", LongOpt.NO_ARGUMENT, null, 'h'),
+ new LongOpt("binding", LongOpt.REQUIRED_ARGUMENT, null, 'b'),
+ new LongOpt("keep", LongOpt.NO_ARGUMENT, null, 'k'),
+ new LongOpt("catalog", LongOpt.REQUIRED_ARGUMENT, null, 'c'),
+ new LongOpt("package", LongOpt.REQUIRED_ARGUMENT, null, 'p'),
+ new LongOpt("wsdlLocation", LongOpt.REQUIRED_ARGUMENT, null,
'w'),
+ new LongOpt("output", LongOpt.REQUIRED_ARGUMENT, null, 'o'),
+ new LongOpt("source", LongOpt.REQUIRED_ARGUMENT, null, 's'),
+ new LongOpt("quiet", LongOpt.NO_ARGUMENT, null, 'q'),
+ new LongOpt("show-traces", LongOpt.NO_ARGUMENT, null, 't'),
+ };
+
+ Getopt getopt = new Getopt(PROGRAM_NAME, args, shortOpts, longOpts);
+ int c;
+ while ((c = getopt.getopt()) != -1)
+ {
+ switch (c)
+ {
+ case 'b':
+ bindingFiles.add(new File(getopt.getOptarg()));
+ break;
+ case 'k':
+ generateSource = true;
+ break;
+ case 'c':
+ catalog = new File(getopt.getOptarg());
+ break;
+ case 'p':
+ targetPackage = getopt.getOptarg();
+ break;
+ case 'w':
+ wsdlLocation = getopt.getOptarg();
+ break;
+ case 'o':
+ outputDir = new File(getopt.getOptarg());
+ break;
+ case 's':
+ sourceDir = new File(getopt.getOptarg());
+ break;
+ case 'q':
+ quiet = true;
+ break;
+ case 't':
+ showTraces = true;
+ break;
+ case 'h':
+ printHelp();
+ System.exit(0);
+ case '?':
+ System.exit(1);
+ }
+ }
+
+ int wsdlPos = getopt.getOptind();
+ if (wsdlPos >= args.length)
+ {
+ System.err.println("Error: WSDL URL was not specified!");
+ printHelp();
+ System.exit(1);
+ }
+
+ URL url = null;
+ try
+ {
+ try
+ {
+ url = new URL(args[wsdlPos]);
+ }
+ catch (MalformedURLException e)
+ {
+ File file = new File(args[wsdlPos]);
+ url = file.toURL();
+ }
+ }
+ catch (MalformedURLException e)
+ {
+ System.err.println("Error: Invalid URI: " + args[wsdlPos]);
+ System.exit(1);
+ }
+
+ return url;
+ }
+
+
+ private int importServices(URL wsdl)
+ {
+ WebServiceImporter importer = WebServiceImporter.newInstance();
+ importer.setGenerateSource(generateSource);
+ importer.setOutputDirectory(outputDir);
+ if (sourceDir != null)
+ importer.setSourceDirectory(sourceDir);
+
+ if (! quiet)
+ importer.setMessageStream(System.out);
+
+ if (catalog != null)
+ importer.setCatalog(catalog);
+
+ if (targetPackage != null)
+ importer.setTargetPackage(targetPackage);
+
+ if (wsdlLocation != null)
+ importer.setWsdlLocation(wsdlLocation);
+
+ if (bindingFiles != null && bindingFiles.size() > 0)
+ importer.setBindingFiles(bindingFiles);
+
+ try
+ {
+ importer.importServices(wsdl);
+ return 0;
+ }
+ catch (Throwable t)
+ {
+ System.err.println("Error: Could not import. (use --show-traces to see full
traces)");
+ if (!showTraces)
+ {
+ String message = t.getMessage();
+ if (message == null)
+ message = t.getClass().getSimpleName();
+ System.err.println("Error: " + message);
+ }
+ else
+ {
+ t.printStackTrace(System.err);
+ }
+
+ }
+
+ return 1;
+ }
+
+ private static void printHelp()
+ {
+ PrintStream out = System.out;
+ out.println("WSImport is a command line tool that generates portable JAX-WS
artifacts from a WSDL file.\n");
+ out.println("usage: " + PROGRAM_NAME + " [options]
<wsdl-url>\n");
+ out.println("options: ");
+ out.println(" -h, --help Show this help message");
+ out.println(" -b, --binding=<file> One or more JAX-WS or JAXB
binding files ");
+ out.println(" -k, --keep Keep/Generate Java
source");
+ out.println(" -c --catalog=<file> Oasis XML Catalog file for
entity resolution");
+ out.println(" -p --package=<name> The target package for
generated source");
+ out.println(" -w --wsdlLocation=<loc> Value to use for
@WebService.wsdlLocation");
+ out.println(" -o, --output=<directory> The directory to put
generated artifacts");
+ out.println(" -s, --source=<directory> The directory to put Java
source");
+ out.println(" -q, --quiet Be somewhat more quiet");
+ out.println(" -t, --show-traces Show full exception stack
traces");
+ out.flush();
+ }
+}
Property changes on:
trunk/jbossws-core/src/main/java/org/jboss/ws/tools/jaxws/WSImport.java
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF
Added: trunk/jbossws-core/src/main/java/org/jboss/ws/tools/jaxws/ant/WSImport.java
===================================================================
--- trunk/jbossws-core/src/main/java/org/jboss/ws/tools/jaxws/ant/WSImport.java
(rev 0)
+++ trunk/jbossws-core/src/main/java/org/jboss/ws/tools/jaxws/ant/WSImport.java 2007-01-31
19:44:24 UTC (rev 2221)
@@ -0,0 +1,302 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2005, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+*/
+package org.jboss.ws.tools.jaxws.ant;
+
+import java.io.File;
+import java.io.PrintStream;
+import java.net.MalformedURLException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.tools.ant.AntClassLoader;
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.DirectoryScanner;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.Task;
+import org.apache.tools.ant.taskdefs.ExecuteJava;
+import org.apache.tools.ant.taskdefs.LogOutputStream;
+import org.apache.tools.ant.types.CommandlineJava;
+import org.apache.tools.ant.types.FileSet;
+import org.apache.tools.ant.types.Path;
+import org.jboss.ws.tools.jaxws.api.WebServiceImporter;
+
+/**
+ * Ant task which invokes WebServiceGenerate.
+ *
+ * <table border="1">
+ * <tr align="left" BGCOLOR="#CCCCFF"
CLASS="TableHeadingColor"><th>Attribute</th><th>Description</th><th>Default</th></tr>
+ * <tr><td>fork</td><td>Whether or not to run the generation
task in a separate VM.</td><td>true</td></tr>
+ * <tr><td>keep</td><td>Keep/Enable Java source code
generation.</td><td>false</td></tr>
+ * <tr><td>catalog</td><td> Oasis XML Catalog file for entity
resolution</td><td>none</td></tr>
+ * <tr><td>package</td><td> The target Java package for
generated code.</td><td>generated</td></tr>
+ * <tr><td>binding</td><td>A JAX-WS or JAXB binding
file</td><td>none</td></tr>
+ * <tr><td>wsdlLocation</td><td>Value to use for
@(a)WebService.wsdlLocation</td><td>generated</td></tr>
+ * <tr><td>destdir</td><td>The output directory for generated
artifacts.</td><td>"output"</td></tr>
+ * <tr><td>sourcedir</td><td>The output directory for Java
source.</td><td>value of destdir</td></tr>
+ * <tr><td>verbose</td><td>Enables more informational output
about command progress.</td><td>false</td><tr>
+ * <tr><td>wsdl*</td><td>The WSDL file or
URL</td><td>n/a</td><tr>
+ * </table>
+ * <b>* = required.</b>
+ *
+ * <p>Example:
+ *
+ * <pre>
+ * <wsimport
+ * fork="true"
+ * verbose="true"
+ * destdir="output"
+ * sourcedestdir="gen-src"
+ * keep="true"
+ * wsdllocation="handEdited.wsdl"
+ * wsdl="foo.wsdl">
+ * <binding dir="binding-files"
includes="*.xml" excludes="bad.xml"/>
+ * </wsimport>
+ * </pre>
+ *
+ * @author <a href="mailto:jason.greene@jboss.com">Jason T.
Greene</a>
+ * @version $Revision$
+ */
+public class WSImport extends Task
+{
+ private String wsdl = null;
+ private File destdir = null;
+ private File sourcedestdir = null;
+ private List<File> bindingFiles = new ArrayList<File>();
+ private File catalog = null;
+ private String wsdlLocation = null;
+ private String targetPackage = null;
+ private boolean keep = false;
+ private boolean verbose = false;
+ private boolean fork = false;
+ private boolean debug = false;
+
+ // Not actually used right now
+ public void setDebug(boolean debug)
+ {
+ this.debug = debug;
+ }
+
+ public void setBinding(File bindingFile)
+ {
+ bindingFiles.add(bindingFile);
+ }
+
+ public void setCatalog(File catalog)
+ {
+ this.catalog = catalog;
+ }
+
+ public void setDestdir(File destdir)
+ {
+ this.destdir = destdir;
+ }
+
+ public void setFork(boolean fork)
+ {
+ this.fork = fork;
+ }
+
+ public void setKeep(boolean keep)
+ {
+ this.keep = keep;
+ }
+
+ public void setSourcedestdir(File sourcedestdir)
+ {
+ this.sourcedestdir = sourcedestdir;
+ }
+
+ public void setTargetPackage(String targetPackage)
+ {
+ this.targetPackage = targetPackage;
+ }
+
+ public void setVerbose(boolean verbose)
+ {
+ this.verbose = verbose;
+ }
+
+ public void setWsdl(String wsdl)
+ {
+ this.wsdl = wsdl;
+ }
+
+ public void setWsdlLocation(String wsdlLocation)
+ {
+ this.wsdlLocation = wsdlLocation;
+ }
+
+ public void addConfiguredBinding(FileSet fs)
+ {
+ DirectoryScanner ds = fs.getDirectoryScanner(getProject());
+ File baseDir = ds.getBasedir();
+ for (String file : ds.getIncludedFiles())
+ {
+ bindingFiles.add(new File(baseDir, file));
+ }
+ }
+
+ public void executeNonForked()
+ {
+ ClassLoader prevCL = Thread.currentThread().getContextClassLoader();
+ ClassLoader antLoader = this.getClass().getClassLoader();
+ Thread.currentThread().setContextClassLoader(antLoader);
+ try
+ {
+ WebServiceImporter importer = WebServiceImporter.newInstance();
+ importer.setGenerateSource(keep);
+ if (destdir != null)
+ importer.setOutputDirectory(destdir);
+ if (sourcedestdir != null)
+ importer.setSourceDirectory(sourcedestdir);
+ if (targetPackage != null)
+ importer.setTargetPackage(targetPackage);
+ if (wsdlLocation != null)
+ importer.setWsdlLocation(wsdlLocation);
+ if (catalog != null)
+ importer.setCatalog(catalog);
+ if (bindingFiles != null && bindingFiles.size() > 0)
+ importer.setBindingFiles(bindingFiles);
+
+ if (verbose)
+ {
+ importer.setMessageStream(new PrintStream(new LogOutputStream(this,
Project.MSG_INFO)));
+ log("Generating from wsdl: " + wsdl, Project.MSG_INFO);
+ }
+
+ try
+ {
+ importer.setAdditionalCompilerClassPath(getTaskClassPathStrings());
+ importer.importServices(wsdl);
+ }
+ catch (MalformedURLException e)
+ {
+ throw new BuildException(e, getLocation());
+ }
+ }
+ finally
+ {
+ Thread.currentThread().setContextClassLoader(prevCL);
+ }
+ }
+
+ public void execute() throws BuildException
+ {
+ if (wsdl == null)
+ throw new BuildException("The wsdl attribute must be specified!",
getLocation());
+
+ if (fork)
+ executeForked();
+ else
+ executeNonForked();
+ }
+
+ private Path getTaskClassPath()
+ {
+ // Why is everything in the Ant API a big hack???
+ ClassLoader cl = this.getClass().getClassLoader();
+ if (cl instanceof AntClassLoader)
+ {
+ return new Path(getProject(), ((AntClassLoader)cl).getClasspath());
+ }
+
+ return new Path(getProject());
+ }
+
+ private List<String> getTaskClassPathStrings()
+ {
+ // Why is everything in the Ant API a big hack???
+ List<String> strings = new ArrayList<String>();
+ ClassLoader cl = this.getClass().getClassLoader();
+ if (cl instanceof AntClassLoader)
+ {
+ for (String string :
((AntClassLoader)cl).getClasspath().split(File.pathSeparator))
+ strings.add(string);
+ }
+
+ return strings;
+ }
+
+ private void executeForked() throws BuildException
+ {
+ CommandlineJava command = new CommandlineJava();
+ command.setClassname(org.jboss.ws.tools.jaxws.WSImport.class.getName());
+
+ Path path = command.createClasspath(getProject());
+ path.append(getTaskClassPath());
+
+ if (keep)
+ command.createArgument().setValue("-k");
+
+ for (File file : bindingFiles)
+ {
+ command.createArgument().setValue("-b");
+ command.createArgument().setFile(file);
+ }
+
+ if (catalog != null)
+ {
+ command.createArgument().setValue("-c");
+ command.createArgument().setFile(catalog);
+ }
+
+ if (targetPackage != null)
+ {
+ command.createArgument().setValue("-p");
+ command.createArgument().setValue(targetPackage);
+ }
+
+ if (wsdlLocation != null)
+ {
+ command.createArgument().setValue("-w");
+ command.createArgument().setValue(wsdlLocation);
+ }
+
+ if (destdir != null)
+ {
+ command.createArgument().setValue("-o");
+ command.createArgument().setFile(destdir);
+ }
+
+ if (sourcedestdir != null)
+ {
+ command.createArgument().setValue("-s");
+ command.createArgument().setFile(sourcedestdir);
+ }
+
+ if (!verbose)
+ command.createArgument().setValue("-q");
+
+ // Always dump traces
+ command.createArgument().setValue("-t");
+ command.createArgument().setValue(wsdl);
+
+ if (verbose)
+ log("Command invoked: " + command.getJavaCommand().toString());
+
+ ExecuteJava execute = new ExecuteJava();
+ execute.setClasspath(path);
+ execute.setJavaCommand(command.getJavaCommand());
+ if (execute.fork(this) != 0)
+ throw new BuildException("Could not invoke wsimport", getLocation());
+ }
+}
\ No newline at end of file
Property changes on:
trunk/jbossws-core/src/main/java/org/jboss/ws/tools/jaxws/ant/WSImport.java
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF
Added:
trunk/jbossws-core/src/main/java/org/jboss/ws/tools/jaxws/api/WebServiceImporter.java
===================================================================
--- trunk/jbossws-core/src/main/java/org/jboss/ws/tools/jaxws/api/WebServiceImporter.java
(rev 0)
+++
trunk/jbossws-core/src/main/java/org/jboss/ws/tools/jaxws/api/WebServiceImporter.java 2007-01-31
19:44:24 UTC (rev 2221)
@@ -0,0 +1,178 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2005, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+*/
+package org.jboss.ws.tools.jaxws.api;
+
+import java.io.File;
+import java.io.PrintStream;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.List;
+
+import org.jboss.ws.tools.jaxws.spi.WebServiceImporterProvider;
+
+/**
+ * WebServiceImporter is responsible for generating JAX-WS client and server
+ * artifacts from the specified WSDL file. To implement a client, one would use
+ * the generated ___Service.java file. For a server, one only needs to provide
+ * an implementation class that implements the generated service endpoint
+ * interface.
+ *
+ * @author <a href="mailto:jason.greene@jboss.com">Jason T.
Greene</a>
+ * @version $Revision$
+ */
+public abstract class WebServiceImporter
+{
+ private static String DEFAULT_PROVIDER =
"org.jboss.com.sun.tools.ws.jbossws.WebServiceImporterProviderImpl";
+ public static final String PROVIDER_PROPERTY =
"org.jboss.ws.tools.jaxws.webServiceImporterProvider";
+
+ /**
+ * Obtain a new instance of a WebServiceGenerator. This will use the current
+ * thread's context class loader to locate the WebServiceGeneratorProvider
+ * implementation.
+ *
+ * @return a new WebServiceGenerator
+ */
+ public static WebServiceImporter newInstance()
+ {
+ return newInstance(Thread.currentThread().getContextClassLoader());
+ }
+
+ /**
+ * Obtain a new instance of a WebServiceImporter. The specified ClassLoader will be
used to
+ * locate the WebServiceImporterProvide implementation
+ *
+ * @param loader the ClassLoader to use
+ * @return a new WebServiceImporter
+ */
+ public static WebServiceImporter newInstance(ClassLoader loader)
+ {
+ WebServiceImporterProvider provider =
ProviderLocator.locate(WebServiceImporterProvider.class, PROVIDER_PROPERTY,
DEFAULT_PROVIDER, loader);
+ return provider.createImporter();
+ }
+
+ /**
+ * Specifies the JAX-WS and JAXB binding files to use on import operations.
+ *
+ * @param bindingFiles list of JAX-WS or JAXB binding files
+ */
+ public abstract void setBindingFiles(List<File> bindingFiles);
+
+ /**
+ * Sets the OASIS XML Catalog file to use for entity resolution.
+ *
+ * @param catalog the OASIS XML Catalog file
+ */
+ public abstract void setCatalog(File catalog);
+
+ /**
+ * Sets the main output directory. If the directory does not exist, it will be
created.
+ *
+ * @param directory the root directory for generated files
+ */
+ public abstract void setOutputDirectory(File directory);
+
+ /**
+ * Sets the source directory. This directory will contain any generated Java source.
+ * If the directory does not exist, it will be created. If not specified,
+ * the output directory will be used instead.
+ *
+ * @param directory the root directory for generated source code
+ */
+ public abstract void setSourceDirectory(File directory);
+
+ /**
+ * Enables/Disables Java source generation.
+ *
+ * @param generateSource whether or not to generate Java source.
+ */
+ public abstract void setGenerateSource(boolean generateSource);
+
+
+ /**
+ * Sets the target package for generated source. If not specified the default
+ * is based off of the XML namespace.
+ *
+ * @param targetPackage the target package for generated source
+ */
+ public abstract void setTargetPackage(String targetPackage);
+
+ /**
+ * Sets the @(a)WebService.wsdlLocation and @(a)WebServiceClient.wsdlLocation attributes
to a custom value.
+ *
+ * @param wsdlLocation the custom WSDL location to use in generated source
+ */
+ public abstract void setWsdlLocation(String wsdlLocation);
+
+ /**
+ * Sets the PrintStream to use for status feedback. The simplest example
+ * would be to use System.out.
+ *
+ * @param messageStream the stream to use for status messages:
+ */
+ public abstract void setMessageStream(PrintStream messageStream);
+
+
+ /**
+ * Sets the additional classpath to use if/when invoking the Java compiler.
+ * Typically an implementation will use the system
<code>java.class.path</code>
+ * property. So for most normal applications this method is not needed. However,
+ * if this API is being used from an isolated classloader, then it needs to
+ * be called in order to reference all jars that are required by the
+ * implementation.
+ *
+ * @param classPath a list of strings where each entry references a
+ * single jar or directory
+ */
+ public abstract void setAdditionalCompilerClassPath(List<String> classPath);
+
+ /**
+ * Generate the required artifacts using the specified WSDL URL. This method
+ * may be called more than once, although this is probably not desireable
+ *
+ * @param wsdl the URL of the WSDL
+ */
+ public abstract void importServices(URL wsdl);
+
+ /**
+ * Generate the required artifacts using the specified WSDL. This method
+ * may be called more than once, although this is probably not desireable.
+ * The passed string is expect to either be a valid URL, or a local file path.
+ *
+ * @param wsdl a URL or local file path
+ * @throws MalformedURLException if wsdl is not a legal URL or local file
+ */
+ public void importServices(String wsdl) throws MalformedURLException
+ {
+ URL url = null;
+ try
+ {
+ url = new URL(wsdl);
+ }
+ catch (MalformedURLException e)
+ {
+ File file = new File(wsdl);
+ url = file.toURL();
+ }
+
+ importServices(url);
+ }
+}
Property changes on:
trunk/jbossws-core/src/main/java/org/jboss/ws/tools/jaxws/api/WebServiceImporter.java
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF
Added:
trunk/jbossws-core/src/main/java/org/jboss/ws/tools/jaxws/spi/WebServiceImporterProvider.java
===================================================================
---
trunk/jbossws-core/src/main/java/org/jboss/ws/tools/jaxws/spi/WebServiceImporterProvider.java
(rev 0)
+++
trunk/jbossws-core/src/main/java/org/jboss/ws/tools/jaxws/spi/WebServiceImporterProvider.java 2007-01-31
19:44:24 UTC (rev 2221)
@@ -0,0 +1,40 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+ */
+package org.jboss.ws.tools.jaxws.spi;
+
+import org.jboss.ws.tools.jaxws.api.WebServiceImporter;
+
+/**
+ * WebServiceImporterProvider defines the contract for a WebServiceImporter provider.
+ *
+ * @author <a href="mailto:jason.greene@jboss.com">Jason T.
Greene</a>
+ */
+public interface WebServiceImporterProvider
+{
+ /**
+ * Create a new WebServiceImporter. There are no restrictions on how this
+ * should be performed.
+ *
+ * @return a new WebServiceImporter
+ */
+ public WebServiceImporter createImporter();
+}
Property changes on:
trunk/jbossws-core/src/main/java/org/jboss/ws/tools/jaxws/spi/WebServiceImporterProvider.java
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF