changeset 2:09f9f3d5c507

CM-127: Move wsdlsetup and wsd2html.xsl from Tools
author smith@nwoca.org
date Tue, 07 Jun 2011 18:06:07 -0400
parents 82fc5e17cc59
children af958c5027b1
files nbproject/build-impl.xml nbproject/genfiles.properties src/org/ssdt_ohio/tools/ant/WsdlSetup.java src/org/ssdt_ohio/tools/ant/antlib.xml src/org/ssdt_ohio/tools/ant/wsd2html.xsl
diffstat 5 files changed, 953 insertions(+), 53 deletions(-) [+]
line wrap: on
line diff
--- a/nbproject/build-impl.xml	Sat Apr 16 16:22:27 2011 -0400
+++ b/nbproject/build-impl.xml	Tue Jun 07 18:06:07 2011 -0400
@@ -57,7 +57,14 @@
     </target>
     <target depends="-pre-init,-init-private,-init-user,-init-project,-init-macrodef-property,-ivy-retrieve" name="-do-init">
         <available file="${manifest.file}" property="manifest.available"/>
-        <available file="${application.splash}" property="splashscreen.available"/>
+        <condition property="splashscreen.available">
+            <and>
+                <not>
+                    <equals arg1="${application.splash}" arg2="" trim="true"/>
+                </not>
+                <available file="${application.splash}"/>
+            </and>
+        </condition>
         <condition property="main.class.available">
             <and>
                 <isset property="main.class"/>
@@ -72,8 +79,14 @@
                 <isset property="main.class.available"/>
             </and>
         </condition>
+        <condition property="do.archive">
+            <not>
+                <istrue value="${jar.archive.disabled}"/>
+            </not>
+        </condition>
         <condition property="do.mkdist">
             <and>
+                <isset property="do.archive"/>
                 <isset property="libs.CopyLibs.classpath"/>
                 <not>
                     <istrue value="${mkdist.disabled}"/>
@@ -86,40 +99,41 @@
                 <isset property="do.mkdist"/>
             </and>
         </condition>
-        <condition property="manifest.available+main.class+mkdist.available+splashscreen.available">
-            <and>
-                <istrue value="${manifest.available+main.class+mkdist.available}"/>
-                <istrue value="${splashscreen.available}"/>
-            </and>
-        </condition>
-        <condition property="do.archive">
-            <not>
-                <istrue value="${jar.archive.disabled}"/>
-            </not>
-        </condition>
         <condition property="do.archive+manifest.available">
             <and>
                 <isset property="manifest.available"/>
                 <istrue value="${do.archive}"/>
             </and>
         </condition>
+        <condition property="do.archive+main.class.available">
+            <and>
+                <isset property="main.class.available"/>
+                <istrue value="${do.archive}"/>
+            </and>
+        </condition>
+        <condition property="do.archive+splashscreen.available">
+            <and>
+                <isset property="splashscreen.available"/>
+                <istrue value="${do.archive}"/>
+            </and>
+        </condition>
         <condition property="do.archive+manifest.available+main.class">
             <and>
                 <istrue value="${manifest.available+main.class}"/>
                 <istrue value="${do.archive}"/>
             </and>
         </condition>
-        <condition property="do.archive+manifest.available+main.class+mkdist.available">
-            <and>
-                <istrue value="${manifest.available+main.class+mkdist.available}"/>
-                <istrue value="${do.archive}"/>
-            </and>
+        <condition property="manifest.available-mkdist.available">
+            <or>
+                <istrue value="${manifest.available}"/>
+                <isset property="do.mkdist"/>
+            </or>
         </condition>
-        <condition property="do.archive+manifest.available+main.class+mkdist.available+splashscreen.available">
-            <and>
-                <istrue value="${manifest.available+main.class+mkdist.available+splashscreen.available}"/>
-                <istrue value="${do.archive}"/>
-            </and>
+        <condition property="manifest.available+main.class-mkdist.available">
+            <or>
+                <istrue value="${manifest.available+main.class}"/>
+                <isset property="do.mkdist"/>
+            </or>
         </condition>
         <condition property="have.tests">
             <or>
@@ -175,8 +189,17 @@
         <condition else="" property="endorsed.classpath.cmd.line.arg" value="-Xbootclasspath/p:'${toString:endorsed.classpath.path}'">
             <length length="0" string="${endorsed.classpath}" when="greater"/>
         </condition>
-        <property name="javac.fork" value="false"/>
+        <condition else="false" property="jdkBug6558476">
+            <and>
+                <matches pattern="1\.[56]" string="${java.specification.version}"/>
+                <not>
+                    <os family="unix"/>
+                </not>
+            </and>
+        </condition>
+        <property name="javac.fork" value="${jdkBug6558476}"/>
         <property name="jar.index" value="false"/>
+        <property name="jar.index.metainf" value="${jar.index}"/>
         <available file="${meta.inf.dir}/persistence.xml" property="has.persistence.xml"/>
     </target>
     <target name="-post-init">
@@ -304,7 +327,9 @@
                 <delete>
                     <files includesfile="${javac.includesfile.binary}"/>
                 </delete>
-                <delete file="${javac.includesfile.binary}"/>
+                <delete>
+                    <fileset file="${javac.includesfile.binary}"/>
+                </delete>
             </sequential>
         </macrodef>
     </target>
@@ -314,7 +339,8 @@
             <attribute default="${excludes}" name="excludes"/>
             <attribute default="**" name="testincludes"/>
             <sequential>
-                <junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" showoutput="true" tempdir="${build.dir}">
+                <property name="junit.forkmode" value="perTest"/>
+                <junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" showoutput="true" tempdir="${build.dir}">
                     <batchtest todir="${build.test.results.dir}">
                         <fileset dir="${test.src.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">
                             <filename name="@{testincludes}"/>
