Mercurial > public > ssdtant
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><<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>/></xsl:text> + </xsl:when> + <xsl:otherwise> + > + <xsl:for-each select="*"> + <xsl:call-template name="codeXml"/> + </xsl:for-each> + </<span class="xmlElement"><xsl:value-of select="name()"/></span>> + </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