diff --git a/build.xml b/build.xml
new file mode 100644
index 0000000..1d38b0d
--- /dev/null
+++ b/build.xml
@@ -0,0 +1,71 @@
+
+
+
+
+
+
+
+
+
+
+ Builds, tests, and runs the project XServices.
+
+
+
diff --git a/lib/activation.jar b/lib/activation.jar
new file mode 100644
index 0000000..3869b58
Binary files /dev/null and b/lib/activation.jar differ
diff --git a/lib/ant-antlr.jar b/lib/ant-antlr.jar
new file mode 100644
index 0000000..e6ac589
Binary files /dev/null and b/lib/ant-antlr.jar differ
diff --git a/lib/ant-apache-bcel.jar b/lib/ant-apache-bcel.jar
new file mode 100644
index 0000000..6821049
Binary files /dev/null and b/lib/ant-apache-bcel.jar differ
diff --git a/lib/ant-apache-bsf.jar b/lib/ant-apache-bsf.jar
new file mode 100644
index 0000000..1b0daf9
Binary files /dev/null and b/lib/ant-apache-bsf.jar differ
diff --git a/lib/ant-apache-log4j.jar b/lib/ant-apache-log4j.jar
new file mode 100644
index 0000000..32de4b0
Binary files /dev/null and b/lib/ant-apache-log4j.jar differ
diff --git a/lib/ant-apache-oro.jar b/lib/ant-apache-oro.jar
new file mode 100644
index 0000000..a0a2435
Binary files /dev/null and b/lib/ant-apache-oro.jar differ
diff --git a/lib/ant-apache-regexp.jar b/lib/ant-apache-regexp.jar
new file mode 100644
index 0000000..2214d89
Binary files /dev/null and b/lib/ant-apache-regexp.jar differ
diff --git a/lib/ant-apache-resolver.jar b/lib/ant-apache-resolver.jar
new file mode 100644
index 0000000..54388ed
Binary files /dev/null and b/lib/ant-apache-resolver.jar differ
diff --git a/lib/ant-commons-logging.jar b/lib/ant-commons-logging.jar
new file mode 100644
index 0000000..f2eaa8a
Binary files /dev/null and b/lib/ant-commons-logging.jar differ
diff --git a/lib/ant-commons-net.jar b/lib/ant-commons-net.jar
new file mode 100644
index 0000000..0208417
Binary files /dev/null and b/lib/ant-commons-net.jar differ
diff --git a/lib/ant-jai.jar b/lib/ant-jai.jar
new file mode 100644
index 0000000..4ce81f0
Binary files /dev/null and b/lib/ant-jai.jar differ
diff --git a/lib/ant-javamail.jar b/lib/ant-javamail.jar
new file mode 100644
index 0000000..1d8a3eb
Binary files /dev/null and b/lib/ant-javamail.jar differ
diff --git a/lib/ant-jdepend.jar b/lib/ant-jdepend.jar
new file mode 100644
index 0000000..4e7d2be
Binary files /dev/null and b/lib/ant-jdepend.jar differ
diff --git a/lib/ant-jmf.jar b/lib/ant-jmf.jar
new file mode 100644
index 0000000..536d507
Binary files /dev/null and b/lib/ant-jmf.jar differ
diff --git a/lib/ant-jsch.jar b/lib/ant-jsch.jar
new file mode 100644
index 0000000..394fdef
Binary files /dev/null and b/lib/ant-jsch.jar differ
diff --git a/lib/ant-junit.jar b/lib/ant-junit.jar
new file mode 100644
index 0000000..063cce4
Binary files /dev/null and b/lib/ant-junit.jar differ
diff --git a/lib/ant-launcher.jar b/lib/ant-launcher.jar
new file mode 100644
index 0000000..7c8f849
Binary files /dev/null and b/lib/ant-launcher.jar differ
diff --git a/lib/ant-netrexx.jar b/lib/ant-netrexx.jar
new file mode 100644
index 0000000..9f368ac
Binary files /dev/null and b/lib/ant-netrexx.jar differ
diff --git a/lib/ant-nodeps.jar b/lib/ant-nodeps.jar
new file mode 100644
index 0000000..98b5518
Binary files /dev/null and b/lib/ant-nodeps.jar differ
diff --git a/lib/ant-starteam.jar b/lib/ant-starteam.jar
new file mode 100644
index 0000000..ffd7104
Binary files /dev/null and b/lib/ant-starteam.jar differ
diff --git a/lib/ant-stylebook.jar b/lib/ant-stylebook.jar
new file mode 100644
index 0000000..e78ed49
Binary files /dev/null and b/lib/ant-stylebook.jar differ
diff --git a/lib/ant-swing.jar b/lib/ant-swing.jar
new file mode 100644
index 0000000..641c5e9
Binary files /dev/null and b/lib/ant-swing.jar differ
diff --git a/lib/ant-testutil.jar b/lib/ant-testutil.jar
new file mode 100644
index 0000000..10f5230
Binary files /dev/null and b/lib/ant-testutil.jar differ
diff --git a/lib/ant-trax.jar b/lib/ant-trax.jar
new file mode 100644
index 0000000..7c4d564
Binary files /dev/null and b/lib/ant-trax.jar differ
diff --git a/lib/ant-weblogic.jar b/lib/ant-weblogic.jar
new file mode 100644
index 0000000..aa7d318
Binary files /dev/null and b/lib/ant-weblogic.jar differ
diff --git a/lib/ant.jar b/lib/ant.jar
new file mode 100644
index 0000000..7047177
Binary files /dev/null and b/lib/ant.jar differ
diff --git a/lib/commons-logging-api-1.0.4.jar b/lib/commons-logging-api-1.0.4.jar
new file mode 100644
index 0000000..ade9a13
Binary files /dev/null and b/lib/commons-logging-api-1.0.4.jar differ
diff --git a/lib/commons-net-2.0.jar b/lib/commons-net-2.0.jar
new file mode 100644
index 0000000..dd7a52a
Binary files /dev/null and b/lib/commons-net-2.0.jar differ
diff --git a/lib/commons-net-ftp-2.0.jar b/lib/commons-net-ftp-2.0.jar
new file mode 100644
index 0000000..f697534
Binary files /dev/null and b/lib/commons-net-ftp-2.0.jar differ
diff --git a/lib/jakarta-oro-2.0.8.jar b/lib/jakarta-oro-2.0.8.jar
new file mode 100644
index 0000000..23488d2
Binary files /dev/null and b/lib/jakarta-oro-2.0.8.jar differ
diff --git a/lib/java-unrar-0.3.jar b/lib/java-unrar-0.3.jar
new file mode 100644
index 0000000..48bebc9
Binary files /dev/null and b/lib/java-unrar-0.3.jar differ
diff --git a/lib/jsch-0.1.42.jar b/lib/jsch-0.1.42.jar
new file mode 100644
index 0000000..c65eff0
Binary files /dev/null and b/lib/jsch-0.1.42.jar differ
diff --git a/lib/webservices-api.jar b/lib/webservices-api.jar
new file mode 100644
index 0000000..56f6c24
Binary files /dev/null and b/lib/webservices-api.jar differ
diff --git a/lib/webservices-extra-api.jar b/lib/webservices-extra-api.jar
new file mode 100644
index 0000000..c239e6d
Binary files /dev/null and b/lib/webservices-extra-api.jar differ
diff --git a/lib/webservices-extra.jar b/lib/webservices-extra.jar
new file mode 100644
index 0000000..f92db17
Binary files /dev/null and b/lib/webservices-extra.jar differ
diff --git a/lib/webservices-rt.jar b/lib/webservices-rt.jar
new file mode 100644
index 0000000..98a155d
Binary files /dev/null and b/lib/webservices-rt.jar differ
diff --git a/lib/webservices-tools.jar b/lib/webservices-tools.jar
new file mode 100644
index 0000000..646e1f6
Binary files /dev/null and b/lib/webservices-tools.jar differ
diff --git a/nbproject/ant-deploy.xml b/nbproject/ant-deploy.xml
new file mode 100644
index 0000000..a6f1480
--- /dev/null
+++ b/nbproject/ant-deploy.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/nbproject/build-impl.xml b/nbproject/build-impl.xml
new file mode 100644
index 0000000..d65bf22
--- /dev/null
+++ b/nbproject/build-impl.xml
@@ -0,0 +1,931 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must set src.dir
+ Must set test.src.dir
+ Must set build.dir
+ Must set build.web.dir
+ Must set build.generated.dir
+ Must set dist.dir
+ Must set build.classes.dir
+ Must set dist.javadoc.dir
+ Must set build.test.classes.dir
+ Must set build.test.results.dir
+ Must set build.classes.excludes
+ Must set dist.war
+
+The Java EE server classpath is not correctly set up. Your active server type is ${j2ee.server.type}.
+Either open the project in the IDE and assign the server or setup the server classpath manually.
+For example like this:
+ ant -Duser.properties.file=<path_to_property_file> (where you put the property "j2ee.platform.classpath" in a .properties file)
+or ant -Dj2ee.platform.classpath=<server_classpath> (where no properties file is used)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+The libs.CopyLibs.classpath property is not set up.
+This property must point to
+org-netbeans-modules-java-j2seproject-copylibstask.jar file which is part
+of NetBeans IDE installation and is usually located at
+<netbeans_installation>/java<version>/ant/extra folder.
+Either open the project in the IDE and make sure CopyLibs library
+exists or setup the property manually. For example like this:
+ ant -Dlibs.CopyLibs.classpath=a/path/to/org-netbeans-modules-java-j2seproject-copylibstask.jar
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must select some files in the IDE or set javac.includes
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must select some files in the IDE or set javac.jsp.includes
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must select a file in the IDE or set jsp.includes
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Browser not found, cannot launch the deployed application. Try to set the BROWSER environment variable.
+
+
+ Launching ${browse.url}
+
+
+
+
+
+ Must select one file in the IDE or set run.class
+
+
+
+ Must select one file in the IDE or set run.class
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must select one file in the IDE or set debug.class
+
+
+
+
+
+
+
+
+
+
+
+ Must select one file in the IDE or set debug.class
+
+
+
+
+ Must set fix.includes
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must select some files in the IDE or set javac.includes
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Some tests failed; see details above.
+
+
+
+
+
+
+
+
+ Must select some files in the IDE or set test.includes
+
+
+
+ Some tests failed; see details above.
+
+
+
+
+ Must select one file in the IDE or set test.class
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/nbproject/genfiles.properties b/nbproject/genfiles.properties
new file mode 100644
index 0000000..828c037
--- /dev/null
+++ b/nbproject/genfiles.properties
@@ -0,0 +1,9 @@
+build.xml.data.CRC32=7ba4ef3e
+build.xml.script.CRC32=d8ac74c8
+build.xml.stylesheet.CRC32=c0ebde35@1.21.1.1
+# 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=7ba4ef3e
+nbproject/build-impl.xml.script.CRC32=67947c0e
+nbproject/build-impl.xml.stylesheet.CRC32=b139b33b@1.21.1.1
+nbproject/jaxws-build.xml.stylesheet.CRC32=83928735
diff --git a/nbproject/jax-ws.xml b/nbproject/jax-ws.xml
new file mode 100644
index 0000000..f7b35c3
--- /dev/null
+++ b/nbproject/jax-ws.xml
@@ -0,0 +1,16 @@
+
+
+
+
+ net.brutex.xservices.ws.ExecuteService
+
+
+ net.brutex.xservices.ws.ArchiveService
+
+
+ net.brutex.xservices.ws.FileService
+
+
+
+ false
+
diff --git a/nbproject/jaxws-build.xml b/nbproject/jaxws-build.xml
new file mode 100644
index 0000000..0c90811
--- /dev/null
+++ b/nbproject/jaxws-build.xml
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/nbproject/project.properties b/nbproject/project.properties
new file mode 100644
index 0000000..739f2ed
--- /dev/null
+++ b/nbproject/project.properties
@@ -0,0 +1,145 @@
+build.classes.dir=${build.web.dir}/WEB-INF/classes
+build.classes.excludes=**/*.java,**/*.form
+build.dir=build
+build.generated.dir=${build.dir}/generated
+build.generated.sources.dir=${build.dir}/generated-sources
+build.test.classes.dir=${build.dir}/test/classes
+build.test.results.dir=${build.dir}/test/results
+build.web.dir=${build.dir}/web
+build.web.excludes=${build.classes.excludes}
+client.urlPart=
+compile.jsps=false
+conf.dir=${source.root}/conf
+debug.classpath=${build.classes.dir}:${javac.classpath}
+debug.test.classpath=\
+ ${run.test.classpath}
+display.browser=true
+dist.dir=dist
+dist.ear.war=${dist.dir}/${war.ear.name}
+dist.javadoc.dir=${dist.dir}/javadoc
+dist.war=${dist.dir}/${war.name}
+endorsed.classpath=
+excludes=
+file.reference.activation.jar=lib/activation.jar
+file.reference.ant-antlr.jar=lib/ant-antlr.jar
+file.reference.ant-apache-bcel.jar=lib/ant-apache-bcel.jar
+file.reference.ant-apache-bsf.jar=lib/ant-apache-bsf.jar
+file.reference.ant-apache-log4j.jar=lib/ant-apache-log4j.jar
+file.reference.ant-apache-oro.jar=lib/ant-apache-oro.jar
+file.reference.ant-apache-regexp.jar=lib/ant-apache-regexp.jar
+file.reference.ant-apache-resolver.jar=lib/ant-apache-resolver.jar
+file.reference.ant-commons-logging.jar=lib/ant-commons-logging.jar
+file.reference.ant-commons-net.jar=lib/ant-commons-net.jar
+file.reference.ant-jai.jar=lib/ant-jai.jar
+file.reference.ant-javamail.jar=lib/ant-javamail.jar
+file.reference.ant-jdepend.jar=lib/ant-jdepend.jar
+file.reference.ant-jmf.jar=lib/ant-jmf.jar
+file.reference.ant-jsch.jar=lib/ant-jsch.jar
+file.reference.ant-junit.jar=lib/ant-junit.jar
+file.reference.ant-launcher.jar=lib/ant-launcher.jar
+file.reference.ant-netrexx.jar=lib/ant-netrexx.jar
+file.reference.ant-nodeps.jar=lib/ant-nodeps.jar
+file.reference.ant-starteam.jar=lib/ant-starteam.jar
+file.reference.ant-stylebook.jar=lib/ant-stylebook.jar
+file.reference.ant-swing.jar=lib/ant-swing.jar
+file.reference.ant-testutil.jar=lib/ant-testutil.jar
+file.reference.ant-trax.jar=lib/ant-trax.jar
+file.reference.ant-weblogic.jar=lib/ant-weblogic.jar
+file.reference.commons-logging-api-1.0.4.jar=lib/commons-logging-api-1.0.4.jar
+file.reference.commons-net-2.0.jar=lib/commons-net-2.0.jar
+file.reference.commons-net-ftp-2.0.jar=lib/commons-net-ftp-2.0.jar
+file.reference.jakarta-oro-2.0.8.jar=lib/jakarta-oro-2.0.8.jar
+file.reference.java-unrar-0.3.jar=lib/java-unrar-0.3.jar
+file.reference.jsch-0.1.42.jar=lib/jsch-0.1.42.jar
+file.reference.webservices-api.jar=lib/webservices-api.jar
+file.reference.webservices-extra-api.jar=lib/webservices-extra-api.jar
+file.reference.webservices-extra.jar=lib/webservices-extra.jar
+file.reference.webservices-rt.jar=lib/webservices-rt.jar
+file.reference.webservices-tools.jar=lib/webservices-tools.jar
+includes=**
+j2ee.deploy.on.save=true
+j2ee.platform=1.5
+j2ee.server.type=Tomcat60
+jar.compress=false
+javac.classpath=\
+ ${file.reference.activation.jar}:\
+ ${file.reference.webservices-api.jar}:\
+ ${file.reference.webservices-extra-api.jar}:\
+ ${file.reference.webservices-extra.jar}:\
+ ${file.reference.webservices-rt.jar}:\
+ ${file.reference.webservices-tools.jar}:\
+ ${file.reference.ant-antlr.jar}:\
+ ${file.reference.ant-apache-bcel.jar}:\
+ ${file.reference.ant-apache-bsf.jar}:\
+ ${file.reference.ant-apache-log4j.jar}:\
+ ${file.reference.ant-apache-oro.jar}:\
+ ${file.reference.ant-apache-regexp.jar}:\
+ ${file.reference.ant-apache-resolver.jar}:\
+ ${file.reference.ant-commons-logging.jar}:\
+ ${file.reference.ant-commons-net.jar}:\
+ ${file.reference.ant-jai.jar}:\
+ ${file.reference.ant-javamail.jar}:\
+ ${file.reference.ant-jdepend.jar}:\
+ ${file.reference.ant-jmf.jar}:\
+ ${file.reference.ant-jsch.jar}:\
+ ${file.reference.ant-junit.jar}:\
+ ${file.reference.ant-launcher.jar}:\
+ ${file.reference.ant-netrexx.jar}:\
+ ${file.reference.ant-nodeps.jar}:\
+ ${file.reference.ant-starteam.jar}:\
+ ${file.reference.ant-stylebook.jar}:\
+ ${file.reference.ant-swing.jar}:\
+ ${file.reference.ant-testutil.jar}:\
+ ${file.reference.ant-trax.jar}:\
+ ${file.reference.ant-weblogic.jar}:\
+ ${file.reference.jsch-0.1.42.jar}:\
+ ${file.reference.commons-net-2.0.jar}:\
+ ${file.reference.commons-net-ftp-2.0.jar}:\
+ ${file.reference.jakarta-oro-2.0.8.jar}:\
+ ${libs.ApacheAnt.classpath}:\
+ ${file.reference.java-unrar-0.3.jar}:\
+ ${file.reference.commons-logging-api-1.0.4.jar}
+# Space-separated list of extra javac options
+javac.compilerargs=
+javac.debug=true
+javac.deprecation=true
+javac.source=1.5
+javac.target=1.5
+javac.test.classpath=\
+ ${javac.classpath}:\
+ ${build.classes.dir}:\
+ ${libs.junit.classpath}:\
+ ${libs.junit_4.classpath}
+javadoc.additionalparam=
+javadoc.author=true
+javadoc.encoding=${source.encoding}
+javadoc.noindex=false
+javadoc.nonavbar=false
+javadoc.notree=false
+javadoc.preview=true
+javadoc.private=false
+javadoc.splitindex=false
+javadoc.use=true
+javadoc.version=false
+javadoc.windowtitle=XServices Javadoc
+jaxbwiz.endorsed.dirs="${netbeans.home}/../ide12/modules/ext/jaxb/api"
+jspcompilation.classpath=${jspc.classpath}:${javac.classpath}
+lib.dir=${web.docbase.dir}/WEB-INF/lib
+persistence.xml.dir=${conf.dir}
+platform.active=default_platform
+resource.dir=setup
+run.test.classpath=\
+ ${javac.test.classpath}:\
+ ${build.test.classes.dir}
+# Space-separated list of JVM arguments used when running a class with a main method or a unit test
+# (you may also define separate properties like run-sys-prop.name=value instead of -Dname=value):
+runmain.jvmargs=
+source.encoding=UTF-8
+source.root=src
+src.dir=${source.root}/java
+test.src.dir=test
+war.content.additional=
+war.ear.name=XServices.war
+war.name=XServices.war
+web.docbase.dir=web
+webinf.dir=web/WEB-INF
diff --git a/nbproject/project.xml b/nbproject/project.xml
new file mode 100644
index 0000000..c40eeac
--- /dev/null
+++ b/nbproject/project.xml
@@ -0,0 +1,170 @@
+
+
+ org.netbeans.modules.web.project
+
+
+
+
+
+ XServices
+ 1.6.5
+
+
+ ${file.reference.activation.jar}
+ WEB-INF/lib
+
+
+ ${file.reference.webservices-api.jar}
+ WEB-INF/lib
+
+
+ ${file.reference.webservices-extra-api.jar}
+ WEB-INF/lib
+
+
+ ${file.reference.webservices-extra.jar}
+ WEB-INF/lib
+
+
+ ${file.reference.webservices-rt.jar}
+ WEB-INF/lib
+
+
+ ${file.reference.webservices-tools.jar}
+ WEB-INF/lib
+
+
+ ${file.reference.ant-antlr.jar}
+ WEB-INF/lib
+
+
+ ${file.reference.ant-apache-bcel.jar}
+ WEB-INF/lib
+
+
+ ${file.reference.ant-apache-bsf.jar}
+ WEB-INF/lib
+
+
+ ${file.reference.ant-apache-log4j.jar}
+ WEB-INF/lib
+
+
+ ${file.reference.ant-apache-oro.jar}
+ WEB-INF/lib
+
+
+ ${file.reference.ant-apache-regexp.jar}
+ WEB-INF/lib
+
+
+ ${file.reference.ant-apache-resolver.jar}
+ WEB-INF/lib
+
+
+ ${file.reference.ant-commons-logging.jar}
+ WEB-INF/lib
+
+
+ ${file.reference.ant-commons-net.jar}
+ WEB-INF/lib
+
+
+ ${file.reference.ant-jai.jar}
+ WEB-INF/lib
+
+
+ ${file.reference.ant-javamail.jar}
+ WEB-INF/lib
+
+
+ ${file.reference.ant-jdepend.jar}
+ WEB-INF/lib
+
+
+ ${file.reference.ant-jmf.jar}
+ WEB-INF/lib
+
+
+ ${file.reference.ant-jsch.jar}
+ WEB-INF/lib
+
+
+ ${file.reference.ant-junit.jar}
+ WEB-INF/lib
+
+
+ ${file.reference.ant-launcher.jar}
+ WEB-INF/lib
+
+
+ ${file.reference.ant-netrexx.jar}
+ WEB-INF/lib
+
+
+ ${file.reference.ant-nodeps.jar}
+ WEB-INF/lib
+
+
+ ${file.reference.ant-starteam.jar}
+ WEB-INF/lib
+
+
+ ${file.reference.ant-stylebook.jar}
+ WEB-INF/lib
+
+
+ ${file.reference.ant-swing.jar}
+ WEB-INF/lib
+
+
+ ${file.reference.ant-testutil.jar}
+ WEB-INF/lib
+
+
+ ${file.reference.ant-trax.jar}
+ WEB-INF/lib
+
+
+ ${file.reference.ant-weblogic.jar}
+ WEB-INF/lib
+
+
+ ${file.reference.jsch-0.1.42.jar}
+ WEB-INF/lib
+
+
+ ${file.reference.commons-net-2.0.jar}
+ WEB-INF/lib
+
+
+ ${file.reference.commons-net-ftp-2.0.jar}
+ WEB-INF/lib
+
+
+ ${file.reference.jakarta-oro-2.0.8.jar}
+ WEB-INF/lib
+
+
+ ${libs.ApacheAnt.classpath}
+ WEB-INF/lib
+
+
+ ${file.reference.java-unrar-0.3.jar}
+ WEB-INF/lib
+
+
+ ${file.reference.commons-logging-api-1.0.4.jar}
+ WEB-INF/lib
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/conf/MANIFEST.MF b/src/conf/MANIFEST.MF
new file mode 100644
index 0000000..59499bc
--- /dev/null
+++ b/src/conf/MANIFEST.MF
@@ -0,0 +1,2 @@
+Manifest-Version: 1.0
+
diff --git a/src/java/net/brutex/xservices/types/ArchiveResource.java b/src/java/net/brutex/xservices/types/ArchiveResource.java
new file mode 100644
index 0000000..1d0f013
--- /dev/null
+++ b/src/java/net/brutex/xservices/types/ArchiveResource.java
@@ -0,0 +1,79 @@
+/*
+ * Copyright 2010 Brian Rosenberger (Brutex Network)
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package net.brutex.xservices.types;
+
+import java.io.File;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlEnum;
+import javax.xml.bind.annotation.XmlType;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.types.Resource;
+import org.apache.tools.ant.types.resources.TarResource;
+import org.apache.tools.ant.types.resources.ZipResource;
+import org.apache.tools.tar.TarEntry;
+import org.apache.tools.zip.ZipEntry;
+
+/**
+ *
+ * @author Brian Rosenberger, bru@brutex.de
+ */
+@XmlType(namespace = "http://ws.xservices.brutex.net")
+public class ArchiveResource
+ implements ResourceInterface {
+
+ @XmlElement(defaultValue = "ZIP", nillable = false, required = true)
+ public ArchiveType type = ArchiveType.ZIP;
+ @XmlElement(nillable = false, required = true)
+ public String archive;
+ @XmlElement(nillable = false, required = true)
+ public String uri;
+
+ @XmlEnum(String.class)
+ public enum ArchiveType {
+
+ ZIP, TAR, GZTAR
+ }
+
+ public Resource getAntResource(Project p) {
+ Resource res = null;
+ switch (type) {
+ case TAR:
+ TarEntry tarentry = new TarEntry(uri);
+ TarResource tres = new TarResource(new File(archive), tarentry);
+ res = tres;
+ break;
+
+ case GZTAR:
+ TarResource gres = new TarResource(new org.apache.tools.ant.types.resources.GZipResource(
+ new org.apache.tools.ant.types.resources.FileResource(
+ new File(archive))), new TarEntry(uri));
+ res = gres;
+ break;
+
+ default: //This is type ZIP also
+ ZipEntry zipentry = new ZipEntry(uri);
+ if (zipentry.getTime() == -1) {
+ zipentry.setTime(System.currentTimeMillis());
+ }
+ res = new ZipResource(new File(archive), null, zipentry);
+ break;
+ }
+
+ res.setProject(p);
+ return res;
+ }
+}
diff --git a/src/java/net/brutex/xservices/types/CompressionType.java b/src/java/net/brutex/xservices/types/CompressionType.java
new file mode 100644
index 0000000..abe99c8
--- /dev/null
+++ b/src/java/net/brutex/xservices/types/CompressionType.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright 2010 Brian Rosenberger (Brutex Network)
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package net.brutex.xservices.types;
+
+import javax.xml.bind.annotation.XmlEnum;
+
+/**
+ *
+ * @author Brian Rosenberger, bru@brutex.de
+ */
+@XmlEnum()
+public enum CompressionType {
+ NONE, GZIP, BZIP2
+}
diff --git a/src/java/net/brutex/xservices/types/FileResource.java b/src/java/net/brutex/xservices/types/FileResource.java
new file mode 100644
index 0000000..0248aac
--- /dev/null
+++ b/src/java/net/brutex/xservices/types/FileResource.java
@@ -0,0 +1,83 @@
+/*
+ * Copyright 2010 Brian Rosenberger (Brutex Network)
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package net.brutex.xservices.types;
+
+import java.io.File;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlEnum;
+import javax.xml.bind.annotation.XmlRootElement;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.types.Resource;
+import org.apache.tools.ant.types.resources.BZip2Resource;
+import org.apache.tools.ant.types.resources.GZipResource;
+import org.apache.tools.ant.types.resources.URLResource;
+
+/**
+ *
+ * @author Brian Rosenberger, bru@brutex.de
+ */
+@XmlRootElement(namespace="http://ws.xservices.brutex.net")
+public class FileResource
+implements ResourceInterface {
+
+ @XmlElement(defaultValue = "FILE", nillable = false, required = true)
+ public Type type = Type.FILE;
+ @XmlElement(nillable = false, required = true)
+ public String uri;
+
+ @XmlEnum(String.class)
+ public enum Type {
+
+ FILE, URL, GZIP, BZIP2
+ }
+
+ public FileResource(Type type, String uri) {
+ this.type = type;
+ this.uri = uri;
+ }
+
+ public FileResource() {
+ }
+
+ public Resource getAntResource(Project p) {
+ Resource res = null;
+ switch (type) {
+ case URL:
+ URLResource ures = new URLResource(uri);
+ res = ures;
+ break;
+
+ case GZIP:
+ GZipResource gres = new GZipResource(
+ new org.apache.tools.ant.types.resources.FileResource(new File(uri)));
+ res = gres;
+ break;
+
+ case BZIP2:
+ BZip2Resource bres = new BZip2Resource(
+ new org.apache.tools.ant.types.resources.FileResource(new File(uri)));
+ res = bres;
+ break;
+
+ default:
+ //Default is Type FILE
+ res = new org.apache.tools.ant.types.resources.FileResource(new File(uri));
+ }
+ res.setProject(p);
+ return res;
+ }
+}
diff --git a/src/java/net/brutex/xservices/types/FileSetResource.java b/src/java/net/brutex/xservices/types/FileSetResource.java
new file mode 100644
index 0000000..1223863
--- /dev/null
+++ b/src/java/net/brutex/xservices/types/FileSetResource.java
@@ -0,0 +1,89 @@
+/*
+ * Copyright 2010 Brian Rosenberger (Brutex Network)
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package net.brutex.xservices.types;
+
+import java.io.File;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlEnum;
+import javax.xml.bind.annotation.XmlType;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.types.FileSet;
+import org.apache.tools.ant.types.Resource;
+import org.apache.tools.ant.types.TarFileSet;
+import org.apache.tools.ant.types.ZipFileSet;
+
+/**
+ *
+ * @author Brian Rosenberger, bru@brutex.de
+ */
+@XmlType(name="FileSetType", namespace="http://ws.xservices.brutex.net",
+ propOrder={"type", "source", "includes", "excludes", "casesensitive"})
+public class FileSetResource {
+
+ @XmlElement(name="FileSetType", required=true, nillable=false, defaultValue="FILES")
+ public FileSetType type = FileSetType.FILES;
+
+ @XmlElement(name="source", required=true, nillable=false)
+ public String source = "";
+
+ @XmlElement(name="includes", required=true, nillable=false, defaultValue="**/*")
+ public String includes = "";
+
+ @XmlElement(name="excludes", required=false, nillable=true, defaultValue="")
+ public String excludes ="";
+
+ @XmlElement(name="casesensitive", required=true, nillable=false, defaultValue="true")
+ public boolean casesensitive = true;
+
+ public FileSet getAntFileSet(Project p) {
+ FileSet set = null;
+ switch(type) {
+ case ZIP:
+ ZipFileSet zset = new ZipFileSet();
+ zset.setSrc(new File(source));
+ zset.setEncoding(System.getProperty("file.encoding"));
+ set = zset;
+ break;
+ case TAR:
+ TarFileSet tset = new TarFileSet();
+ tset.setSrc(new File(source));
+ set = tset;
+ break;
+ case GZTAR:
+ Resource res = new FileResource(FileResource.Type.GZIP, source).getAntResource(p);
+ TarFileSet gzset = new TarFileSet();
+ gzset.setSrcResource(res);
+ set = gzset;
+ break;
+ default: //FILES
+ set = new FileSet();
+ set.setDir(new File(source));
+ }
+ set.setProject(p);
+ set.setIncludes(includes);
+ set.setExcludes(excludes);
+ set.setCaseSensitive(casesensitive);
+
+ return set;
+ }
+
+ @XmlEnum
+ public enum FileSetType{
+ FILES, ZIP, TAR, GZTAR
+ }
+
+}
diff --git a/src/java/net/brutex/xservices/types/ResourceInterface.java b/src/java/net/brutex/xservices/types/ResourceInterface.java
new file mode 100644
index 0000000..caa5ab0
--- /dev/null
+++ b/src/java/net/brutex/xservices/types/ResourceInterface.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright 2010 Brian Rosenberger (Brutex Network)
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package net.brutex.xservices.types;
+
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.types.Resource;
+
+/**
+ *
+ * @author Brian Rosenberger, bru@brutex.de
+ */
+public interface ResourceInterface {
+
+ Resource getAntResource(Project p);
+
+}
diff --git a/src/java/net/brutex/xservices/types/ReturnCode.java b/src/java/net/brutex/xservices/types/ReturnCode.java
new file mode 100644
index 0000000..ac43298
--- /dev/null
+++ b/src/java/net/brutex/xservices/types/ReturnCode.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2010 Brian Rosenberger (Brutex Network)
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package net.brutex.xservices.types;
+
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+/**
+ *
+ * @author Brian Rosenberger, bru@brutex.de
+ */
+@XmlType(namespace="http://ws.xservices.brutex.net")
+public class ReturnCode {
+
+ @XmlElement(required=true)
+ public int returnCode;
+
+ public String stdOut;
+ public String stdErr;
+
+ public ReturnCode() {
+ }
+
+ public ReturnCode(int returnCode, String stdOut, String stdErr) {
+ this.returnCode = returnCode;
+ this.stdOut = stdOut;
+ this.stdErr = stdErr;
+ }
+}
diff --git a/src/java/net/brutex/xservices/util/RunTask.java b/src/java/net/brutex/xservices/util/RunTask.java
new file mode 100644
index 0000000..87e0526
--- /dev/null
+++ b/src/java/net/brutex/xservices/util/RunTask.java
@@ -0,0 +1,91 @@
+/*
+ * Copyright 2010 Brian Rosenberger (Brutex Network)
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package net.brutex.xservices.util;
+
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Vector;
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.BuildListener;
+import org.apache.tools.ant.BuildLogger;
+import org.apache.tools.ant.DefaultLogger;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.Target;
+import org.apache.tools.ant.Task;
+import org.apache.tools.ant.taskdefs.Echo;
+
+/**
+ *
+ * @author Brian Rosenberger, bru@brutex.de
+ */
+public class RunTask {
+
+ Project antproject;
+ Target anttarget;
+ Task anttask;
+
+ public RunTask(Task anttask) {
+
+ antproject = new Project();
+ antproject.init();
+ antproject.setBasedir(System.getProperty("java.io.tmpdir"));
+ DefaultLogger log = new DefaultLogger();
+ log.setErrorPrintStream(System.err);
+ log.setOutputPrintStream(System.out);
+ antproject.addBuildListener(log);
+ Vector listeners = antproject.getBuildListeners();
+ for (Iterator i = listeners.iterator(); i.hasNext(); ) {
+ BuildListener listener = (BuildListener) i.next();
+
+ if (listener instanceof BuildLogger) {
+ BuildLogger logger = (BuildLogger) listener;
+ logger.setMessageOutputLevel(Echo.EchoLevel.VERBOSE.getLevel());
+ logger.setOutputPrintStream(System.out);
+ logger.setErrorPrintStream(System.err);
+ }
+ }
+
+ anttarget = new Target();
+ anttarget.setName("XBridgeNGDynamicTarget");
+ anttarget.setProject(antproject);
+ antproject.addTarget(anttarget);
+
+ this.anttask = anttask;
+ prepareTask();
+ }
+
+ private void prepareTask()
+ throws BuildException {
+ anttask.init();
+ anttask.setProject(antproject);
+ anttask.setOwningTarget(anttarget);
+ anttarget.addTask(anttask);
+ antproject.addOrReplaceTarget(anttarget);
+ }
+
+ public Map postTask()
+ throws BuildException
+ {
+ try {
+ antproject.executeTarget(anttarget.getName());
+ //anttask.execute();
+ return antproject.getProperties();
+ } catch (Exception ex) {
+ throw new BuildException(ex);
+ }
+ }
+}
diff --git a/src/java/net/brutex/xservices/util/UnRarTask.java b/src/java/net/brutex/xservices/util/UnRarTask.java
new file mode 100644
index 0000000..7b1cfd0
--- /dev/null
+++ b/src/java/net/brutex/xservices/util/UnRarTask.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright 2010 Brian Rosenberger (Brutex Network)
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package net.brutex.xservices.util;
+
+import de.innosystec.unrar.Archive;
+import de.innosystec.unrar.exception.RarException;
+import de.innosystec.unrar.rarfile.FileHeader;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.List;
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Task;
+
+/**
+ *
+ * @author Brian Rosenberger, bru@brutex.de
+ */
+public class UnRarTask extends Task {
+
+ private File dst = null;
+ private File src = null;
+
+ public File getDst() {
+ return dst;
+ }
+
+ public void setDst(File dst) {
+ this.dst = dst;
+ }
+
+ public File getSrc() {
+ return src;
+ }
+
+ public void setSrc(File src) {
+ this.src = src;
+ }
+
+
+ @Override
+ public void execute() {
+ if(src==null ) throw new BuildException("Please supply a source archive file.");
+ if(!src.exists()) throw new BuildException("Archive '"+src.getName()+"' does not exist.");
+
+ try {
+ if(dst==null) dst = new File(src.getParent());
+ Archive ar = new Archive(src);
+ List list = ar.getFileHeaders();
+ for(FileHeader h : list) {
+ ar.extractFile(h, new FileOutputStream(new File(dst.getAbsolutePath()+"/"+h.getFileNameString())));
+ }
+ } catch (RarException ex) {
+ throw new BuildException(ex.getMessage(), ex);
+ } catch (IOException ex) {
+ throw new BuildException(ex.getMessage(), ex);
+ }
+ }
+
+}
diff --git a/src/java/net/brutex/xservices/ws/ArchiveService.java b/src/java/net/brutex/xservices/ws/ArchiveService.java
new file mode 100644
index 0000000..1562c5d
--- /dev/null
+++ b/src/java/net/brutex/xservices/ws/ArchiveService.java
@@ -0,0 +1,300 @@
+/*
+ * Copyright 2010 Brian Rosenberger (Brutex Network)
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package net.brutex.xservices.ws;
+
+import java.io.File;
+import java.util.Map;
+import javax.jws.WebMethod;
+import javax.jws.WebParam;
+import javax.jws.WebService;
+import net.brutex.xservices.types.ArchiveResource;
+import net.brutex.xservices.types.CompressionType;
+import net.brutex.xservices.types.FileResource;
+import net.brutex.xservices.types.ResourceInterface;
+import net.brutex.xservices.util.RunTask;
+import net.brutex.xservices.util.UnRarTask;
+import org.apache.tools.ant.taskdefs.BUnzip2;
+import org.apache.tools.ant.taskdefs.BZip2;
+import org.apache.tools.ant.taskdefs.Expand;
+import org.apache.tools.ant.taskdefs.GUnzip;
+import org.apache.tools.ant.taskdefs.GZip;
+import org.apache.tools.ant.taskdefs.Untar;
+import org.apache.tools.ant.taskdefs.Zip;
+
+/**
+ *
+ * @author Brian Rosenberger, bru@brutex.de
+ */
+@WebService(targetNamespace="http://ws.xservices.brutex.net", name="ArchiveService")
+public class ArchiveService {
+
+ public static final String WS_OPERATION_BZIP2 = "bzip2";
+ public static final String WS_OPERATION_BZIP2_ARCHIVE = "bzip2FromArchive";
+ public static final String WS_OPERATION_GZIP = "gzip";
+ public static final String WS_OPERATION_GZIP_ARCHIVE = "gzipFromArchive";
+ public static final String WS_OPERATION_UNZIP = "unzip";
+ public static final String WS_OPERATION_GUNZIP = "gunzip";
+ public static final String WS_OPERATION_BUNZIP2 = "bunzip2";
+
+ public static final String WS_PARAM_SOURCEFILE = "source";
+ public static final String WS_PARAM_SOURCEFILE_STRING = "srcfile";
+ public static final String WS_PARAM_SOURCEURL = "srcurl";
+ public static final String WS_PARAM_SOURCEARCHIVE = "archivesource";
+ public static final String WS_PARAM_DESTFILE = "destfile";
+ public static final String WS_PARAM_DESTDIR = "destdir";
+
+ public static final String WS_PARAM_ENCODING = "encoding";
+ public static final String WS_PARAM_OVERWRITE= "overwrite";
+
+ @WebMethod(operationName = WS_OPERATION_BZIP2, action=WS_OPERATION_BZIP2)
+ public String bzip2(@WebParam(name = WS_PARAM_SOURCEFILE) FileResource src,
+ @WebParam(name = WS_PARAM_DESTFILE) String file) {
+ return bzip(src, new File(file));
+ }
+
+ @WebMethod(operationName = WS_OPERATION_BZIP2_ARCHIVE, action=WS_OPERATION_BZIP2_ARCHIVE)
+ public String bzip2FromArchive(@WebParam(name = WS_PARAM_SOURCEARCHIVE) ArchiveResource src,
+ @WebParam(name = WS_PARAM_DESTFILE) String file) {
+ return bzip(src, new File(file));
+ }
+
+ @WebMethod(operationName = WS_OPERATION_GZIP, action=WS_OPERATION_GZIP)
+ public String gzip(@WebParam(name = WS_PARAM_SOURCEFILE) FileResource src,
+ @WebParam(name = WS_PARAM_DESTFILE) String file) {
+ return gzip(src, new File(file));
+ }
+
+ @WebMethod(operationName = WS_OPERATION_GZIP_ARCHIVE, action=WS_OPERATION_GZIP_ARCHIVE)
+ public String gzipFromArchive(@WebParam(name = WS_PARAM_SOURCEARCHIVE) ArchiveResource src,
+ @WebParam(name = WS_PARAM_DESTFILE) String file) {
+ return gzip(src, new File(file));
+ }
+
+ @WebMethod(operationName = WS_OPERATION_GUNZIP, action=WS_OPERATION_GUNZIP)
+ public String gunzip(@WebParam(name = WS_PARAM_SOURCEFILE_STRING) String src,
+ @WebParam(name = WS_PARAM_DESTDIR) String dest) {
+ File target = null;
+ if (!dest.equals("") && dest != null) {
+ target = new File(dest);
+ }
+ return GUnzip(new FileResource(FileResource.Type.FILE, src), target);
+ }
+
+ @WebMethod(operationName = WS_OPERATION_BUNZIP2)
+ public String bunzip2(@WebParam(name = WS_PARAM_SOURCEFILE_STRING) String src,
+ @WebParam(name = WS_PARAM_DESTDIR) String dest) {
+ File target = null;
+ if (!dest.equals("") && dest != null) {
+ target = new File(dest);
+ }
+ return BUnzip2(new FileResource(FileResource.Type.FILE, src), target);
+ }
+
+ @WebMethod(operationName = "gunzipFromURL")
+ public String gunzipFromURL(@WebParam(name = WS_PARAM_SOURCEURL) String src,
+ @WebParam(name = WS_PARAM_DESTDIR) String dest) {
+ File target = null;
+ if (!dest.equals("") && dest != null) {
+ target = new File(dest);
+ }
+ return GUnzip(new FileResource(FileResource.Type.URL, src), target);
+ }
+
+ @WebMethod(operationName = "bunzip2FromURL")
+ public String bunzip2FromURL(@WebParam(name = WS_PARAM_SOURCEURL) String src,
+ @WebParam(name = WS_PARAM_DESTDIR) String dest) {
+ File target = null;
+ if (!dest.equals("") && dest != null) {
+ target = new File(dest);
+ }
+ return BUnzip2(new FileResource(FileResource.Type.URL, src), target);
+ }
+
+ @WebMethod(operationName = "zip")
+ public String zip(@WebParam(name = WS_PARAM_SOURCEFILE) FileResource src,
+ @WebParam(name = WS_PARAM_DESTFILE) String file,
+ @WebParam(name = WS_PARAM_OVERWRITE) boolean overwrite,
+ @WebParam(name = WS_PARAM_ENCODING) String encoding,
+ @WebParam(name = "compresslevel") int level) {
+ if (level > 9) {
+ level = 9;
+ }
+ if (level < 0) {
+ level = 0;
+ }
+ return zip(src, new File(file), encoding, !overwrite, level);
+ }
+
+ @WebMethod(operationName = "zipFromArchive")
+ public String zipFromArchive(@WebParam(name = WS_PARAM_SOURCEARCHIVE) ArchiveResource src,
+ @WebParam(name = WS_PARAM_DESTFILE) String file,
+ @WebParam(name = WS_PARAM_OVERWRITE) boolean update,
+ @WebParam(name = WS_PARAM_ENCODING) String encoding,
+ @WebParam(name = "compresslevel") int level) {
+ return zip(src, new File(file), encoding, !update, level);
+ }
+
+
+ @WebMethod(operationName = "unzip")
+ public String unzip(@WebParam(name = WS_PARAM_SOURCEFILE_STRING) String src,
+ @WebParam(name = WS_PARAM_DESTDIR) String dest,
+ @WebParam(name = WS_PARAM_OVERWRITE) boolean overwrite,
+ @WebParam(name = WS_PARAM_ENCODING) String encoding) {
+ return unzip(new File(src), new File(dest), overwrite, encoding);
+ }
+
+ @WebMethod(operationName = "unrar")
+ public String unrar(@WebParam(name = WS_PARAM_SOURCEFILE_STRING) String src,
+ @WebParam(name = WS_PARAM_DESTDIR) String dest) {
+ return unrar(new File(src), new File(dest));
+ }
+
+ @WebMethod(operationName = "untar")
+ public String untar(@WebParam(name = WS_PARAM_SOURCEFILE_STRING) String src,
+ @WebParam(name = WS_PARAM_DESTDIR) String dest,
+ @WebParam(name = WS_PARAM_OVERWRITE) boolean overwrite,
+ @WebParam(name = "compression") CompressionType compression) {
+ Untar.UntarCompressionMethod c = new Untar.UntarCompressionMethod();
+ switch (compression) {
+ case GZIP:
+ c.setValue("gzip");
+ break;
+ case BZIP2:
+ c.setValue("bzip2");
+ break;
+ default:
+ c.setValue("none");
+ break;
+ }
+ return untar(new File(src), new File(dest), overwrite, c);
+ }
+
+ @WebMethod(exclude = true)
+ private String bzip(ResourceInterface src, File dst) {
+ if (dst.exists() && dst.isFile()) {
+ dst.delete();
+ }
+ BZip2 bzip = new BZip2();
+ bzip.setTaskName("BZip2");
+ RunTask runner = new RunTask(bzip);
+ bzip.setSrcResource(src.getAntResource(bzip.getProject()));
+ bzip.setDestfile(dst);
+
+ Map result = runner.postTask();
+ return "complete";
+ }
+
+ @WebMethod(exclude = true)
+ private String gzip(ResourceInterface src, File dst) {
+ if (dst.exists() && dst.isFile()) {
+ dst.delete();
+ }
+ GZip gzip = new GZip();
+ gzip.setTaskName("GZip");
+ RunTask runner = new RunTask(gzip);
+ gzip.addConfigured(src.getAntResource(gzip.getProject()));
+ gzip.setDestfile(dst);
+ Map result = runner.postTask();
+ return "complete";
+ }
+
+
+
+ @WebMethod(exclude = true)
+ private String zip(ResourceInterface src, File dst, String encoding, boolean update, int compresslevel) {
+ Zip zip = new Zip();
+ zip.setTaskName("Zip");
+ RunTask runner = new RunTask(zip);
+ zip.add(src.getAntResource(zip.getProject()));
+ zip.setDestFile(dst);
+ if (encoding != null && !encoding.equals("")) {
+ zip.setEncoding(encoding);
+ }
+ zip.setUpdate(update);
+ zip.setLevel(compresslevel);
+ Map result = runner.postTask();
+ return "complete";
+ }
+
+ @WebMethod(exclude = true)
+ private String GUnzip(ResourceInterface src, File dst) {
+ GUnzip uz = new GUnzip();
+ uz.setTaskName("GUnzip");
+ RunTask runner = new RunTask(uz);
+ uz.setSrcResource(src.getAntResource(uz.getProject()));
+ if (dst != null) {
+ uz.setDest(dst);
+ }
+ Map result = runner.postTask();
+ return "complete";
+ }
+
+ @WebMethod(exclude = true)
+ private String BUnzip2(ResourceInterface src, File dst) {
+ BUnzip2 uz = new BUnzip2();
+ uz.setTaskName("BUnzip2");
+ RunTask runner = new RunTask(uz);
+ uz.setSrcResource(src.getAntResource(uz.getProject()));
+ if (dst != null) {
+ uz.setDest(dst);
+ }
+ Map result = runner.postTask();
+ return "complete";
+ }
+
+ @WebMethod(exclude = true)
+ private String unzip(File src, File dest, boolean overwrite, String encoding) {
+ Expand unzip = new Expand();
+ unzip.setTaskName("UnZip");
+ RunTask runner = new RunTask(unzip);
+ unzip.setSrc(src);
+ unzip.setDest(dest);
+ unzip.setOverwrite(overwrite);
+ if (encoding != null && !encoding.equals("")) {
+ unzip.setEncoding(encoding);
+ }
+
+ Map result = runner.postTask();
+ return "complete";
+ }
+
+ @WebMethod(exclude = true)
+ private String untar(File src, File dest, boolean overwrite, Untar.UntarCompressionMethod compression) {
+ Untar unzip = new Untar();
+ unzip.setTaskName("Untar");
+ RunTask runner = new RunTask(unzip);
+ unzip.setSrc(src);
+ unzip.setDest(dest);
+ unzip.setOverwrite(overwrite);
+ unzip.setCompression(compression);
+ Map result = runner.postTask();
+ return "complete";
+ }
+
+ @WebMethod(exclude = true)
+ private String unrar(File src, File dst) {
+ UnRarTask unrar = new UnRarTask();
+ unrar.setTaskName("UnRar");
+ RunTask runner = new RunTask(unrar);
+ unrar.setSrc(src);
+ unrar.setDst(dst);
+ Map result = runner.postTask();
+ return "complete";
+ }
+
+
+}
diff --git a/src/java/net/brutex/xservices/ws/ExecuteService.java b/src/java/net/brutex/xservices/ws/ExecuteService.java
new file mode 100644
index 0000000..0836b6a
--- /dev/null
+++ b/src/java/net/brutex/xservices/ws/ExecuteService.java
@@ -0,0 +1,290 @@
+/*
+ * Copyright 2010 Brian Rosenberger (Brutex Network)
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package net.brutex.xservices.ws;
+
+import java.io.File;
+import java.util.Map;
+import javax.jws.WebMethod;
+import javax.jws.WebParam;
+import javax.jws.WebService;
+import net.brutex.xservices.types.ReturnCode;
+import net.brutex.xservices.util.RunTask;
+import org.apache.tools.ant.taskdefs.ExecTask;
+import org.apache.tools.ant.taskdefs.optional.net.RExecTask;
+import org.apache.tools.ant.taskdefs.optional.net.TelnetTask;
+import org.apache.tools.ant.taskdefs.optional.ssh.SSHExec;
+import org.apache.tools.ant.types.Commandline;
+
+/**
+ *
+ * @author Brian Rosenberger, bru@brutex.de
+ */
+@WebService(targetNamespace="http://ws.xservices.brutex.net", name="ExecuteService")
+public class ExecuteService {
+
+ @WebMethod(operationName = "runCommand")
+ public ReturnCode runCommand(@WebParam(name = "executable") String cmd,
+ @WebParam(name = "argline") String args,
+ @WebParam(name = "timeout") long timeout) {
+
+ return executeCommand(cmd,
+ Commandline.translateCommandline(args),
+ null,
+ false,
+ null,
+ false,
+ true,
+ false,
+ timeout);
+ }
+
+ @WebMethod(operationName = "runCommandWithArgs")
+ public ReturnCode runCommandWithArgs(@WebParam(name = "executable") String cmd,
+ @WebParam(name = "arg") String[] args,
+ @WebParam(name = "timeout") long timeout) {
+
+ return executeCommand(cmd,
+ args,
+ null,
+ false,
+ null,
+ false,
+ true,
+ false,
+ timeout);
+ }
+
+ @WebMethod(operationName = "runCommandAsync")
+ public ReturnCode runCommandAsync(@WebParam(name = "executable") String cmd,
+ @WebParam(name = "argline") String args) {
+
+ return executeCommand(cmd,
+ Commandline.translateCommandline(args),
+ null,
+ true,
+ null,
+ false,
+ true,
+ false,
+ 0);
+ }
+
+ @WebMethod(operationName = "runCommandAsyncWithArgs")
+ public ReturnCode runCommandAsyncWithArgs(@WebParam(name = "executable") String cmd,
+ @WebParam(name = "arg") String[] args) {
+
+ return executeCommand(cmd,
+ args,
+ null,
+ true,
+ null,
+ false,
+ true,
+ false,
+ 0);
+ }
+
+ @WebMethod(operationName = "runCommandWithSSH")
+ public ReturnCode runCommandWithSSH(@WebParam(name = "host") String host,
+ @WebParam(name = "port") int port,
+ @WebParam(name = "username") String username,
+ @WebParam(name = "password") String password,
+ @WebParam(name = "command") String cmd,
+ @WebParam(name = "timeout") long timeout) {
+
+ return sshExec(host, username, password, port, cmd, timeout);
+ }
+
+ @WebMethod(operationName = "runCommandWithSSHKeyAuth")
+ public ReturnCode runCommandWithSSHKeyAuth(@WebParam(name = "host") String host,
+ @WebParam(name = "port") int port,
+ @WebParam(name = "username") String username,
+ @WebParam(name = "passphrase") String passphrase,
+ @WebParam(name = "keyfile") String keyfile,
+ @WebParam(name = "command") String cmd,
+ @WebParam(name = "timeout") long timeout) {
+
+ return sshExecWithCert(host, username, passphrase, keyfile, port, cmd, timeout);
+ }
+
+ @WebMethod(operationName = "rExec")
+ public ReturnCode rExec(@WebParam(name = "host") String host,
+ @WebParam(name = "port") int port,
+ @WebParam(name = "username") String username,
+ @WebParam(name = "password") String password,
+ @WebParam(name = "command") String cmd,
+ @WebParam(name = "timeout") long timeout) {
+ return rexec(host, port, username, password, cmd, timeout);
+ }
+
+ @WebMethod(operationName = "telnet")
+ public ReturnCode runTelnet(@WebParam(name = "host") String host,
+ @WebParam(name = "port") int port,
+ @WebParam(name = "username") String username,
+ @WebParam(name = "password") String password,
+ @WebParam(name = "prompt") String prompt,
+ @WebParam(name = "command") String cmd,
+ @WebParam(name = "expect") String expect,
+ @WebParam(name = "timeout") long timeout) {
+ return telnet(host, port, username, password, cmd, timeout, prompt, expect);
+ }
+
+ @WebMethod(exclude = true)
+ private ReturnCode executeCommand(String executable,
+ String[] args,
+ File dir,
+ boolean spawn,
+ String inputstring,
+ boolean newenvironment,
+ boolean vmlauncher,
+ boolean searchpath,
+ long timeout) {
+ ExecTask exe = new ExecTask();
+ RunTask runner = new RunTask(exe);
+ Commandline cmdl = new Commandline();
+ cmdl.setExecutable(executable);
+ cmdl.addArguments(args);
+ System.out.println(cmdl.describeCommand());
+ exe.setCommand(cmdl);
+ exe.setDir(dir);
+ if (spawn) {
+ exe.setSpawn(spawn);
+ } else {
+ exe.setTimeout(timeout);
+ exe.setInputString(inputstring);
+ exe.setOutputproperty("ExecuteService.stdout");
+ exe.setErrorProperty("ExecuteService.stderr");
+ exe.setResultProperty("ExecuteService.result");
+ }
+
+ exe.setNewenvironment(newenvironment);
+ exe.setVMLauncher(vmlauncher);
+ exe.setSearchPath(searchpath);
+
+ Map result = runner.postTask();
+ ReturnCode res = null;
+ if (spawn) {
+ res = new ReturnCode(0, null, null);
+ } else {
+ res = new ReturnCode(Integer.valueOf(result.get("ExecuteService.result")),
+ result.get("ExecuteService.stdout"), result.get("ExecuteService.stderr"));
+ }
+ return res;
+ }
+
+ @WebMethod(exclude = true)
+ private ReturnCode sshExec(String host,
+ String username,
+ String password,
+ int port,
+ String command,
+ long timeout) {
+ SSHExec sshexec = new SSHExec();
+ RunTask runner = new RunTask(sshexec);
+ sshexec.setHost(host);
+ sshexec.setUsername(username);
+ sshexec.setPassword(password);
+ sshexec.setPort(port);
+ sshexec.setCommand(command);
+ sshexec.setTrust(true);
+ sshexec.setTimeout(timeout);
+ sshexec.setOutputproperty("SSHExec.stdout");
+ Map result = runner.postTask();
+ ReturnCode res = null;
+ res = new ReturnCode(0,
+ result.get("SSHExec.stdout"), "");
+
+ return res;
+ }
+
+ @WebMethod(exclude = true)
+ private ReturnCode sshExecWithCert(String host,
+ String username,
+ String passphrase,
+ String keyfile,
+ int port,
+ String command,
+ long timeout) {
+ SSHExec sshexec = new SSHExec();
+ RunTask runner = new RunTask(sshexec);
+ sshexec.setHost(host);
+ sshexec.setUsername(username);
+ sshexec.setKeyfile(keyfile);
+ sshexec.setPassphrase(passphrase);
+ sshexec.setPort(port);
+ sshexec.setCommand(command);
+ sshexec.setTrust(true);
+ sshexec.setTimeout(timeout);
+ sshexec.setOutputproperty("SSHExec.stdout");
+ Map result = runner.postTask();
+ ReturnCode res = null;
+ res = new ReturnCode(0,
+ result.get("SSHExec.stdout"), "");
+
+ return res;
+ }
+
+ @WebMethod(exclude = true)
+ private ReturnCode rexec(String host,
+ int port,
+ String username,
+ String password,
+ String command,
+ long timeout) {
+ RExecTask rexec = new RExecTask();
+ RunTask runner = new RunTask(rexec);
+ rexec.setServer(host);
+ rexec.setPort(port);
+ rexec.setUserid(username);
+ rexec.setPassword(password);
+ rexec.setCommand(command);
+ rexec.setTimeout((int) Math.round(timeout));
+
+ Map result = runner.postTask();
+ ReturnCode res = null;
+ res = new ReturnCode(0,
+ "", "");
+
+ return res;
+ }
+
+ @WebMethod(exclude = true)
+ private ReturnCode telnet(String host,
+ int port,
+ String username,
+ String password,
+ String command,
+ long timeout, String prompt, String expect) {
+ TelnetTask rexec = new TelnetTask();
+ RunTask runner = new RunTask(rexec);
+ rexec.setServer(host);
+ rexec.setPort(port);
+ rexec.setUserid(username);
+ rexec.setPassword(password);
+ rexec.setTimeout((int) Math.round(timeout));
+
+ rexec.createRead().addText(prompt);
+ rexec.createWrite().addText(command);
+ rexec.createRead().addText(expect);
+
+ Map result = runner.postTask();
+ ReturnCode res = null;
+ res = new ReturnCode(0,
+ "", "");
+ return res;
+ }
+}
diff --git a/src/java/net/brutex/xservices/ws/FileService.java b/src/java/net/brutex/xservices/ws/FileService.java
new file mode 100644
index 0000000..88ab1de
--- /dev/null
+++ b/src/java/net/brutex/xservices/ws/FileService.java
@@ -0,0 +1,147 @@
+/*
+ * Copyright 2010 Brian Rosenberger (Brutex Network)
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package net.brutex.xservices.ws;
+
+import java.io.File;
+import java.util.Map;
+import javax.jws.WebMethod;
+import javax.jws.WebParam;
+import javax.jws.WebService;
+import net.brutex.xservices.types.ArchiveResource;
+import net.brutex.xservices.types.FileResource;
+import net.brutex.xservices.types.FileSetResource;
+import net.brutex.xservices.types.ResourceInterface;
+import net.brutex.xservices.util.RunTask;
+import org.apache.tools.ant.taskdefs.Basename;
+import org.apache.tools.ant.taskdefs.Copy;
+import org.apache.tools.ant.taskdefs.Echo;
+import org.apache.tools.ant.taskdefs.LoadResource;
+import org.apache.tools.ant.types.FileSet;
+
+/**
+ *
+ * @author Brian Rosenberger, bru@brutex.de
+ */
+@WebService(targetNamespace="http://ws.xservices.brutex.net", name="FileService")
+public class FileService {
+
+ @WebMethod(operationName = "basename")
+ public String basename(@WebParam(name = "file") String filename,
+ @WebParam(name = "suffix") String suffix) {
+ return basename(new File(filename), suffix);
+ }
+
+ @WebMethod(operationName = "copy")
+ public void copy(@WebParam(name="fileset") FileSetResource src,
+ @WebParam(name="todir") String todir,
+ @WebParam(name="preservelastmodified") boolean plm,
+ @WebParam(name="overwrite") boolean overwrite,
+ @WebParam(name="encoding") String encoding)
+ throws XServicesFault {
+ try {
+ copy(src, new File(todir), plm, overwrite, encoding);
+ } catch (Exception ex) {
+ throw new XServicesFault(ex.getMessage(), ex);
+ }
+ }
+
+ @WebMethod(operationName = "loadResource")
+ public String loadRes(@WebParam(name = "resource") FileResource res,
+ @WebParam(name = "encoding") String encoding) {
+ if (encoding == null || encoding.equals("")) {
+ encoding = System.getProperty("file.encoding");
+ }
+ return loadResource(res, encoding);
+ }
+
+ @WebMethod(operationName = "loadResourceFromArchive")
+ public String loadResFromArchive(@WebParam(name = "archiveresource") ArchiveResource res,
+ @WebParam(name = "encoding") String encoding) {
+ if (encoding == null || encoding.equals("")) {
+ encoding = System.getProperty("file.encoding");
+ }
+ return loadResource(res, encoding);
+ }
+
+ @WebMethod(operationName = "echoToFile")
+ public String echo2file(@WebParam(name="message") String message,
+ @WebParam(name="file")String file, @WebParam(name="encoding") String encoding,
+ @WebParam(name="append")boolean append) {
+ return echo(message, new File(file), encoding, append);
+ }
+
+ @WebMethod(exclude = true)
+ private String basename(File file,
+ String suffix) {
+ Basename basename = new Basename();
+ RunTask runner = new RunTask(basename);
+ basename.setFile(file);
+ if (suffix != null && !suffix.equals("")) {
+ basename.setSuffix(suffix);
+ }
+ basename.setProperty("basename.value");
+ Map result = runner.postTask();
+ return result.get("basename.value");
+ }
+ @WebMethod(exclude = true)
+ private String loadResource(ResourceInterface src, String encoding) {
+ LoadResource lr = new LoadResource();
+ lr.setTaskName("LoadResource");
+ RunTask runner = new RunTask(lr);
+ lr.addConfigured(src.getAntResource(lr.getProject()));
+ lr.setEncoding(encoding);
+ System.out.println("Using encoding: " + encoding);
+ lr.setProperty("LoadResource.out");
+ Map result = runner.postTask();
+ return result.get("LoadResource.out");
+ }
+
+ @WebMethod(exclude = true)
+ private String echo(String msg, File file, String encoding, boolean append) {
+ Echo echo = new Echo();
+ echo.setTaskName("toFile");
+ RunTask runTask = new RunTask(echo);
+ echo.addText(msg);
+ echo.setEncoding(encoding);
+ echo.setFile(file);
+ echo.setAppend(append);
+ Map result = runTask.postTask();
+ return "complete";
+ }
+
+ @WebMethod(exclude=true)
+ private void copy(FileSetResource src, File dst, boolean preservelastmodified,
+ boolean overwrite, String encoding) {
+ Copy copy = new Copy();
+ copy.setTaskName("Copy");
+ RunTask runner = new RunTask(copy);
+ FileSet set = src.getAntFileSet(copy.getProject());
+ copy.add(set);
+
+ if(dst.isDirectory()) copy.setTodir(dst);
+ if(dst.isFile()) copy.setTofile(dst);
+ copy.setOverwrite(overwrite);
+ copy.setPreserveLastModified(preservelastmodified);
+ if(encoding!=null && !encoding.equals("") ) {
+ copy.setOutputEncoding(encoding);
+ } else {
+ copy.setOutputEncoding(System.getProperty("file.encoding"));
+ }
+
+ Map result = runner.postTask();
+ }
+}
diff --git a/src/java/net/brutex/xservices/ws/XServicesFault.java b/src/java/net/brutex/xservices/ws/XServicesFault.java
new file mode 100644
index 0000000..c957b7b
--- /dev/null
+++ b/src/java/net/brutex/xservices/ws/XServicesFault.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright 2010 Brian Rosenberger (Brutex Network)
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package net.brutex.xservices.ws;
+
+import java.util.GregorianCalendar;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.datatype.DatatypeConfigurationException;
+import javax.xml.datatype.DatatypeFactory;
+import javax.xml.datatype.XMLGregorianCalendar;
+
+/**
+ *
+ * @author Brian Rosenberger, bru@brutex.de
+ */
+public class XServicesFault extends Exception {
+
+ public XServicesFault(String message, Exception e) {
+ this(message, e.getCause());
+ }
+
+ public XServicesFault(String string) {
+ this(string, new Exception(string).getCause());
+ }
+
+ public XServicesFault(Exception e) {
+ this(e.getMessage(), e.getCause());
+ }
+
+ public XServicesFault(String message, Throwable cause) {
+ super(message, cause);
+ this.faultstring=message;
+
+
+ try {
+ timestamp = DatatypeFactory.newInstance().newXMLGregorianCalendar(new GregorianCalendar());
+ } catch (DatatypeConfigurationException ex) {
+ System.err.println(ex.getMessage());
+ }
+
+
+ }
+ @XmlElement(name="faultstring")
+ public String faultstring = "";
+
+ @XmlElement(name="username")
+ public String username = System.getProperty("user.name");
+
+ @XmlElement(name="homedir")
+ public String homedir = System.getProperty("user.home");
+
+ @XmlElement(name="timstamp")
+ public XMLGregorianCalendar timestamp = null;
+}
diff --git a/web/LICENSE b/web/LICENSE
new file mode 100644
index 0000000..f820d4b
--- /dev/null
+++ b/web/LICENSE
@@ -0,0 +1,203 @@
+/*
+ * Apache License
+ * Version 2.0, January 2004
+ * http://www.apache.org/licenses/
+ *
+ * TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+ *
+ * 1. Definitions.
+ *
+ * "License" shall mean the terms and conditions for use, reproduction,
+ * and distribution as defined by Sections 1 through 9 of this document.
+ *
+ * "Licensor" shall mean the copyright owner or entity authorized by
+ * the copyright owner that is granting the License.
+ *
+ * "Legal Entity" shall mean the union of the acting entity and all
+ * other entities that control, are controlled by, or are under common
+ * control with that entity. For the purposes of this definition,
+ * "control" means (i) the power, direct or indirect, to cause the
+ * direction or management of such entity, whether by contract or
+ * otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ * outstanding shares, or (iii) beneficial ownership of such entity.
+ *
+ * "You" (or "Your") shall mean an individual or Legal Entity
+ * exercising permissions granted by this License.
+ *
+ * "Source" form shall mean the preferred form for making modifications,
+ * including but not limited to software source code, documentation
+ * source, and configuration files.
+ *
+ * "Object" form shall mean any form resulting from mechanical
+ * transformation or translation of a Source form, including but
+ * not limited to compiled object code, generated documentation,
+ * and conversions to other media types.
+ *
+ * "Work" shall mean the work of authorship, whether in Source or
+ * Object form, made available under the License, as indicated by a
+ * copyright notice that is included in or attached to the work
+ * (an example is provided in the Appendix below).
+ *
+ * "Derivative Works" shall mean any work, whether in Source or Object
+ * form, that is based on (or derived from) the Work and for which the
+ * editorial revisions, annotations, elaborations, or other modifications
+ * represent, as a whole, an original work of authorship. For the purposes
+ * of this License, Derivative Works shall not include works that remain
+ * separable from, or merely link (or bind by name) to the interfaces of,
+ * the Work and Derivative Works thereof.
+ *
+ * "Contribution" shall mean any work of authorship, including
+ * the original version of the Work and any modifications or additions
+ * to that Work or Derivative Works thereof, that is intentionally
+ * submitted to Licensor for inclusion in the Work by the copyright owner
+ * or by an individual or Legal Entity authorized to submit on behalf of
+ * the copyright owner. For the purposes of this definition, "submitted"
+ * means any form of electronic, verbal, or written communication sent
+ * to the Licensor or its representatives, including but not limited to
+ * communication on electronic mailing lists, source code control systems,
+ * and issue tracking systems that are managed by, or on behalf of, the
+ * Licensor for the purpose of discussing and improving the Work, but
+ * excluding communication that is conspicuously marked or otherwise
+ * designated in writing by the copyright owner as "Not a Contribution."
+ *
+ * "Contributor" shall mean Licensor and any individual or Legal Entity
+ * on behalf of whom a Contribution has been received by Licensor and
+ * subsequently incorporated within the Work.
+ *
+ * 2. Grant of Copyright License. Subject to the terms and conditions of
+ * this License, each Contributor hereby grants to You a perpetual,
+ * worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ * copyright license to reproduce, prepare Derivative Works of,
+ * publicly display, publicly perform, sublicense, and distribute the
+ * Work and such Derivative Works in Source or Object form.
+ *
+ * 3. Grant of Patent License. Subject to the terms and conditions of
+ * this License, each Contributor hereby grants to You a perpetual,
+ * worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ * (except as stated in this section) patent license to make, have made,
+ * use, offer to sell, sell, import, and otherwise transfer the Work,
+ * where such license applies only to those patent claims licensable
+ * by such Contributor that are necessarily infringed by their
+ * Contribution(s) alone or by combination of their Contribution(s)
+ * with the Work to which such Contribution(s) was submitted. If You
+ * institute patent litigation against any entity (including a
+ * cross-claim or counterclaim in a lawsuit) alleging that the Work
+ * or a Contribution incorporated within the Work constitutes direct
+ * or contributory patent infringement, then any patent licenses
+ * granted to You under this License for that Work shall terminate
+ * as of the date such litigation is filed.
+ *
+ * 4. Redistribution. You may reproduce and distribute copies of the
+ * Work or Derivative Works thereof in any medium, with or without
+ * modifications, and in Source or Object form, provided that You
+ * meet the following conditions:
+ *
+ * (a) You must give any other recipients of the Work or
+ * Derivative Works a copy of this License; and
+ *
+ * (b) You must cause any modified files to carry prominent notices
+ * stating that You changed the files; and
+ *
+ * (c) You must retain, in the Source form of any Derivative Works
+ * that You distribute, all copyright, patent, trademark, and
+ * attribution notices from the Source form of the Work,
+ * excluding those notices that do not pertain to any part of
+ * the Derivative Works; and
+ *
+ * (d) If the Work includes a "NOTICE" text file as part of its
+ * distribution, then any Derivative Works that You distribute must
+ * include a readable copy of the attribution notices contained
+ * within such NOTICE file, excluding those notices that do not
+ * pertain to any part of the Derivative Works, in at least one
+ * of the following places: within a NOTICE text file distributed
+ * as part of the Derivative Works; within the Source form or
+ * documentation, if provided along with the Derivative Works; or,
+ * within a display generated by the Derivative Works, if and
+ * wherever such third-party notices normally appear. The contents
+ * of the NOTICE file are for informational purposes only and
+ * do not modify the License. You may add Your own attribution
+ * notices within Derivative Works that You distribute, alongside
+ * or as an addendum to the NOTICE text from the Work, provided
+ * that such additional attribution notices cannot be construed
+ * as modifying the License.
+ *
+ * You may add Your own copyright statement to Your modifications and
+ * may provide additional or different license terms and conditions
+ * for use, reproduction, or distribution of Your modifications, or
+ * for any such Derivative Works as a whole, provided Your use,
+ * reproduction, and distribution of the Work otherwise complies with
+ * the conditions stated in this License.
+ *
+ * 5. Submission of Contributions. Unless You explicitly state otherwise,
+ * any Contribution intentionally submitted for inclusion in the Work
+ * by You to the Licensor shall be under the terms and conditions of
+ * this License, without any additional terms or conditions.
+ * Notwithstanding the above, nothing herein shall supersede or modify
+ * the terms of any separate license agreement you may have executed
+ * with Licensor regarding such Contributions.
+ *
+ * 6. Trademarks. This License does not grant permission to use the trade
+ * names, trademarks, service marks, or product names of the Licensor,
+ * except as required for reasonable and customary use in describing the
+ * origin of the Work and reproducing the content of the NOTICE file.
+ *
+ * 7. Disclaimer of Warranty. Unless required by applicable law or
+ * agreed to in writing, Licensor provides the Work (and each
+ * Contributor provides its Contributions) on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied, including, without limitation, any warranties or conditions
+ * of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ * PARTICULAR PURPOSE. You are solely responsible for determining the
+ * appropriateness of using or redistributing the Work and assume any
+ * risks associated with Your exercise of permissions under this License.
+ *
+ * 8. Limitation of Liability. In no event and under no legal theory,
+ * whether in tort (including negligence), contract, or otherwise,
+ * unless required by applicable law (such as deliberate and grossly
+ * negligent acts) or agreed to in writing, shall any Contributor be
+ * liable to You for damages, including any direct, indirect, special,
+ * incidental, or consequential damages of any character arising as a
+ * result of this License or out of the use or inability to use the
+ * Work (including but not limited to damages for loss of goodwill,
+ * work stoppage, computer failure or malfunction, or any and all
+ * other commercial damages or losses), even if such Contributor
+ * has been advised of the possibility of such damages.
+ *
+ * 9. Accepting Warranty or Additional Liability. While redistributing
+ * the Work or Derivative Works thereof, You may choose to offer,
+ * and charge a fee for, acceptance of support, warranty, indemnity,
+ * or other liability obligations and/or rights consistent with this
+ * License. However, in accepting such obligations, You may act only
+ * on Your own behalf and on Your sole responsibility, not on behalf
+ * of any other Contributor, and only if You agree to indemnify,
+ * defend, and hold each Contributor harmless for any liability
+ * incurred by, or claims asserted against, such Contributor by reason
+ * of your accepting any such warranty or additional liability.
+ *
+ * END OF TERMS AND CONDITIONS
+ *
+ * APPENDIX: How to apply the Apache License to your work.
+ *
+ * To apply the Apache License to your work, attach the following
+ * boilerplate notice, with the fields enclosed by brackets "[]"
+ * replaced with your own identifying information. (Don't include
+ * the brackets!) The text should be enclosed in the appropriate
+ * comment syntax for the file format. We also recommend that a
+ * file or class name and description of purpose be included on the
+ * same "printed page" as the copyright notice for easier
+ * identification within third-party archives.
+ *
+ * Copyright [yyyy] [name of copyright owner]
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
diff --git a/web/META-INF/context.xml b/web/META-INF/context.xml
new file mode 100644
index 0000000..bac053d
--- /dev/null
+++ b/web/META-INF/context.xml
@@ -0,0 +1,2 @@
+
+
diff --git a/web/NOTICE b/web/NOTICE
index 51039e0..c10e11f 100644
--- a/web/NOTICE
+++ b/web/NOTICE
@@ -10,8 +10,8 @@
This product includes software developed by
The Apache Software Foundation (http://www.apache.org/).
- This product includes also software developed by :
- - the W3C consortium (http://www.w3c.org) ,
+ This product includes also software developed by:
+ - the W3C consortium (http://www.w3c.org),
- the SAX project (http://www.saxproject.org)
The task is based on code Copyright (c) 2002, Landmark
diff --git a/web/WEB-INF/sun-jaxws.xml b/web/WEB-INF/sun-jaxws.xml
new file mode 100644
index 0000000..b9bbd57
--- /dev/null
+++ b/web/WEB-INF/sun-jaxws.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/web/WEB-INF/web.xml b/web/WEB-INF/web.xml
new file mode 100644
index 0000000..e662c84
--- /dev/null
+++ b/web/WEB-INF/web.xml
@@ -0,0 +1,44 @@
+
+
+
+ com.sun.xml.ws.transport.http.servlet.WSServletContextListener
+
+
+ ExecuteService
+ com.sun.xml.ws.transport.http.servlet.WSServlet
+ 1
+
+
+ ArchiveService
+ com.sun.xml.ws.transport.http.servlet.WSServlet
+ 1
+
+
+ FileService
+ com.sun.xml.ws.transport.http.servlet.WSServlet
+ 1
+
+
+ ExecuteService
+ /ExecuteService
+
+
+ ArchiveService
+ /ArchiveService
+
+
+ FileService
+ /FileService
+
+
+
+ 30
+
+
+
+ index.jsp
+
+
+
+
+