@@ -330,11 +356,56 @@
                     <formatter type="brief" usefile="false"/>
                     <formatter type="xml"/>
                     <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
+                    <jvmarg value="-ea"/>
                     <jvmarg line="${run.jvmargs}"/>
                 </junit>
             </sequential>
         </macrodef>
     </target>
+    <target depends="-profile-pre-init, init, -profile-post-init, -profile-init-macrodef-profile, -profile-init-check" name="profile-init"/>
+    <target name="-profile-pre-init">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target name="-profile-post-init">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target name="-profile-init-macrodef-profile">
+        <macrodef name="resolve">
+            <attribute name="name"/>
+            <attribute name="value"/>
+            <sequential>
+                <property name="@{name}" value="${env.@{value}}"/>
+            </sequential>
+        </macrodef>
+        <macrodef name="profile">
+            <attribute default="${main.class}" name="classname"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <property environment="env"/>
+                <resolve name="profiler.current.path" value="${profiler.info.pathvar}"/>
+                <java classname="@{classname}" dir="${profiler.info.dir}" fork="true" jvm="${profiler.info.jvm}">
+                    <jvmarg value="${profiler.info.jvmargs.agent}"/>
+                    <jvmarg line="${profiler.info.jvmargs}"/>
+                    <env key="${profiler.info.pathvar}" path="${profiler.info.agentpath}:${profiler.current.path}"/>
+                    <arg line="${application.args}"/>
+                    <classpath>
+                        <path path="${run.classpath}"/>
+                    </classpath>
+                    <syspropertyset>
+                        <propertyref prefix="run-sys-prop."/>
+                        <mapper from="run-sys-prop.*" to="*" type="glob"/>
+                    </syspropertyset>
+                    <customize/>
+                </java>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-profile-pre-init, init, -profile-post-init, -profile-init-macrodef-profile" name="-profile-init-check">
+        <fail unless="profiler.info.jvm">Must set JVM to use for profiling in profiler.info.jvm</fail>
+        <fail unless="profiler.info.jvmargs.agent">Must set profiler agent JVM arguments in profiler.info.jvmargs.agent</fail>
+    </target>
     <target depends="-init-debug-args" name="-init-macrodef-nbjpda">
         <macrodef name="nbjpdastart" uri="http://www.netbeans.org/ns/j2se-project/1">
             <attribute default="${main.class}" name="name"/>
@@ -429,6 +500,7 @@
     </target>
     <target name="-init-macrodef-copylibs">
         <macrodef name="copylibs" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${manifest.file}" name="manifest"/>
             <element name="customize" optional="true"/>
             <sequential>
                 <property location="${build.classes.dir}" name="build.classes.dir.resolved"/>
@@ -444,7 +516,7 @@
                     </chainedmapper>
                 </pathconvert>
                 <taskdef classname="org.netbeans.modules.java.j2seproject.copylibstask.CopyLibs" classpath="${libs.CopyLibs.classpath}" name="copylibs"/>
-                <copylibs compress="${jar.compress}" index="${jar.index}" jarfile="${dist.jar}" manifest="${manifest.file}" runtimeclasspath="${run.classpath.without.build.classes.dir}">
+                <copylibs compress="${jar.compress}" index="${jar.index}" indexMetaInf="${jar.index.metainf}" jarfile="${dist.jar}" manifest="@{manifest}" runtimeclasspath="${run.classpath.without.build.classes.dir}">
                     <fileset dir="${build.classes.dir}"/>
                     <manifest>
                         <attribute name="Class-Path" value="${jar.classpath}"/>
@@ -573,10 +645,10 @@
         <!-- Empty placeholder for easier customization. -->
         <!-- You can override this target in the ../build.xml file. -->
     </target>
-    <target depends="init,compile,-pre-pre-jar,-pre-jar" if="do.archive" name="-do-jar-without-manifest" unless="manifest.available">
+    <target depends="init,compile,-pre-pre-jar,-pre-jar" if="do.archive" name="-do-jar-without-manifest" unless="manifest.available-mkdist.available">
         <j2seproject1:jar/>
     </target>
-    <target depends="init,compile,-pre-pre-jar,-pre-jar" if="do.archive+manifest.available" name="-do-jar-with-manifest" unless="manifest.available+main.class">
+    <target depends="init,compile,-pre-pre-jar,-pre-jar" if="do.archive+manifest.available" name="-do-jar-with-manifest" unless="manifest.available+main.class-mkdist.available">
         <j2seproject1:jar manifest="${manifest.file}"/>
     </target>
     <target depends="init,compile,-pre-pre-jar,-pre-jar" if="do.archive+manifest.available+main.class" name="-do-jar-with-mainclass" unless="manifest.available+main.class+mkdist.available">
@@ -585,44 +657,53 @@
                 <j2seproject1:attribute name="Main-Class" value="${main.class}"/>
             </j2seproject1:manifest>
         </j2seproject1:jar>
-        <echo>To run this application from the command line without Ant, try:</echo>
+        <echo level="info">To run this application from the command line without Ant, try:</echo>
         <property location="${build.classes.dir}" name="build.classes.dir.resolved"/>
         <property location="${dist.jar}" name="dist.jar.resolved"/>
         <pathconvert property="run.classpath.with.dist.jar">
             <path path="${run.classpath}"/>
             <map from="${build.classes.dir.resolved}" to="${dist.jar.resolved}"/>
         </pathconvert>
-        <echo>java -cp "${run.classpath.with.dist.jar}" ${main.class}</echo>
+        <echo level="info">java -cp "${run.classpath.with.dist.jar}" ${main.class}</echo>
+    </target>
+    <target depends="init" if="do.archive" name="-do-jar-with-libraries-create-manifest" unless="manifest.available">
+        <tempfile deleteonexit="true" destdir="${build.dir}" property="tmp.manifest.file"/>
+        <touch file="${tmp.manifest.file}" verbose="false"/>
     </target>
-    <target depends="init,compile,-pre-pre-jar,-pre-jar,-init-macrodef-copylibs" if="do.archive+manifest.available+main.class+mkdist.available+splashscreen.available" name="-do-jar-with-libraries-and-splashscreen">
+    <target depends="init" if="do.archive+manifest.available" name="-do-jar-with-libraries-copy-manifest">
+        <tempfile deleteonexit="true" destdir="${build.dir}" property="tmp.manifest.file"/>
+        <copy file="${manifest.file}" tofile="${tmp.manifest.file}"/>
+    </target>
+    <target depends="init,-do-jar-with-libraries-create-manifest,-do-jar-with-libraries-copy-manifest" if="do.archive+main.class.available" name="-do-jar-with-libraries-set-main">
+        <manifest file="${tmp.manifest.file}" mode="update">
+            <attribute name="Main-Class" value="${main.class}"/>
+        </manifest>
+    </target>
+    <target depends="init,-do-jar-with-libraries-create-manifest,-do-jar-with-libraries-copy-manifest" if="do.archive+splashscreen.available" name="-do-jar-with-libraries-set-splashscreen">
         <basename file="${application.splash}" property="splashscreen.basename"/>
         <mkdir dir="${build.classes.dir}/META-INF"/>
         <copy failonerror="false" file="${application.splash}" todir="${build.classes.dir}/META-INF"/>
-        <j2seproject3:copylibs>
-            <customize>
-                <attribute name="Main-Class" value="${main.class}"/>
-                <attribute name="SplashScreen-Image" value="META-INF/${splashscreen.basename}"/>
-            </customize>
-        </j2seproject3:copylibs>
-        <echo>To run this application from the command line without Ant, try:</echo>
-        <property location="${dist.jar}" name="dist.jar.resolved"/>
-        <echo>java -jar "${dist.jar.resolved}"</echo>
+        <manifest file="${tmp.manifest.file}" mode="update">
+            <attribute name="SplashScreen-Image" value="META-INF/${splashscreen.basename}"/>
+        </manifest>
     </target>
-    <target depends="init,compile,-pre-pre-jar,-pre-jar,-init-macrodef-copylibs" if="do.archive+manifest.available+main.class+mkdist.available" name="-do-jar-with-libraries" unless="splashscreen.available">
-        <j2seproject3:copylibs>
-            <customize>
-                <attribute name="Main-Class" value="${main.class}"/>
-            </customize>
-        </j2seproject3:copylibs>
-        <echo>To run this application from the command line without Ant, try:</echo>
+    <target depends="init,-init-macrodef-copylibs,compile,-pre-pre-jar,-pre-jar,-do-jar-with-libraries-create-manifest,-do-jar-with-libraries-copy-manifest,-do-jar-with-libraries-set-main,-do-jar-with-libraries-set-splashscreen" if="do.mkdist" name="-do-jar-with-libraries-pack">
+        <j2seproject3:copylibs manifest="${tmp.manifest.file}"/>
+        <echo level="info">To run this application from the command line without Ant, try:</echo>
         <property location="${dist.jar}" name="dist.jar.resolved"/>
-        <echo>java -jar "${dist.jar.resolved}"</echo>
+        <echo level="info">java -jar "${dist.jar.resolved}"</echo>
     </target>
+    <target depends="-do-jar-with-libraries-pack" if="do.archive" name="-do-jar-with-libraries-delete-manifest">
+        <delete>
+            <fileset file="${tmp.manifest.file}"/>
+        </delete>
+    </target>
+    <target depends="init,compile,-pre-pre-jar,-pre-jar,-do-jar-with-libraries-create-manifest,-do-jar-with-libraries-copy-manifest,-do-jar-with-libraries-set-main,-do-jar-with-libraries-set-splashscreen,-do-jar-with-libraries-pack,-do-jar-with-libraries-delete-manifest" name="-do-jar-with-libraries"/>
     <target name="-post-jar">
         <!-- Empty placeholder for easier customization. -->
         <!-- You can override this target in the ../build.xml file. -->
     </target>
-    <target depends="init,compile,-pre-jar,-do-jar-with-manifest,-do-jar-without-manifest,-do-jar-with-mainclass,-do-jar-with-libraries-and-splashscreen,-do-jar-with-libraries,-post-jar,-ivy-publish" description="Build JAR." name="jar"/>
+    <target depends="init,compile,-pre-jar,-do-jar-with-manifest,-do-jar-without-manifest,-do-jar-with-mainclass,-do-jar-with-libraries,-post-jar,-ivy-publish" description="Build JAR." name="jar"/>
     <!--
                 =================
                 EXECUTION SECTION
@@ -688,6 +769,72 @@
     </target>
     <target depends="init,-pre-debug-fix,-do-debug-fix" if="netbeans.home" name="debug-fix"/>
     <!--
+                =================
+                PROFILING SECTION
+                =================
+            -->
+    <target depends="profile-init,compile" description="Profile a project in the IDE." if="netbeans.home" name="profile">
+        <nbprofiledirect>
+            <classpath>
+                <path path="${run.classpath}"/>
+            </classpath>
+        </nbprofiledirect>
+        <profile/>
+    </target>
+    <target depends="profile-init,compile-single" description="Profile a selected class in the IDE." if="netbeans.home" name="profile-single">
+        <fail unless="profile.class">Must select one file in the IDE or set profile.class</fail>
+        <nbprofiledirect>
+            <classpath>
+                <path path="${run.classpath}"/>
+            </classpath>
+        </nbprofiledirect>
+        <profile classname="${profile.class}"/>
+    </target>
+    <!--
+                =========================
+                APPLET PROFILING  SECTION
+                =========================
+            -->
+    <target depends="profile-init,compile-single" if="netbeans.home" name="profile-applet">
+        <nbprofiledirect>
+            <classpath>
+                <path path="${run.classpath}"/>
+            </classpath>
+        </nbprofiledirect>
+        <profile classname="sun.applet.AppletViewer">
+            <customize>
+                <arg value="${applet.url}"/>
+            </customize>
+        </profile>
+    </target>
+    <!--
+                =========================
+                TESTS PROFILING  SECTION
+                =========================
+            -->
+    <target depends="profile-init,compile-test-single" if="netbeans.home" name="profile-test-single">
+        <nbprofiledirect>
+            <classpath>
+                <path path="${run.test.classpath}"/>
+            </classpath>
+        </nbprofiledirect>
+        <junit dir="${profiler.info.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" jvm="${profiler.info.jvm}" showoutput="true">
+            <env key="${profiler.info.pathvar}" path="${profiler.info.agentpath}:${profiler.current.path}"/>
+            <jvmarg value="${profiler.info.jvmargs.agent}"/>
+            <jvmarg line="${profiler.info.jvmargs}"/>
+            <test name="${profile.class}"/>
+            <classpath>
+                <path path="${run.test.classpath}"/>
+            </classpath>
+            <syspropertyset>
+                <propertyref prefix="test-sys-prop."/>
+                <mapper from="test-sys-prop.*" to="*" type="glob"/>
+            </syspropertyset>
+            <formatter type="brief" usefile="false"/>
+            <formatter type="xml"/>
+        </junit>
+    </target>
+    <!--
                 ===============
                 JAVADOC SECTION
                 ===============
@@ -733,7 +880,7 @@
     <target if="do.depend.true" name="-compile-test-depend">
         <j2seproject3:depend classpath="${javac.test.classpath}" destdir="${build.test.classes.dir}" srcdir="${test.src.dir}"/>
     </target>
-    <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test,-compile-test-depend" if="have.tests" name="-do-compile-test">
+    <target depends="init,deps-jar,compile,-pre-pre-compile-test,-pre-compile-test,-compile-test-depend" if="have.tests" name="-do-compile-test">
         <j2seproject3:javac apgeneratedsrcdir="${build.test.classes.dir}" classpath="${javac.test.classpath}" debug="true" destdir="${build.test.classes.dir}" processorpath="${javac.test.processorpath}" srcdir="${test.src.dir}"/>
         <copy todir="${build.test.classes.dir}">
             <fileset dir="${test.src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
@@ -748,7 +895,7 @@
         <!-- Empty placeholder for easier customization. -->
         <!-- You can override this target in the ../build.xml file. -->
     </target>
-    <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test-single" if="have.tests" name="-do-compile-test-single">
+    <target depends="init,deps-jar,compile,-pre-pre-compile-test,-pre-compile-test-single" if="have.tests" name="-do-compile-test-single">
         <fail unless="javac.includes">Must select some files in the IDE or set javac.includes</fail>
         <j2seproject3:force-recompile destdir="${build.test.classes.dir}"/>
         <j2seproject3:javac apgeneratedsrcdir="${build.test.classes.dir}" classpath="${javac.test.classpath}" debug="true" destdir="${build.test.classes.dir}" excludes="" includes="${javac.includes}" processorpath="${javac.test.processorpath}" sourcepath="${test.src.dir}" srcdir="${test.src.dir}"/>
--- a/nbproject/genfiles.properties	Sat Apr 16 16:22:27 2011 -0400
+++ b/nbproject/genfiles.properties	Tue Jun 07 18:06:07 2011 -0400
@@ -4,8 +4,8 @@
 # This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
 # Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
 nbproject/build-impl.xml.data.CRC32=f0bc348c
-nbproject/build-impl.xml.script.CRC32=68cd5525
-nbproject/build-impl.xml.stylesheet.CRC32=229523de@1.38.3.45
+nbproject/build-impl.xml.script.CRC32=0c44830b
+nbproject/build-impl.xml.stylesheet.CRC32=0c01fd8e@1.43.1.45
 nbproject/groovy-build.xml.data.CRC32=f0bc348c
 nbproject/groovy-build.xml.script.CRC32=542f299d
 nbproject/groovy-build.xml.stylesheet.CRC32=451a613c@1.12.1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/org/ssdt_ohio/tools/ant/WsdlSetup.java	Tue Jun 07 18:06:07 2011 -0400
@@ -0,0 +1,270 @@
+/* Copyright 2003 Ohio Department of Education, Office of Information Technology,
+ *      25 South Front St, Columbus, Ohio 43215, U.S.A., All Rights Reserved.
+ */
+package org.ssdt_ohio.tools.ant;
+
+import java.io.File;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Task;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+import java.util.regex.Pattern;
+
+/** Simple ant task for maniuplating WSDL settings.
+ *
+ *
+ * @author smith
+ * @since 2007-8-1
+ */
+public class WsdlSetup
+        extends Task {
+
+    private static final String SCHEMA_NS = "http://www.w3.org/2001/XMLSchema";
+    private static final String OECNRPC_NS = "http://xml.ssdt.nwoca.org/OECN-RPC/10";
+    private final List locations = new ArrayList(); /* Store locations */
+
+    private String file;
+    private String destfile;
+    private String typesFile;
+    private String typesPattern = ".*Fault$";
+    private boolean elementFormDefaultQualified = true;
+
+    public void execute() {
+        if (file == null) {
+            throw new BuildException("must specify 'file' as input file");
+        }
+
+        if (destfile == null) {
+            throw new BuildException("must specify 'destfile' as output file");
+        }
+
+        try {
+            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+            dbf.setNamespaceAware(true);
+
+            Document wsdl = dbf.newDocumentBuilder().parse(new File(getFile()));
+            NodeList imports = wsdl.getElementsByTagNameNS(SCHEMA_NS, "import");
+
+            for (int i = 0; i < imports.getLength(); i++) {
+                replaceLocations((Element) imports.item(i));
+            }
+
+            TransformerFactory tFactory = TransformerFactory.newInstance();
+            Transformer transformer = tFactory.newTransformer();
+            DOMSource source = new DOMSource(wsdl);
+            StreamResult result = new StreamResult(new File(getDestfile()));
+            transformer.transform(source, result);
+
+            if (typesFile != null) {
+                generateTypesSchema(wsdl);
+            }
+        } catch (javax.xml.parsers.ParserConfigurationException e) {
+            throw new BuildException(e);
+        } catch (org.xml.sax.SAXException e) {
+            throw new BuildException(e);
+        } catch (java.io.IOException e) {
+            throw new BuildException(e);
+        } catch (javax.xml.transform.TransformerException e) {
+            throw new BuildException(e);
+        }
+    }
+
+    private void replaceLocations(Element imp) {
+        String ns = imp.getAttribute("namespace");
+
+        for (Iterator it = locations.iterator(); it.hasNext();) {
+            SchemaLocation loc = (SchemaLocation) it.next();
+
+            if (ns.equals(loc.getNamespace())) {
+                imp.setAttribute("schemaLocation", loc.getLocation());
+            }
+        }
+    }
+
+    private void generateTypesSchema(Document wsdl)
+            throws BuildException {
+        try {
+            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+            dbf.setNamespaceAware(true);
+
+            Document schema = dbf.newDocumentBuilder().newDocument();
+            Element root = (Element) wsdl.getElementsByTagNameNS(SCHEMA_NS,
+                                                                 "schema").item(0);
+            String targetNamespace = root.getAttribute("targetNamespace");
+
+            schema.appendChild(schema.importNode(root, true));
+            root = schema.getDocumentElement();
+            root.setAttribute("xmlns:xsd", SCHEMA_NS);
+            if (isElementFormDefaultQualified()) {
+                root.setAttribute("elementFormDefault", "qualified");
+            }
+            root.setAttribute("xmlns", targetNamespace);
+            root.setAttribute("xmlns:oecnrpc", OECNRPC_NS);
+
+            for (Iterator it = locations.iterator(); it.hasNext();) {
+                SchemaLocation loc = (SchemaLocation) it.next();
+
+                if (loc.getPrefix() != null) {
+                    root.setAttribute("xmlns:" + loc.getPrefix(), loc.getNamespace());
+                }
+            }
+
+            // Remove everything except the included types.
+            boolean done = false;
+
+            Pattern typesPat = Pattern.compile(getTypesPattern());
+
+            while (!done) {
+                done = true;
+
+                NodeList children = root.getChildNodes();
+
+                for (int i = 0; i < children.getLength(); i++) {
+                    if (children.item(i).getNodeType() == Node.ELEMENT_NODE) {
+                        Element e = (Element) children.item(i);
+
+                        if (!e.getLocalName().equals("import") && !typesPat.matcher(e.
+                                getAttribute("name")).matches()) {
+                            root.removeChild(e);
+                            done = false;
+                        }
+                    }
+                }
+            }
+            TransformerFactory tFactory = TransformerFactory.newInstance();
+            Transformer transformer = tFactory.newTransformer();
+
+            DOMSource source = new DOMSource(schema);
+            StreamResult result = new StreamResult(new File(getTypesFile()));
+            transformer.transform(source, result);
+        } catch (Exception e) {
+            throw new BuildException(e);
+        }
+    }
+  
+    public SchemaLocation createSchemaLocation() {
+        SchemaLocation loc = new SchemaLocation();
+        locations.add(loc);
+
+        return loc;
+    }
+
+    /**
+     * Getter for property file.
+     * @return Value of property file.
+     */
+    public java.lang.String getFile() {
+        return file;
+    }
+
+    /**
+     * Setter for property file.
+     * @param file New value of property file.
+     */
+    public void setFile(java.lang.String file) {
+        this.file = file;
+    }
+
+    /**
+     * Getter for property destfile.
+     * @return Value of property destfile.
+     */
+    public java.lang.String getDestfile() {
+        return destfile;
+    }
+
+    /**
+     * Setter for property destfile.
+     * @param destfile New value of property destfile.
+     */
+    public void setDestfile(java.lang.String destfile) {
+        this.destfile = destfile;
+    }
+
+    /**
+     * Getter for property typesFile.
+     * @return Value of property typesFile.
+     */
+    public java.lang.String getTypesFile() {
+        return typesFile;
+    }
+
+    /**
+     * Setter for property typesFile.
+     * @param typesFile New value of property typesFile.
+     */
+    public void setTypesFile(java.lang.String typesFile) {
+        this.typesFile = typesFile;
+    }
+
+    /**
+     * @return the elementFormDefaultQualified
+     */
+    public boolean isElementFormDefaultQualified() {
+        return elementFormDefaultQualified;
+    }
+
+    /**
+     * @param elementFormDefaultQualified the elementFormDefaultQualified to set
+     */
+    public void setElementFormDefaultQualified(boolean elementFormDefaultQualified) {
+        this.elementFormDefaultQualified = elementFormDefaultQualified;
+    }
+
+    /** A nested 'schemaLocation' object. */
+    public class SchemaLocation {
+
+        private String namespace;
+        private String location;
+        private String prefix;
+
+        public SchemaLocation() {
+        }
+
+        public java.lang.String getNamespace() {
+            return namespace;
+        }
+
+        public void setNamespace(java.lang.String namespace) {
+            this.namespace = namespace;
+        }
+
+        public java.lang.String getLocation() {
+            return location;
+        }
+
+        public void setLocation(java.lang.String location) {
+            this.location = location;
+        }
+
+        public String getPrefix() {
+            return prefix;
+        }
+
+        public void setPrefix(String prefix) {
+            this.prefix = prefix;
+        }
+    }
+
+    public String getTypesPattern() {
+        return typesPattern;
+    }
+
+    public void setTypesPattern(String typesPattern) {
+        this.typesPattern = typesPattern;
+    }
+}
--- a/src/org/ssdt_ohio/tools/ant/antlib.xml	Sat Apr 16 16:22:27 2011 -0400
+++ b/src/org/ssdt_ohio/tools/ant/antlib.xml	Tue Jun 07 18:06:07 2011 -0400
@@ -1,3 +1,4 @@
 <antlib>
     <taskdef name="add-dependency" classname="org.ssdt_ohio.tools.ant.AddDependencyTask" onerror="ignore" />
+    <taskdef name="wsdlsetup" classname="org.ssdt_ohio.tools.ant.WsdlSetup" onerror="ignore" />
 </antlib>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/org/ssdt_ohio/tools/ant/wsd2html.xsl	Tue Jun 07 18:06:07 2011 -0400
@@ -0,0 +1,482 @@
+<?xml version="1.0"?>
+<xsl:stylesheet
+		version="1.0"
+		xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+		xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
+		xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
+		xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
+		xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
+		xmlns:x="http://ssdt.nwoca.org/xml/wsdl2html"
+		xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+	
+	<xsl:output method="html" omit-xml-declaration="yes"/>
+        <xsl:variable name="wsd2htmlVersion" select="'ssdt wsd2html 0.2-0'"/>
+	<xsl:variable name="defaultNamespace">
+		<xsl:for-each select="wsdl:definitions/namespace::*">
+			<xsl:if test="not(name())">
+				<xsl:value-of select="."/>
+			</xsl:if>
+		</xsl:for-each>
+	</xsl:variable>
+	<xsl:variable name="targetNamespace" select="wsdl:definitions/@targetNamespace"/>
+	
+	<xsl:template match="/">
+		<HTML>
+			<HEAD>
+				<TITLE>Web Service Description: <xsl:value-of select="wsdl:definitions/wsdl:service/@name"/>
+				</TITLE>
+				<META HTTP-EQUIV="content-type" content="text/html" charset="UTF-8"/>
+				<STYLE TYPE="text/css">
+BODY {
+	margin-left: 5%;
+	margin-right: 5%;
+}
+H1 {
+ 		background-color: lightgrey;
+}
+H2 {
+ 		background-color: lightgrey;
+}
+H3 {
+ 		background-color: #00CCCC;
+		text-indent: .5em;
+		border: thin solid black;
+		width: 95%;
+}
+P {
+}
+TABLE {
+	border: thin solid black;
+	left-margin: 20em;	
+	width: 80%;
+}
+TD {
+	border: thin solid black;
+	padding: .2em;
+}
+.xml {
+   border: thin dotted blue;
+   padding: .5em;
+   width: 70%;
+   margin-left: 5%;
+}
+.xml UL LI {
+	list-style-image: none;
+	list-style-type: none;
+}
+.attrValue {
+	color: rgb(153, 51, 51);
+        font-weight: bold;
+}
+.attrName {
+	color: rgb(0, 0, 102);
+ }
+.xmlElement {
+	color: black;
+        font-weight: bold;
+}
+
+</STYLE>
+			</HEAD>
+			<BODY>
+				<H1>Web Service Description: <xsl:value-of select="wsdl:definitions/wsdl:service/@name"/>
+				</H1>
+				<h2>Contents</h2>
+				<ul>
+					<li>
+						<a href="#operations">Operations</a>
+					</li>
+					<li>
+						<a href="#messages">Messages</a>
+					</li>
+					<li>
+						<a href="#elements">Elements</a>
+					</li>
+					<li>
+						<a href="#types">Types</a>
+					</li>
+				</ul>
+				<hr/>
+				
+				
+                                <xsl:call-template name="getDoc">
+                                    <xsl:with-param name="doc" select="wsdl:definitions/wsdl:documentation"/>
+                                </xsl:call-template>                                
+                                
+				<HR/>
+				
+				<xsl:apply-templates select="wsdl:definitions/wsdl:service"/>
+				
+				<hr/>
+				
+				<h2>Namespaces:</h2>
+				<table>
+					<tr>
+						<th>Prefix</th>
+						<th>Namespace</th>
+					</tr>
+					<xsl:for-each select="wsdl:definitions/namespace::*">
+					<xsl:sort select="name()"/>
+						<tr>
+							<td>
+								<xsl:choose>
+									<xsl:when test="name()">
+										<xsl:value-of select="name()"/>
+									</xsl:when>
+									<xsl:otherwise>
+										<xsl:text>[Default]</xsl:text>
+									</xsl:otherwise>
+								</xsl:choose>
+							</td>
+							<td>
+								<xsl:value-of select="."/>
+							</td>
+						</tr>
+					</xsl:for-each>
+				</table>
+				
+				<h2>Imported Schemas</h2>
+				
+				<table>
+					<tr>
+						<th>Namespace</th>
+						<th>Location</th>
+					</tr>
+					<xsl:for-each select="wsdl:definitions/wsdl:types/xsd:schema/xsd:import">
+						<tr>
+							<td>
+								<xsl:value-of select="@namespace"/>
+							</td>
+							<td>
+								<xsl:value-of select="@schemaLocation"/>
+							</td>
+						</tr>
+					</xsl:for-each>
+				</table>
+				
+				<HR/>
+				<a name="operations" id="operations"/>
+				<H2>Port Type: <xsl:value-of select="wsdl:definitions/wsdl:portType/@name"/>
+				</H2>
+				<xsl:apply-templates select="wsdl:definitions/wsdl:portType"/>
+				
+				<H2>Operations Detail</H2>
+				<xsl:apply-templates select="wsdl:definitions/wsdl:portType/wsdl:operation">
+				 <xsl:sort select="@name"/>	
+				</xsl:apply-templates>
+				
+				<a name="messages" id="messages"/>
+				<H2>Messsages</H2>
+				<table>
+                                <tr><th>Message</th><th>Parameter</th></tr>
+					<xsl:apply-templates select="wsdl:definitions/wsdl:message">
+					<xsl:sort select="@name"/>
+					</xsl:apply-templates>
+				</table>
+				
+				<a name="elements" id="elements"/>
+				<H2>Elements</H2>
+				<ul>
+				<xsl:apply-templates select="wsdl:definitions/wsdl:types/xsd:schema/xsd:element" mode="summary">
+				<xsl:sort select="@name"/>
+				</xsl:apply-templates>
+				</ul>
+				<xsl:apply-templates select="wsdl:definitions/wsdl:types/xsd:schema/xsd:element" mode="detail">
+				<xsl:sort select="@name"/>
+				</xsl:apply-templates>
+	
+				<a name="types" id="types"/>
+				<H2>Types</H2>
+				<ul>
+				<xsl:apply-templates select="wsdl:definitions/wsdl:types/xsd:schema/xsd:complexType | wsdl:definitions/wsdl:types/xsd:schema/xsd:simpleType"
+					mode="summary">
+					<xsl:sort select="@name"/>
+				</xsl:apply-templates>
+				</ul>
+				<hr/>
+				
+				<xsl:apply-templates select="wsdl:definitions/wsdl:types/xsd:schema/xsd:complexType | wsdl:definitions/wsdl:types/xsd:schema/xsd:simpleType"
+					mode="detail">
+				<xsl:sort select="@name"/>
+				</xsl:apply-templates>
+				
+                <hr/>				
+		<i><font size="-1">Generated by <xsl:value-of select="$wsd2htmlVersion"/></font></i>	
+			</BODY>
+		</HTML>
+	</xsl:template>
+	
+	<xsl:template match="wsdl:operation">
+		<a name="o-{@name}" id="o-{@name}"/>
+		<h3>Operation: <xsl:value-of select="@name"/>
+		</h3>
+                                <xsl:call-template name="getDoc">
+                                    <xsl:with-param name="doc" select="wsdl:documentation"/>
+                                </xsl:call-template>                                
+                <table>
+			<tr>
+				<td>Input</td>
+				<td>
+					<a href="#m-{wsdl:input/@name}">
+						<xsl:value-of select="wsdl:input/@name"/>
+					</a>
+				</td>
+			</tr>
+			<tr>
+				<td>Output</td>
+				<td>
+					<a href="#m-{wsdl:output/@name}">
+						<xsl:value-of select="wsdl:output/@name"/>
+					</a>
+				</td>
+			</tr>
+			<xsl:for-each select="wsdl:fault">
+				<tr>
+					<td>Fault</td>
+					<td>
+                                            <xsl:variable name="typeName">
+                                                    <xsl:call-template name="getQname">
+                                                            <xsl:with-param name="elementName" select="@name"/>
+                                                    </xsl:call-template>
+                                            </xsl:variable>
+                                            <xsl:variable name="anchor">
+                                                    <xsl:call-template name="getAnchor">
+                                                            <xsl:with-param name="anchorText" select="$typeName"/>
+                                                    </xsl:call-template>
+                                            </xsl:variable>                                        
+                                            <a href="#ty-{$anchor}">
+						<xsl:value-of select="@name"/>
+                                            </a>                                        
+					
+					</td>
+					<td>
+                                <xsl:call-template name="getDoc">
+                                    <xsl:with-param name="doc" select="wsdl:documentation"/>
+                                </xsl:call-template>                                
+                                        
+					</td>
+				</tr>
+			</xsl:for-each>
+		</table>
+	
+	</xsl:template>
+	
+	<xsl:template match="wsdl:message">
+		<tr><td>
+                        <a name="m-{@name}" id="m-{@name}"/>
+                        
+			<xsl:value-of select="@name"/>
+                        </td><td>
+                        <xsl:variable name="typeName">
+				<xsl:call-template name="getQname">
+					<xsl:with-param name="elementName" select="wsdl:part/@element"/>
+				</xsl:call-template>
+			</xsl:variable>
+			<xsl:variable name="anchor">
+				<xsl:call-template name="getAnchor">
+					<xsl:with-param name="anchorText" select="$typeName"/>
+				</xsl:call-template>
+			</xsl:variable>
+                        <a href="#e-{$anchor}"> <xsl:value-of select="$typeName"/>
+			</a>
+              </td></tr>
+		
+	</xsl:template>
+	
+	<xsl:template name="getAnchor">
+		<xsl:param name="anchorText"/>
+		<xsl:value-of select="translate(normalize-space($anchorText),':/.[]', '_____')"/>
+	</xsl:template>
+	
+	<xsl:template name="getQname">
+		<xsl:param name="elementName"/>
+		<xsl:choose>
+			<xsl:when test="contains($elementName,':')">
+				[<xsl:value-of select="/wsdl:definitions/namespace::*[name()=substring-before($elementName,':')]"/>]:<xsl:value-of select="substring-after($elementName,':')"/>
+			</xsl:when>
+			<xsl:otherwise>
+				[<xsl:value-of select="$defaultNamespace"/>]:<xsl:value-of select="$elementName"/>
+			</xsl:otherwise>
+		</xsl:choose>
+	</xsl:template>
+
+
+
+	
+	<xsl:template match="xsd:element" mode="summary">
+		<xsl:variable name="typeName">
+			<xsl:call-template name="getQname">
+				<xsl:with-param name="elementName" select="@name"/>
+			</xsl:call-template>
+		</xsl:variable>
+		<xsl:variable name="anchor">
+			<xsl:call-template name="getAnchor">
+				<xsl:with-param name="anchorText" select="$typeName"/>
+			</xsl:call-template>
+		</xsl:variable>
+		<li><a href="#e-{$anchor}"><xsl:value-of select="@name"/></a></li>
+	</xsl:template>
+
+	
+	<xsl:template match="xsd:element" mode="detail">
+		
+		<xsl:variable name="typeName">
+			<xsl:call-template name="getQname">
+				<xsl:with-param name="elementName" select="@name"/>
+			</xsl:call-template>
+		</xsl:variable>
+		<xsl:variable name="anchor">
+			<xsl:call-template name="getAnchor">
+				<xsl:with-param name="anchorText" select="$typeName"/>
+			</xsl:call-template>
+		</xsl:variable>
+		
+		<a name="e-{$anchor}" id="e-{$anchor}"/>
+		<h3>
+			<xsl:value-of select="$typeName"/>
+		</h3>
+		<div class="xml">
+			<xsl:call-template name="codeXml"/>
+		</div>
+	</xsl:template>
+
+
+
+	<xsl:template match="xsd:complexType | xsd:simpleType" mode="summary">
+		<xsl:variable name="typeName">
+			<xsl:call-template name="getQname">
+				<xsl:with-param name="elementName" select="@name"/>
+			</xsl:call-template>
+		</xsl:variable>
+		<xsl:variable name="anchor">
+			<xsl:call-template name="getAnchor">
+				<xsl:with-param name="anchorText" select="$typeName"/>
+			</xsl:call-template>
+		</xsl:variable>
+
+        	<li><a href="#ty-{$anchor}"><xsl:value-of select="@name"/></a></li>
+	</xsl:template>
+
+
+	
+	<xsl:template match="xsd:complexType | xsd:simpleType" mode="detail">
+		<xsl:variable name="typeName">
+			<xsl:call-template name="getQname">
+				<xsl:with-param name="elementName" select="@name"/>
+			</xsl:call-template>
+		</xsl:variable>
+		<xsl:variable name="anchor">
+			<xsl:call-template name="getAnchor">
+				<xsl:with-param name="anchorText" select="$typeName"/>
+			</xsl:call-template>
+		</xsl:variable>
+		
+		<a name="ty-{$anchor}" id="ty-{$anchor}"/>
+		<h3>
+			<xsl:value-of select="@name"/>
+		</h3>
+		<div class="xml">
+			<xsl:call-template name="codeXml"/>
+		</div>
+	</xsl:template>
+	
+	<xsl:template match="wsdl:service">
+		<h2>Service Summary: Service: <xsl:value-of select="@name"/>
+		</h2>
+		<xsl:for-each select="wsdl:port">
+			<p>Port name:  <xsl:value-of select="@name"/>
+				<br/>
+          Endpoint URL: <xsl:value-of select="*[local-name()='address']/@location"/>
+				<br/>
+          Binding: <xsl:value-of select="@binding"/>
+			</p>
+		</xsl:for-each>
+	</xsl:template>
+	
+	<xsl:template match="wsdl:portType">
+     Operations:
+     <table>
+     <tr><th>Operation</th>
+				<th>Description</th>
+			</tr>
+			<xsl:for-each select="wsdl:operation">
+				<xsl:sort select="@name"/>
+				<tr>
+					<td>
+						<a href="#o-{@name}">
+							<xsl:value-of select="@name"/>
+						</a>
+					</td>
+					<td>
+						<xsl:call-template name="getShortDescription">
+							<xsl:with-param name="desc" select="wsdl:documentation"/>
+						</xsl:call-template>
+					</td>
+				</tr>
+			</xsl:for-each>
+		</table>
+	</xsl:template>
+	
+	<xsl:template name="getShortDescription">
+		<xsl:param name="desc"/>
+		<xsl:choose>
+			<xsl:when test="contains($desc,'.')">
+				<xsl:value-of select="substring-before($desc,'.')"/>
+			</xsl:when>
+			<xsl:otherwise>
+				<xsl:value-of select="$desc"/>
+			</xsl:otherwise>
+		</xsl:choose>.
+	</xsl:template>
+	
+	<xsl:template name="codeXml">
+		<xsl:choose>
+			<xsl:when test="name()='xsd:annotation'">
+				<UL>
+					<LI>
+						<P>
+                                <xsl:call-template name="getDoc">
+                                    <xsl:with-param name="doc" select="xsd:documentation"/>
+                                </xsl:call-template>                                
+                                                	</P>
+					</LI>
+				</UL>
+			</xsl:when>
+			<xsl:otherwise>
+				<ul>
+					<li>&lt;<span class="xmlElement"><xsl:value-of select="name()"/></span>
+						<xsl:for-each select="@*"><xsl:text> </xsl:text>
+							<span class="attrName"><xsl:value-of select="name()"/></span>="<span class="attrValue"><xsl:value-of select="."/>
+							</span>"
+						</xsl:for-each>
+						<xsl:choose>
+							<xsl:when test="count(*) = 0">
+								<xsl:text>/&gt;</xsl:text>
+							</xsl:when>
+							<xsl:otherwise>
+					&gt;
+						<xsl:for-each select="*">
+							<xsl:call-template name="codeXml"/>
+								</xsl:for-each>
+						&lt;/<span class="xmlElement"><xsl:value-of select="name()"/></span>&gt;
+					</xsl:otherwise>
+						</xsl:choose>
+					</li>
+				</ul>
+			</xsl:otherwise>
+		</xsl:choose>
+	</xsl:template>
+        
+        <xsl:template name="getDoc">
+        <xsl:param name="doc"/>
+        <xsl:choose>
+         <xsl:when test="$doc/*">
+            <xsl:copy-of select="$doc/*"/>     
+        </xsl:when>
+	<xsl:otherwise>
+            <xsl:value-of select="$doc/text()"/>            
+        </xsl:otherwise>			
+        </xsl:choose>
+        </xsl:template>
+
+</xsl:stylesheet>
\ No newline at end of file