Introduce JobServices and gerenal clean up

git-svn-id: https://brutex.net/svn/xservices/trunk@70 e7e49efb-446e-492e-b9ec-fcafc1997a86
tag-20130205r
Brian Rosenberger 2011-09-19 06:54:10 +00:00
parent ac59128e43
commit 84a6d44c62
36 changed files with 2383 additions and 734 deletions

BIN
lib/derby.jar Normal file

Binary file not shown.

BIN
lib/derbytools.jar Normal file

Binary file not shown.

BIN
lib/log4j-1.2.16.jar Normal file

Binary file not shown.

BIN
lib/quartz-all-2.0.1.jar Normal file

Binary file not shown.

12
src/java/log4j.properties Normal file
View File

@ -0,0 +1,12 @@
log4j.rootLogger=DEBUG, A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
# Print the date in ISO 8601 format
log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p %c{2} - %m%n
# Print only messages of level WARN or above in the package com.foo.
log4j.logger.net.brutex.xservices=DEBUG
log4j.logger.org.springframework=INFO

View File

@ -86,4 +86,6 @@ public class ReturnCode {
}
return null;
}
public String getStdOut() { return this.stdOut; }
}

View File

@ -0,0 +1,135 @@
/*
* Copyright 2011 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.util.GregorianCalendar;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlType;
import net.brutex.xservices.util.BrutexNamespaces;
/**
* Scheduled job type
*
* @author Brian Rosenberger
* @since 0.5.0
*
*/
@XmlType(namespace=BrutexNamespaces.WS_XSERVICES)
@XmlAccessorType(XmlAccessType.FIELD)
public class ScheduledJob {
@XmlElement(required=true,name="name")
private String name;
@XmlElement(required=false, name="description")
private String description;
@XmlElement(required=true, name="datetime")
private GregorianCalendar date;
@XmlElement(name="script")
private String script;
/**
* Create a new scheduled job.
*
* @param name Job name.
* @param datetime Scheduled date and time.
* @param script The script to execute.
*/
public ScheduledJob(String name, GregorianCalendar datetime, String script) {
this.name = name;
this.date = datetime;
this.script = script;
this.description = null;
}
/**
* Create a new scheduled job.
*
* @param name Job name.
* @param datetime Scheduled date and time.
* @param script The script to execute.
* @param description Job description.
*/
public ScheduledJob(String name, GregorianCalendar datetime, String script, String description) {
this.name = name;
this.date = datetime;
this.script = script;
this.description = description;
}
/**
* Create a new scheduled job.
*/
public ScheduledJob() {
this.name = null;
this.date=null;
this.script=null;
}
/**
* Set name of the job.
* @param name
*/
public void setName(String name) {
this.name = name;
}
/**
* Get name of the job.
* @return job name
*/
public String getName() {
return name;
}
/**
* Set scheduled date.
* @param date
*/
public void setDate(GregorianCalendar date) {
this.date = date;
}
/**
* get scheduled date.
* @return date
*/
public GregorianCalendar getDate() {
return date;
}
public void setScript(String script) {
this.script = script;
}
public String getScript() {
return script;
}
public void setDescription(String desc) {
this.description = desc;
}
public String getDescription() {
return description;
}
}

View File

@ -0,0 +1,181 @@
/*
* Copyright 2011 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.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.quartz.utils.ConnectionProvider;
/**
* @author Brian Rosenberger
*
*/
public class BrutexQuartzConnectionProvider implements ConnectionProvider {
private Connection conn = null;
private final Logger logger = Logger.getLogger(this.getClass().getCanonicalName());
public Connection getConnection() throws SQLException {
if( conn!= null && conn.isValid(5)) {
logger.debug("Checking tables on pre-exisiting database connection.");
checkTables();
return conn;
}
try {
// Class.forName("org.hsqldb.jdbc.JDBCDriver" );
Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
} catch (Exception e) {
logger.fatal("Failed to load Derby JDBC driver.");
e.printStackTrace();
return null;
}
if(isConnected(false)) {
checkTables();
} else {
return null;
}
return conn;
}
public void shutdown() throws SQLException {
try {
// Class.forName("org.hsqldb.jdbc.JDBCDriver" );
Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
} catch (Exception e) {
System.err.println("ERROR: failed to load Derby JDBC driver.");
e.printStackTrace();
return;
}
String t = this.getClass().getClassLoader().getResource("/").toString()
.substring(6);
t += "../data/db";
System.out.println("Shut down embedded database now.");
Connection c = DriverManager.getConnection("jdbc:derby:" + t
+ ";shutdown=true;");
}
private synchronized void recursiveDelete(File dbDir) {
File[] files = dbDir.listFiles();
for (int i = 0; i < files.length; i++) {
if (files[i].isFile()) {
files[i].delete();
} else {
recursiveDelete(files[i]);
files[i].delete();
}
}
dbDir.delete();
}
private synchronized void checkTables() throws SQLException {
logger.debug("Checking QUARTZ database schema.");
if(!isConnected(false)) {
logger.error("Failed to validate QUARTZ database schema.");
return;
}
List<String> ddl_list = new ArrayList<String>(11);
ddl_list.add("QRTZ_JOB_DETAILS");
ddl_list.add("QRTZ_TRIGGERS");
ddl_list.add("QRTZ_SIMPLE_TRIGGERS");
ddl_list.add("QRTZ_CRON_TRIGGERS");
ddl_list.add("QRTZ_SIMPROP_TRIGGERS");
ddl_list.add("QRTZ_BLOB_TRIGGERS");
ddl_list.add("QRTZ_CALENDARS");
ddl_list.add("QRTZ_PAUSED_TRIGGER_GRPS");
ddl_list.add("QRTZ_FIRED_TRIGGERS");
ddl_list.add("QRTZ_SCHEDULER_STATE");
ddl_list.add("QRTZ_LOCKS");
String ddl = this.getClass().getClassLoader().getResource("/").toString()
.substring(6)+ "../data/";
DatabaseMetaData dmd = conn.getMetaData();
for (String tbl : ddl_list) {
ResultSet rs = dmd.getTables(null, "APP", tbl, null);
if (!rs.next()) {
logger.log(Level.INFO, "Adding DDL for table "+ tbl);
Statement st = conn.createStatement();
File ddlFile = new File(ddl + tbl + ".ddl");
String create = "";
try {
BufferedReader r = new BufferedReader(new FileReader(ddlFile));
while (r.ready()) {
create += r.readLine() + "\n";
}
create.trim();
if( st.execute(create)) {
logger.log(Level.INFO, "Table " + tbl + " created.");
}
} catch (FileNotFoundException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
} catch (SQLException ex) {
logger.log(Level.ERROR, "Error executing statement "+ create );
System.out.println(ex.getMessage());
}
} else {
logger.trace("Table "+tbl+" exists.");
}
}
}
private synchronized boolean isConnected(boolean fail) throws SQLException {
if(conn!=null && conn.isValid(5)) {
return true;
} else {
String t = this.getClass().getClassLoader().getResource("/").toString().substring(6); // WEB-INF/classes
t += "../data/db";
logger.debug("Database directory is set to '" + t + "'");
try {
this.conn = DriverManager.getConnection("jdbc:derby:" + t + ";create=true;");
} catch (SQLException ex) {
logger.error(ex.getMessage(), ex);
if(!fail) {
logger.warn("Deleting database directory.");
recursiveDelete(new File(t));
logger.warn("Retrying to connect to database.");
return isConnected(true);
} else {
return false;
}
}
}
return false;
}
}

View File

@ -0,0 +1,96 @@
/*
* Copyright 2011 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.io.Serializable;
import java.util.Date;
import org.mozilla.javascript.Context;
import org.mozilla.javascript.Scriptable;
import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
/**
* Wrapper for jobs that can be executed through quartz scheduler.
*
* @author Brian Rosenberger, bru@brutex.de
* @since 0.5.0
*
*/
public class JobWrapper implements Job, Serializable {
public void execute(JobExecutionContext jcontext)
throws JobExecutionException {
try {
System.out.println("Executing scheduled job '"+jcontext.getJobDetail().getKey().getName()+"' at " + new Date());
JobDataMap jdMap = jcontext.getJobDetail().getJobDataMap();
String script = jdMap.getString("script");
// Create and enter a Context. A Context stores information about
// the execution environment of a script.
Context cx = Context.enter();
cx.setOptimizationLevel(0);
cx.setLanguageVersion(Context.VERSION_1_7);
// cx is the Context instance you're using to run scripts
/*
* cx.setClassShutter(new ClassShutter() { public boolean
* visibleToScripts(String className) {
* if(className.startsWith("adapter")) return true;
* if(className.startsWith("java.lang.System") ||
* className.startsWith
* ("org.apache.tomcat.util.log.SystemLogHandler")) return true;
* System.out.println(className + " is blocked."); return false; }
* });
*/
// Initialise the standard objects (Object, Function, etc.). This
// must be done before scripts can be
// executed. The null parameter tells initStandardObjects
// to create and return a scope object that we use
// in later calls.
Scriptable scope = cx.initStandardObjects();
//Object wrappedOut = Context.javaToJS(System.out, scope);
//Object wrappedOut2 = Context.javaToJS(this, scope);
//scope.put("out", scope, wrappedOut);
//scope.put("exe", scope, wrappedOut2);
// Execute the script
// cx.evaluateString(scope, "importClass('java.lang.System');\n",
// "head", 1, null);
// cx.evaluateString(scope, "importPackage('java.util');\n", "head",
// 2, null);
Object obj = cx
.evaluateString(scope, script, "TestScript", 1, null);
} catch (Exception e) {
System.out.println(e.getMessage());
} finally {
// Exit the Context. This removes the association between the
// Context and the current thread and is an
// essential cleanup action. There should be a call to exit for
// every call to enter.
Context.exit();
}
}
}

View File

@ -144,12 +144,29 @@ public interface DateService {
@WebParam(name=PARAM_DATETIME) @XmlElement(required=true) GregorianCalendar cal,
@WebParam(name=PARAM_FORMAT) @XmlElement(required=true) String format) throws XServicesFault;
/**
* Converts a string into date using pre-defined date formats.
*
* @param s Date/ time as string
* @param format date format
* @param timezone timezone
* @return XML Date
* @throws XServicesFault
*/
@WebMethod(operationName=OPERATION_PARSEDATE)
public abstract GregorianCalendar parseDate(
@WebParam(name=PARAM_DATETIME) @XmlElement(required=true) String s,
@WebParam(name=PARAM_FORMAT) @XmlElement(required=true) DateFormatType format,
@WebParam(name=PARAM_TIMEZONE) String timezone) throws XServicesFault;
/**
* Converts a string into date using any format.
* @param s date/ time as string
* @param format date format
* @param timezone timezone
* @return XML Date
* @throws XServicesFault
*/
@WebMethod(operationName=OPERATION_PARSEDATEADVANCED)
public abstract GregorianCalendar parseDateAdvanced(
@WebParam(name=PARAM_DATETIME) @XmlElement(required=true) String s,

View File

@ -19,6 +19,7 @@ package net.brutex.xservices.ws;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.xml.bind.annotation.XmlElement;
import net.brutex.xservices.types.HostConnection;
import net.brutex.xservices.types.ReturnCode;
@ -26,6 +27,7 @@ import net.brutex.xservices.util.BrutexNamespaces;
/**
* Task execution web service
*
* @author Brian Rosenberger
* @since 0.1.0
*
@ -131,4 +133,13 @@ public interface ExecuteService {
@WebParam(name = "expect") String expect,
@WebParam(name = "timeout") long timeout);
/**
* @param script
* @throws XServicesFault
*/
@WebMethod(operationName = "runJavaScript")
public abstract void runJScript(
@WebParam(name = "script") @XmlElement(required=true) String script) throws XServicesFault;
}

View File

@ -26,8 +26,6 @@ import javax.xml.bind.annotation.XmlElement;
import org.apache.cxf.annotations.WSDLDocumentation;
import org.apache.cxf.annotations.WSDLDocumentationCollection;
import com.sun.xml.internal.ws.api.model.wsdl.WSDLDescriptorKind;
import net.brutex.xservices.types.ArchiveResource;
import net.brutex.xservices.types.AttachmentType;
import net.brutex.xservices.types.FileResource;
@ -37,7 +35,10 @@ import net.brutex.xservices.types.ReturnCode;
import net.brutex.xservices.util.BrutexNamespaces;
import net.brutex.xservices.util.XServicesDocumentation;
/**
* File related web service operations.
*
* @author Brian Rosenberger
* @since 0.3.0
*
*/
@WebService(targetNamespace = BrutexNamespaces.WS_XSERVICES)
@ -48,20 +49,24 @@ import net.brutex.xservices.util.XServicesDocumentation;
)
public interface FileService {
public static final String OPERATION_BASENAME ="basename";
public static final String OPERATION_DOWNLOADFILE ="downloadFile";
public static final String OPERATION_UPLOADFILE ="uploadFile";
public static final String OPERATION_COPY ="copy";
public static final String OPERATION_COPYFILE ="copyFile";
public static final String OPERATION_LOADRESOURCE = "loadResource";
public static final String OPERATION_LOADRESOURCEFROMARCHIVE = "loadResourceFromArchive";
public static final String OPERATION_ECHOTOFILE = "echoToFile";
public static final String OPERATION_CHANGEOWNER = "changeOwner";
public static final String OPERATION_CHANGEMODE = "changeMode";
public static final String OPERATION_CHANGEGROUP = "changeGroup";
public static final String OPERATION_REPLACEINFILE = "replaceInFile";
public static final String OPERATION_REPLACEINFILE2 = "replaceInFile2";
public static final String OPERATION_REPLACEINFILEREGEX = "replaceInFileRegEx";
final String OPERATION_BASENAME ="basename";
final String OPERATION_DOWNLOADFILE ="downloadFile";
final String OPERATION_UPLOADFILE ="uploadFile";
final String OPERATION_COPY ="copy";
final String OPERATION_COPYFILE ="copyFile";
final String OPERATION_LOADRESOURCE = "loadResource";
final String OPERATION_LOADRESOURCEFROMARCHIVE = "loadResourceFromArchive";
final String OPERATION_ECHOTOFILE = "echoToFile";
final String OPERATION_CHANGEOWNER = "changeOwner";
final String OPERATION_CHANGEMODE = "changeMode";
final String OPERATION_CHANGEGROUP = "changeGroup";
final String OPERATION_REPLACEINFILE = "replaceInFile";
final String OPERATION_REPLACEINFILE2 = "replaceInFile2";
final String OPERATION_REPLACEINFILEREGEX = "replaceInFileRegEx";
final String PARAM_FILE = "file";
final String PARAM_ENCODING = "encoding";
final String PARAM_OVERRIDE = "override";
/**
* @param filename
@ -71,7 +76,7 @@ public interface FileService {
@WSDLDocumentation(value = "The base name of the given file excluding the suffix.")
@WebMethod(operationName = OPERATION_BASENAME)
public abstract String basename(
@WebParam(name = "file") @XmlElement(required=true) String filename,
@WebParam(name = PARAM_FILE) @XmlElement(required=true) String filename,
@WebParam(name = "suffix") String suffix);
/**
@ -92,7 +97,7 @@ public interface FileService {
@WSDLDocumentation(XServicesDocumentation.SERVICE_OPERATION_UPLOADFILE)
@WebMethod(operationName = OPERATION_UPLOADFILE)
public abstract String uploadFile(
@WebParam(name = "file") AttachmentType file) throws XServicesFault;
@WebParam(name = PARAM_FILE) AttachmentType file) throws XServicesFault;
/**
* @param src
@ -109,8 +114,8 @@ public interface FileService {
@WebParam(name = FileSetResource.XML_NAME) @XmlElement(required=true) FileSetResource src,
@WebParam(name = "todir") @XmlElement(required=true) String todir,
@WebParam(name = "preservelastmodified") boolean plm,
@WebParam(name = "overwrite") boolean overwrite,
@WebParam(name = "encoding") String encoding) throws XServicesFault;
@WebParam(name = PARAM_OVERRIDE) boolean overwrite,
@WebParam(name = PARAM_ENCODING) String encoding) throws XServicesFault;
/**
* @param fromFile
@ -124,7 +129,7 @@ public interface FileService {
public abstract ReturnCode copyFile(
@WebParam(name = "fromFile") @XmlElement(required=true) String fromFile,
@WebParam(name = "toFile") @XmlElement(required=true) String tofile,
@WebParam(name = "overwrite") boolean overwrite) throws XServicesFault;
@WebParam(name = PARAM_OVERRIDE) boolean overwrite) throws XServicesFault;
/**
* @param res
@ -136,7 +141,7 @@ public interface FileService {
@WebMethod(operationName = OPERATION_LOADRESOURCE)
public abstract String loadRes(
@WebParam(name = FileResource.XML_NAME) FileResource res,
@WebParam(name = "encoding") String encoding) throws XServicesFault;
@WebParam(name = PARAM_ENCODING) String encoding) throws XServicesFault;
/**
* @param res
@ -148,7 +153,7 @@ public interface FileService {
@WebMethod(operationName = OPERATION_LOADRESOURCEFROMARCHIVE)
public abstract String loadResFromArchive(
@WebParam(name = "archiveresource") ArchiveResource res,
@WebParam(name = "encoding") String encoding) throws XServicesFault;
@WebParam(name = PARAM_ENCODING) String encoding) throws XServicesFault;
/**
* @param message
@ -162,13 +167,17 @@ public interface FileService {
@WebMethod(operationName = OPERATION_ECHOTOFILE)
public abstract ReturnCode echo2file(
@WebParam(name = "message") @XmlElement(required=true) String message,
@WebParam(name = "file") @XmlElement(required=true) String file,
@WebParam(name = "encoding") String encoding,
@WebParam(name = PARAM_FILE) @XmlElement(required=true) String file,
@WebParam(name = PARAM_ENCODING) String encoding,
@WebParam(name = "append") boolean append) throws XServicesFault;
/**
* @param res
* @param owner
* Changes the owner of a file or all files inside specified directories.
* Right now it has effect only under Unix/ Linux as it is implemented through
* the 'chown' command.
*
* @param res Collection of files/ directories
* @param owner Identifier of the new owner
* @return
*/
@WebMethod(operationName = OPERATION_CHANGEOWNER)
@ -177,8 +186,12 @@ public interface FileService {
@WebParam(name = "owner") @XmlElement(required=true) String owner);
/**
* @param res
* @param group
* Changes the group owner of a file or all files inside specified directories.
* Right now it has effect only under Unix/ Linux as it is implemented through
* the 'chgrp' command.
*
* @param res Collection of files/ directories
* @param group Identifier of the new group owner
* @return
*/
@WebMethod(operationName = OPERATION_CHANGEGROUP)

View File

@ -0,0 +1,102 @@
/*
* Copyright 2011 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.math.BigInteger;
import java.util.GregorianCalendar;
import java.util.List;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.xml.bind.annotation.XmlElement;
import net.brutex.xservices.types.DateFormatType;
import net.brutex.xservices.types.DateTimeUnits;
import net.brutex.xservices.types.ScheduledJob;
import net.brutex.xservices.util.BrutexNamespaces;
import org.apache.cxf.annotations.WSDLDocumentation;
import org.apache.cxf.annotations.WSDLDocumentationCollection;
/**
* Job management services.
* @author Brian Rosenberger
* @since 0.5.0
*
*/
@WebService(targetNamespace = BrutexNamespaces.WS_XSERVICES)
public interface JobService {
public static final String SERVICE_NAME = "JobService";
final String OPERATION_GETJOBLIST = "getJobs";
final String OPERATION_SCHEDULEJOB = "scheduleJob";
final String OPERATION_GETJOB = "getJob";
final String OPERATION_DELETEJOB = "deleteJob";
final String PARAM_JOB = "job";
/**
* Get a full list of all scheduled jobs.
*
* @return List of scheduled jobs
* @throws XServicesFault
*/
@WebMethod(operationName=OPERATION_GETJOBLIST)
@WSDLDocumentation(value="Get list of scheduled jobs")
public abstract List<ScheduledJob> getJobList() throws XServicesFault;
/**
* Add a job to the scheduler.
*
* @param job
* @return The unique identifier of the job.
* @throws XServicesFault
*/
@WebMethod(operationName=OPERATION_SCHEDULEJOB)
@WSDLDocumentation(value="Schedule a job")
public abstract String scheduleJob(
@WebParam(name=PARAM_JOB) @XmlElement(required=true) ScheduledJob job)
throws XServicesFault;
/**
* Get a job by id.
*
* @param uuid
* @return Job details
* @throws XServicesFault
*/
@WebMethod(operationName=OPERATION_GETJOB)
@WSDLDocumentation(value="Get a job by id")
public abstract ScheduledJob getJob(
@WebParam(name="id") @XmlElement(required=true) String uuid) throws XServicesFault;
/**
* Delete a job from scheduler.
*
* @param uuid Id of the job that should be deleted
* @throws XServicesFault
*/
@WebMethod(operationName=OPERATION_DELETEJOB)
@WSDLDocumentation(value="Delete a scheduled job.")
public abstract void deleteJob(
@WebParam(name="id") @XmlElement(required=true) String uuid) throws XServicesFault;
}

View File

@ -28,6 +28,7 @@ import org.apache.cxf.annotations.WSDLDocumentation;
/**
*
* @author Brian Rosenberger, bru@brutex.de
* @since 0.4.0
*/
@WebService(targetNamespace = BrutexNamespaces.WS_XSERVICES)
public interface MiscService {

View File

@ -22,9 +22,7 @@ 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.FileSetResource;
import net.brutex.xservices.types.ResourceInterface;
import net.brutex.xservices.types.ResourceSetInterface;
import net.brutex.xservices.types.ReturnCode;
import net.brutex.xservices.util.BrutexNamespaces;
import net.brutex.xservices.util.RunTask;
@ -52,7 +50,6 @@ public class ArchiveServiceImpl implements ArchiveService {
/* (non-Javadoc)
* @see net.brutex.xservices.ws.ArchiveService#bzip2(net.brutex.xservices.types.FileResource, java.lang.String)
*/
@Override
@WebMethod(operationName = WS_OPERATION_BZIP2, action = WS_OPERATION_BZIP2)
public ReturnCode bzip2(@WebParam(name = WS_PARAM_SOURCEFILE) FileResource src,
@WebParam(name = WS_PARAM_DESTFILE) String file) {
@ -62,7 +59,7 @@ public class ArchiveServiceImpl implements ArchiveService {
/* (non-Javadoc)
* @see net.brutex.xservices.ws.ArchiveService#bzip2FromArchive(net.brutex.xservices.types.ArchiveResource, java.lang.String)
*/
@Override
@WebMethod(operationName = WS_OPERATION_BZIP2_ARCHIVE, action = WS_OPERATION_BZIP2_ARCHIVE)
public ReturnCode bzip2FromArchive(@WebParam(name = WS_PARAM_SOURCEARCHIVE) ArchiveResource src,
@WebParam(name = WS_PARAM_DESTFILE) String file) {
@ -72,7 +69,7 @@ return null;// return bzip(src, new File(file));
/* (non-Javadoc)
* @see net.brutex.xservices.ws.ArchiveService#gzip(net.brutex.xservices.types.FileResource, java.lang.String)
*/
@Override
@WebMethod(operationName = WS_OPERATION_GZIP, action = WS_OPERATION_GZIP)
public ReturnCode gzip(@WebParam(name = WS_PARAM_SOURCEFILE) FileResource src,
@WebParam(name = WS_PARAM_DESTFILE) String file) {
@ -82,7 +79,7 @@ return null;// return bzip(src, new File(file));
/* (non-Javadoc)
* @see net.brutex.xservices.ws.ArchiveService#gzipFromArchive(net.brutex.xservices.types.ArchiveResource, java.lang.String)
*/
@Override
@WebMethod(operationName = WS_OPERATION_GZIP_ARCHIVE, action = WS_OPERATION_GZIP_ARCHIVE)
public ReturnCode gzipFromArchive(@WebParam(name = WS_PARAM_SOURCEARCHIVE) ArchiveResource src,
@WebParam(name = WS_PARAM_DESTFILE) String file) {
@ -92,7 +89,7 @@ return null;// return bzip(src, new File(file));
/* (non-Javadoc)
* @see net.brutex.xservices.ws.ArchiveService#gunzip(java.lang.String, java.lang.String)
*/
@Override
@WebMethod(operationName = WS_OPERATION_GUNZIP, action = WS_OPERATION_GUNZIP)
public ReturnCode gunzip(@WebParam(name = WS_PARAM_SOURCEFILE_STRING) String src,
@WebParam(name = WS_PARAM_DESTDIR) String dest) {
@ -106,7 +103,7 @@ return null;// return bzip(src, new File(file));
/* (non-Javadoc)
* @see net.brutex.xservices.ws.ArchiveService#bunzip2(java.lang.String, java.lang.String)
*/
@Override
@WebMethod(operationName = WS_OPERATION_BUNZIP2)
public ReturnCode bunzip2(@WebParam(name = WS_PARAM_SOURCEFILE_STRING) String src,
@WebParam(name = WS_PARAM_DESTDIR) String dest) {
@ -120,7 +117,7 @@ return null;// return bzip(src, new File(file));
/* (non-Javadoc)
* @see net.brutex.xservices.ws.ArchiveService#gunzipFromURL(java.lang.String, java.lang.String)
*/
@Override
@WebMethod(operationName = "gunzipFromURL")
public ReturnCode gunzipFromURL(@WebParam(name = WS_PARAM_SOURCEURL) String src,
@WebParam(name = WS_PARAM_DESTDIR) String dest) {
@ -134,7 +131,7 @@ return null;// return bzip(src, new File(file));
/* (non-Javadoc)
* @see net.brutex.xservices.ws.ArchiveService#bunzip2FromURL(java.lang.String, java.lang.String)
*/
@Override
@WebMethod(operationName = "bunzip2FromURL")
public ReturnCode bunzip2FromURL(@WebParam(name = WS_PARAM_SOURCEURL) String src,
@WebParam(name = WS_PARAM_DESTDIR) String dest) {
@ -148,7 +145,7 @@ return null;// return bzip(src, new File(file));
/* (non-Javadoc)
* @see net.brutex.xservices.ws.ArchiveService#zip(net.brutex.xservices.types.FileResource, java.lang.String, boolean, java.lang.String, int)
*/
@Override
@WebMethod(operationName = "zip")
public ReturnCode zip(@WebParam(name = WS_PARAM_SOURCEFILE) FileResource src,
@WebParam(name = WS_PARAM_DESTFILE) String file,
@ -167,7 +164,7 @@ return null;// return bzip(src, new File(file));
/* (non-Javadoc)
* @see net.brutex.xservices.ws.ArchiveService#zipFromArchive(net.brutex.xservices.types.ArchiveResource, java.lang.String, boolean, java.lang.String, int)
*/
@Override
@WebMethod(operationName = "zipFromArchive")
public ReturnCode zipFromArchive(@WebParam(name = WS_PARAM_SOURCEARCHIVE) ArchiveResource src,
@WebParam(name = WS_PARAM_DESTFILE) String file,
@ -180,7 +177,7 @@ return null;// return bzip(src, new File(file));
/* (non-Javadoc)
* @see net.brutex.xservices.ws.ArchiveService#unzip(java.lang.String, java.lang.String, boolean, java.lang.String)
*/
@Override
@WebMethod(operationName = "unzip")
public ReturnCode unzip(@WebParam(name = WS_PARAM_SOURCEFILE_STRING) String src,
@WebParam(name = WS_PARAM_DESTDIR) String dest,
@ -192,7 +189,7 @@ return null;// return bzip(src, new File(file));
/* (non-Javadoc)
* @see net.brutex.xservices.ws.ArchiveService#unrar(java.lang.String, java.lang.String)
*/
@Override
@WebMethod(operationName = "unrar")
public ReturnCode unrar(@WebParam(name = WS_PARAM_SOURCEFILE_STRING) String src,
@WebParam(name = WS_PARAM_DESTDIR) String dest) {
@ -202,7 +199,7 @@ return null;// return bzip(src, new File(file));
/* (non-Javadoc)
* @see net.brutex.xservices.ws.ArchiveService#untar(java.lang.String, java.lang.String, boolean, net.brutex.xservices.types.CompressionType)
*/
@Override
@WebMethod(operationName = "untar")
public ReturnCode untar(@WebParam(name = WS_PARAM_SOURCEFILE_STRING) String src,
@WebParam(name = WS_PARAM_DESTDIR) String dest,

View File

@ -44,7 +44,7 @@ public class DateServiceImpl implements DateService {
private static String ERR_INVALIDFORMAT = "Invalid format pattern.";
private static String ERR_INVALIDTIMEZONE = "Invalid timezone.";
@Override
public GregorianCalendar getDate(String timezone) throws XServicesFault {
if (! isValidTimezone(timezone) ) {
String valid_ids = "";
@ -60,7 +60,7 @@ public class DateServiceImpl implements DateService {
return c;
}
@Override
public BigInteger getTimestamp() {
Date d = new Date();
long l = d.getTime();
@ -68,7 +68,7 @@ public class DateServiceImpl implements DateService {
return timestamp;
}
@Override
public GregorianCalendar getInTimezone(GregorianCalendar cal,
String timezone) throws XServicesFault {
if(! isValidTimezone(timezone)) throw new XServicesFault(ERR_INVALIDTIMEZONE);
@ -77,12 +77,12 @@ public class DateServiceImpl implements DateService {
return c;
}
@Override
public String formatDate(GregorianCalendar cal, DateFormatType format) throws XServicesFault {
return formatDateAdvanced(cal, format.format());
}
@Override
public String formatDateAdvanced(GregorianCalendar cal, String format)
throws XServicesFault {
String result= null;
@ -95,12 +95,12 @@ public class DateServiceImpl implements DateService {
return result;
}
@Override
public GregorianCalendar parseDate(String s, DateFormatType format, String timezone) throws XServicesFault {
return parseDateAdvanced(s, format.format(), timezone);
}
@Override
public GregorianCalendar parseDateAdvanced(String s, String format, String timezone) throws XServicesFault {
SimpleDateFormat f = null;
Date date = null;
@ -121,7 +121,7 @@ public class DateServiceImpl implements DateService {
return cal;
}
@Override
public BigInteger dateTimeDiff(GregorianCalendar fromCal,
GregorianCalendar toCal) throws XServicesFault {
long diff = toCal.getTimeInMillis() - fromCal.getTimeInMillis();
@ -129,7 +129,7 @@ public class DateServiceImpl implements DateService {
return d;
}
@Override
public BigInteger dateTimeDiff2(GregorianCalendar fromCal,
GregorianCalendar toCal, DateTimeUnits unit) throws XServicesFault {
BigInteger d = dateTimeDiff(fromCal, toCal);
@ -149,7 +149,7 @@ public class DateServiceImpl implements DateService {
return d;
}
@Override
public GregorianCalendar dateAdd(GregorianCalendar cal, BigInteger value, DateTimeUnits unit)
throws XServicesFault {
switch (unit) {

View File

@ -17,282 +17,338 @@
package net.brutex.xservices.ws.impl;
import java.io.File;
import java.util.UUID;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import net.brutex.xservices.types.HostConnection;
import net.brutex.xservices.types.ReturnCode;
import net.brutex.xservices.util.BrutexNamespaces;
import net.brutex.xservices.util.JobWrapper;
import net.brutex.xservices.util.RunTask;
import net.brutex.xservices.ws.ExecuteService;
import net.brutex.xservices.ws.XServicesFault;
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;
import org.mozilla.javascript.Context;
import org.mozilla.javascript.Scriptable;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.Trigger;
import static org.quartz.TriggerBuilder.*;
import static org.quartz.SimpleScheduleBuilder.*;
import org.quartz.TriggerUtils;
import org.quartz.impl.StdSchedulerFactory;
import org.quartz.impl.triggers.SimpleTriggerImpl;
/**
*
* @author Brian Rosenberger, bru@brutex.de
*/
@WebService(
targetNamespace=BrutexNamespaces.WS_XSERVICES,
endpointInterface="net.brutex.xservices.ws.ExecuteService",
serviceName="ExecuteService"
)
@WebService(targetNamespace = BrutexNamespaces.WS_XSERVICES, endpointInterface = "net.brutex.xservices.ws.ExecuteService", serviceName = "ExecuteService")
public class ExecuteServiceImpl implements ExecuteService {
/* (non-Javadoc)
* @see net.brutex.xservices.ws.impl.ExecuteService#runCommand(java.lang.String, java.lang.String, long)
/*
* (non-Javadoc)
*
* @see
* net.brutex.xservices.ws.impl.ExecuteService#runCommand(java.lang.String,
* java.lang.String, long)
*/
@Override
@WebMethod(operationName = "runCommand")
public ReturnCode runCommand(@WebParam(name = "executable") String cmd,
@WebParam(name = "argline") String args,
@WebParam(name = "timeout") long timeout) {
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);
}
return executeCommand(cmd, Commandline.translateCommandline(args),
null, false, null, false, true, false, timeout);
}
/* (non-Javadoc)
* @see net.brutex.xservices.ws.impl.ExecuteService#runCommandWithArgs(java.lang.String, java.lang.String[], long)
/*
* (non-Javadoc)
*
* @see
* net.brutex.xservices.ws.impl.ExecuteService#runCommandWithArgs(java.lang
* .String, java.lang.String[], long)
*/
@Override
@WebMethod(operationName = "runCommandWithArgs")
public ReturnCode runCommandWithArgs(@WebParam(name = "executable") String cmd,
@WebParam(name = "arg") String[] args,
@WebParam(name = "timeout") long timeout) {
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);
}
return executeCommand(cmd, args, null, false, null, false, true, false,
timeout);
}
/* (non-Javadoc)
* @see net.brutex.xservices.ws.impl.ExecuteService#runCommandAsync(java.lang.String, java.lang.String)
/*
* (non-Javadoc)
*
* @see
* net.brutex.xservices.ws.impl.ExecuteService#runCommandAsync(java.lang
* .String, java.lang.String)
*/
@Override
@WebMethod(operationName = "runCommandAsync")
public ReturnCode runCommandAsync(@WebParam(name = "executable") String cmd,
@WebParam(name = "argline") String args) {
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);
}
return executeCommand(cmd, Commandline.translateCommandline(args),
null, true, null, false, true, false, 0);
}
/* (non-Javadoc)
* @see net.brutex.xservices.ws.impl.ExecuteService#runCommandAsyncWithArgs(java.lang.String, java.lang.String[])
/*
* (non-Javadoc)
*
* @see
* net.brutex.xservices.ws.impl.ExecuteService#runCommandAsyncWithArgs(java
* .lang.String, java.lang.String[])
*/
@Override
@WebMethod(operationName = "runCommandAsyncWithArgs")
public ReturnCode runCommandAsyncWithArgs(@WebParam(name = "executable") String cmd,
@WebParam(name = "arg") String[] args) {
public ReturnCode runCommandAsyncWithArgs(
@WebParam(name = "executable") String cmd,
@WebParam(name = "arg") String[] args) {
return executeCommand(cmd,
args,
null,
true,
null,
false,
true,
false,
0);
}
return executeCommand(cmd, args, null, true, null, false, true, false,
0);
}
/* (non-Javadoc)
* @see net.brutex.xservices.ws.impl.ExecuteService#runCommandWithSSH(java.lang.String, int, java.lang.String, java.lang.String, java.lang.String, long)
/*
* (non-Javadoc)
*
* @see
* net.brutex.xservices.ws.impl.ExecuteService#runCommandWithSSH(java.lang
* .String, int, java.lang.String, java.lang.String, java.lang.String, long)
*/
@Override
@WebMethod(operationName = "runCommandWithSSH")
public ReturnCode runCommandWithSSH(@WebParam(name = "host") HostConnection host,
@WebParam(name = "command") String cmd,
@WebParam(name = "timeout") long timeout) {
public ReturnCode runCommandWithSSH(
@WebParam(name = "host") HostConnection host,
@WebParam(name = "command") String cmd,
@WebParam(name = "timeout") long timeout) {
return sshExec(host.hostname, host.user, host.password, host.port, cmd, timeout);
}
return sshExec(host.hostname, host.user, host.password, host.port, cmd,
timeout);
}
/* (non-Javadoc)
* @see net.brutex.xservices.ws.impl.ExecuteService#runCommandWithSSHKeyAuth(java.lang.String, int, java.lang.String, java.lang.String, java.lang.String, java.lang.String, long)
/*
* (non-Javadoc)
*
* @see
* net.brutex.xservices.ws.impl.ExecuteService#runCommandWithSSHKeyAuth(
* java.lang.String, int, java.lang.String, java.lang.String,
* java.lang.String, java.lang.String, long)
*/
@Override
@WebMethod(operationName = "runCommandWithSSHKeyAuth")
public ReturnCode runCommandWithSSHKeyAuth(@WebParam(name = "host") HostConnection host,
@WebParam(name = "keyfile") String keyfile,
@WebParam(name = "command") String cmd,
@WebParam(name = "timeout") long timeout) {
public ReturnCode runCommandWithSSHKeyAuth(
@WebParam(name = "host") HostConnection host,
@WebParam(name = "keyfile") String keyfile,
@WebParam(name = "command") String cmd,
@WebParam(name = "timeout") long timeout) {
return sshExecWithCert(host.hostname, host.user, host.password, keyfile, host.port, cmd, timeout);
}
return sshExecWithCert(host.hostname, host.user, host.password,
keyfile, host.port, cmd, timeout);
}
/* (non-Javadoc)
* @see net.brutex.xservices.ws.impl.ExecuteService#rExec(net.brutex.xservices.types.HostConnection, java.lang.String, long)
/*
* (non-Javadoc)
*
* @see
* net.brutex.xservices.ws.impl.ExecuteService#rExec(net.brutex.xservices
* .types.HostConnection, java.lang.String, long)
*/
@Override
@WebMethod(operationName = "rExec")
public ReturnCode rExec(@WebParam(name = "host") HostConnection host,
@WebParam(name = "command") String cmd,
@WebParam(name = "timeout") long timeout) {
return rexec(host.hostname, host.port, host.user, host.password, cmd, timeout);
}
public ReturnCode rExec(@WebParam(name = "host") HostConnection host,
@WebParam(name = "command") String cmd,
@WebParam(name = "timeout") long timeout) {
return rexec(host.hostname, host.port, host.user, host.password, cmd,
timeout);
}
/* (non-Javadoc)
* @see net.brutex.xservices.ws.impl.ExecuteService#runTelnet(net.brutex.xservices.types.HostConnection, java.lang.String, java.lang.String, java.lang.String, long)
/*
* (non-Javadoc)
*
* @see
* net.brutex.xservices.ws.impl.ExecuteService#runTelnet(net.brutex.xservices
* .types.HostConnection, java.lang.String, java.lang.String,
* java.lang.String, long)
*/
@Override
@WebMethod(operationName = "telnet")
public ReturnCode runTelnet(@WebParam(name = "host") HostConnection host,
@WebParam(name = "prompt") String prompt,
@WebParam(name = "command") String cmd,
@WebParam(name = "expect") String expect,
@WebParam(name = "timeout") long timeout) {
return telnet(host.hostname, host.port, host.user, host.password, cmd, timeout, prompt, expect);
}
public ReturnCode runTelnet(@WebParam(name = "host") HostConnection host,
@WebParam(name = "prompt") String prompt,
@WebParam(name = "command") String cmd,
@WebParam(name = "expect") String expect,
@WebParam(name = "timeout") long timeout) {
return telnet(host.hostname, host.port, host.user, host.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());
*/
public void runJScript(String script) throws XServicesFault {
exe.setExecutable(executable);
for (String s : args) {
exe.createArg().setValue(s);
}
try {
// Create and enter a Context. A Context stores information about
// the execution environment of a script.
Context cx = Context.enter();
cx.setOptimizationLevel(0);
cx.setLanguageVersion(Context.VERSION_1_7);
// cx is the Context instance you're using to run scripts
/*
* cx.setClassShutter(new ClassShutter() { public boolean
* visibleToScripts(String className) {
* if(className.startsWith("adapter")) return true;
* if(className.startsWith("java.lang.System") ||
* className.startsWith
* ("org.apache.tomcat.util.log.SystemLogHandler")) return true;
* System.out.println(className + " is blocked."); return false; }
* });
*/
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");
}
// Initialise the standard objects (Object, Function, etc.). This
// must be done before scripts can be
// executed. The null parameter tells initStandardObjects
// to create and return a scope object that we use
// in later calls.
Scriptable scope = cx.initStandardObjects();
// Object wrappedOut = Context.javaToJS(System.out, scope);
// Object wrappedOut2 = Context.javaToJS(this, scope);
// scope.put("out", scope, wrappedOut);
// scope.put("exe", scope, wrappedOut2);
exe.setNewenvironment(newenvironment);
exe.setVMLauncher(vmlauncher);
exe.setSearchPath(searchpath);
// Execute the script
// cx.evaluateString(scope, "importClass('java.lang.System');\n",
// "head", 1, null);
// cx.evaluateString(scope, "importPackage('java.util');\n", "head",
// 2, null);
Object obj = cx
.evaluateString(scope, script, "TestScript", 1, null);
return runner.postTask();
}
} catch (Exception e) {
System.out.println(e.getMessage());
} finally {
// Exit the Context. This removes the association between the
// Context and the current thread and is an
// essential cleanup action. There should be a call to exit for
// every call to enter.
Context.exit();
}
@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");
return runner.postTask();
}
}
@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");
return runner.postTask();
}
@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);
@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));
/*
* Commandline cmdl = new Commandline(); cmdl.setExecutable(executable);
* cmdl.addArguments(args); System.out.println(cmdl.describeCommand());
*/
return runner.postTask();
}
exe.setExecutable(executable);
for (String s : args) {
exe.createArg().setValue(s);
}
@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));
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");
}
rexec.createRead().addText(prompt);
rexec.createWrite().addText(command);
rexec.createRead().addText(expect);
exe.setNewenvironment(newenvironment);
exe.setVMLauncher(vmlauncher);
exe.setSearchPath(searchpath);
return runner.postTask();
}
return runner.postTask();
}
@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");
return runner.postTask();
}
@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");
return runner.postTask();
}
@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));
return runner.postTask();
}
@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);
return runner.postTask();
}
}

View File

@ -64,7 +64,7 @@ public class FileServiceImpl implements FileService {
* @see net.brutex.xservices.ws.impl.FileService#basename(java.lang.String,
* java.lang.String)
*/
@Override
public String basename(String filename, String suffix) {
final String BASENAME_VALUE = "basename.value";
Basename basename = new Basename();
@ -139,7 +139,7 @@ public class FileServiceImpl implements FileService {
* net.brutex.xservices.ws.impl.FileService#base64Encode(net.brutex.xservices
* .types.FileSetResource)
*/
@Override
public AttachmentType downloadFile(FileResource res) throws XServicesFault {
InputStream is = null;
try {
@ -163,7 +163,7 @@ public class FileServiceImpl implements FileService {
* net.brutex.xservices.ws.impl.FileService#base64Decode(net.brutex.xservices
* .types.AttachmentType)
*/
@Override
public String uploadFile(AttachmentType file) throws XServicesFault {
DataHandler h = file.getContent();
File f = new File(file.getFilename());
@ -188,7 +188,7 @@ public class FileServiceImpl implements FileService {
* net.brutex.xservices.ws.impl.FileService#copy(net.brutex.xservices.types
* .FileSetResource, java.lang.String, boolean, boolean, java.lang.String)
*/
@Override
public ReturnCode copy(FileSetResource src, String todir, boolean plm,
boolean overwrite, String encoding) throws XServicesFault {
Copy copy = new Copy();
@ -213,7 +213,7 @@ public class FileServiceImpl implements FileService {
return runner.postTask();
}
@Override
public ReturnCode copyFile(String fromFile, String tofile, boolean overwrite)
throws XServicesFault {
Copy copy = new Copy();
@ -235,7 +235,7 @@ public class FileServiceImpl implements FileService {
* net.brutex.xservices.ws.impl.FileService#loadRes(net.brutex.xservices
* .types.FileResource, java.lang.String)
*/
@Override
public String loadRes(FileResource res, String encoding)
throws XServicesFault {
if (encoding == null || encoding.equals("")) {
@ -259,7 +259,7 @@ public class FileServiceImpl implements FileService {
* net.brutex.xservices.ws.impl.FileService#loadResFromArchive(net.brutex
* .xservices.types.ArchiveResource, java.lang.String)
*/
@Override
public String loadResFromArchive(ArchiveResource res, String encoding) {
if (encoding == null || encoding.equals("")) {
encoding = System.getProperty("file.encoding");
@ -282,7 +282,7 @@ public class FileServiceImpl implements FileService {
* @see net.brutex.xservices.ws.impl.FileService#echo2file(java.lang.String,
* java.lang.String, java.lang.String, boolean)
*/
@Override
public ReturnCode echo2file(String message, String file, String encoding,
boolean append) throws XServicesFault {
@ -316,7 +316,7 @@ public class FileServiceImpl implements FileService {
* net.brutex.xservices.ws.impl.FileService#changeOwner(net.brutex.xservices
* .types.FileSetResource, java.lang.String)
*/
@Override
public ReturnCode changeOwner(FileSetResource res, String owner) {
Chown chown = new Chown();
chown.setTaskName("Chown");
@ -335,7 +335,7 @@ public class FileServiceImpl implements FileService {
* net.brutex.xservices.ws.impl.FileService#changeGroup(net.brutex.xservices
* .types.FileSetResource, java.lang.String)
*/
@Override
public ReturnCode changeGroup(FileSetResource res, String group) {
Chgrp chgrp = new Chgrp();
chgrp.setTaskName("Chgrp");
@ -354,7 +354,7 @@ public class FileServiceImpl implements FileService {
* net.brutex.xservices.ws.impl.FileService#changeMode(net.brutex.xservices
* .types.FileSetResource, java.lang.String)
*/
@Override
public ReturnCode changeMode(FileSetResource res, String perm) {
Chmod chmod = new Chmod();
chmod.setTaskName("Chmod");

View File

@ -0,0 +1,151 @@
/*
* Copyright 2011 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.impl;
import static org.quartz.TriggerBuilder.newTrigger;
import java.util.ArrayList;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.Set;
import java.util.TimeZone;
import java.util.UUID;
import javax.jws.WebService;
import org.quartz.JobBuilder;
import org.quartz.JobDataMap;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SimpleTrigger;
import org.quartz.Trigger;
import org.quartz.TriggerKey;
import org.quartz.impl.StdSchedulerFactory;
import org.quartz.impl.matchers.GroupMatcher;
import net.brutex.xservices.types.ScheduledJob;
import net.brutex.xservices.util.BrutexNamespaces;
import net.brutex.xservices.util.JobWrapper;
import net.brutex.xservices.ws.JobService;
import net.brutex.xservices.ws.XServicesFault;
/**
* @author Brian Rosenberger
* @since 0.5.0
*
*/
@WebService(targetNamespace = BrutexNamespaces.WS_XSERVICES, endpointInterface = "net.brutex.xservices.ws.JobService", serviceName = JobService.SERVICE_NAME)
public class JobServiceImpl implements JobService {
public List<ScheduledJob> getJobList() throws XServicesFault {
List<ScheduledJob> joblist = new ArrayList<ScheduledJob>();
try {
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
List<String> jobgroups = scheduler.getJobGroupNames();
for (String g : jobgroups) {
GroupMatcher m = GroupMatcher.groupContains(g);
Set<JobKey> keyset = scheduler.getJobKeys(m);
for (JobKey key : keyset) {
JobDataMap detail = scheduler.getJobDetail(key)
.getJobDataMap();
ScheduledJob job = new ScheduledJob(key.getName(),
(GregorianCalendar) detail.get("date"),
detail.getString("script"));
joblist.add(job);
}
}
} catch (SchedulerException e) {
throw new XServicesFault(e);
}
return joblist;
}
public ScheduledJob getJob(String uuid) throws XServicesFault {
try {
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
JobDetail job = scheduler.getJobDetail(new JobKey(uuid, "DEFAULT"));
if (job == null)
throw new XServicesFault("Job not found.");
Trigger t = scheduler.getTrigger(new TriggerKey(uuid));
GregorianCalendar cal = new GregorianCalendar(TimeZone.getDefault());
cal.setTime(t.getStartTime());
return new ScheduledJob(uuid, cal, job.getJobDataMap().getString(
"script"), job.getDescription());
} catch (SchedulerException e) {
e.printStackTrace();
throw new XServicesFault(e);
}
}
public void deleteJob(String uuid) throws XServicesFault {
try {
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
JobKey key = new JobKey(uuid, "DEFAULT");
JobDetail job = scheduler.getJobDetail(key);
if (job == null)
throw new XServicesFault("Job not found.");
Trigger t = scheduler.getTrigger(new TriggerKey(uuid));
scheduler.deleteJob(key);
} catch (SchedulerException e) {
throw new XServicesFault(e);
}
}
public String scheduleJob(ScheduledJob job) throws XServicesFault {
try {
// Grab the Scheduler instance from the Factory
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
// and start it off
if (!scheduler.isStarted())
scheduler.start();
if (scheduler.isInStandbyMode())
scheduler.resumeAll();
String identity = UUID.randomUUID().toString();
//String identity = "test";
JobDetail job2 = JobBuilder.newJob(JobWrapper.class)
.withIdentity(identity).build();
job2.getJobDataMap().put("script", job.getScript());
job2.getJobDataMap().put("description", job.getDescription());
job2.getJobDataMap().put("date", job.getDate());
SimpleTrigger t = (SimpleTrigger) newTrigger()
.withIdentity(identity).startAt(job.getDate().getTime())
.build();
;
scheduler.scheduleJob(job2, t);
return identity;
} catch (SchedulerException e) {
e.printStackTrace();
throw new XServicesFault(e);
}
}
}

View File

@ -0,0 +1,17 @@
org.quartz.scheduler.instanceName = XServicesScheduler
org.quartz.threadPool.threadCount = 3
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
#org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
#org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.CloudscapeDelegate
#org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate
#org.quartz.jobStore.dataSource = QUARTZ
#org.quartz.dataSource.QUARTZ.driver = org.hsqldb.jdbcDriver
#org.quartz.dataSource.QUARTZ.URL = jdbc:hsqldb:file:quartz_store;shutdown=true;
#org.quartz.dataSource.QUARTZ.user = sa
#org.quartz.dataSource.QUARTZ.connectionProvider.class = net.brutex.xservices.util.BrutexQuartzConnectionProvider
#String url = “jdbc:hsqldb:file:/path/to/database/file”;
#String user = “sa”;
#String password = “”;
#Connection c = DriverManager.getConnection(url, user, password);

View File

@ -1,21 +1,488 @@
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://ws.xservices.brutex.net">
<con:soapui-project name="ExecuteService" soapui-version="3.6.1" abortOnError="false" runType="SEQUENTIAL" xmlns:con="http://eviware.com/soapui/config"><con:settings/><con:interface xsi:type="con:WsdlInterface" wsaVersion="NONE" name="ExecuteServiceSoapBinding" type="wsdl" bindingName="{http://ws.xservices.brutex.net}ExecuteServiceSoapBinding" soapVersion="1_1" anonymous="optional" definition="http://localhost:8080/XServices/ExecuteService?wsdl" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><con:settings/><con:definitionCache type="TEXT" rootPart="http://localhost:8080/XServices/ExecuteService?wsdl"><con:part><con:url>http://localhost:8080/XServices/ExecuteService?wsdl</con:url><con:content><![CDATA[<wsdl:definitions name="ExecuteService" targetNamespace="http://ws.xservices.brutex.net" xmlns:ns1="http://schemas.xmlsoap.org/soap/http" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://ws.xservices.brutex.net" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<wsdl:types>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="unqualified" targetNamespace="http://ws.xservices.brutex.net" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="antProperty" type="tns:antProperty"/>
<xs:element name="rExec" type="tns:rExec"/>
<xs:element name="rExecResponse" type="tns:rExecResponse"/>
<xs:element name="runCommand" type="tns:runCommand"/>
<xs:element name="runCommandAsync" type="tns:runCommandAsync"/>
<xs:element name="runCommandAsyncResponse" type="tns:runCommandAsyncResponse"/>
<xs:element name="runCommandAsyncWithArgs" type="tns:runCommandAsyncWithArgs"/>
<xs:element name="runCommandAsyncWithArgsResponse" type="tns:runCommandAsyncWithArgsResponse"/>
<xs:element name="runCommandResponse" type="tns:runCommandResponse"/>
<xs:element name="runCommandWithArgs" type="tns:runCommandWithArgs"/>
<xs:element name="runCommandWithArgsResponse" type="tns:runCommandWithArgsResponse"/>
<xs:element name="runCommandWithSSH" type="tns:runCommandWithSSH"/>
<xs:element name="runCommandWithSSHKeyAuth" type="tns:runCommandWithSSHKeyAuth"/>
<xs:element name="runCommandWithSSHKeyAuthResponse" type="tns:runCommandWithSSHKeyAuthResponse"/>
<xs:element name="runCommandWithSSHResponse" type="tns:runCommandWithSSHResponse"/>
<xs:element name="runJavaScript" type="tns:runJavaScript"/>
<xs:element name="runJavaScriptResponse" type="tns:runJavaScriptResponse"/>
<xs:element name="telnet" type="tns:telnet"/>
<xs:element name="telnetResponse" type="tns:telnetResponse"/>
<xs:complexType name="runCommandWithSSHKeyAuth">
<xs:sequence>
<xs:element minOccurs="0" name="host" type="tns:connection"/>
<xs:element minOccurs="0" name="keyfile" type="xs:string"/>
<xs:element minOccurs="0" name="command" type="xs:string"/>
<xs:element name="timeout" type="xs:long"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="connection">
<xs:sequence>
<xs:element name="hostname" type="xs:string"/>
<xs:element name="port" type="xs:int"/>
<xs:element minOccurs="0" name="user" type="xs:string"/>
<xs:element minOccurs="0" name="password" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="runCommandWithSSHKeyAuthResponse">
<xs:sequence>
<xs:element minOccurs="0" name="return" type="tns:ReturnCodeType"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ReturnCodeType">
<xs:sequence>
<xs:element name="returnCode" type="xs:int"/>
<xs:element minOccurs="0" name="stdOut" type="xs:string"/>
<xs:element minOccurs="0" name="stdErr" type="xs:string"/>
<xs:element maxOccurs="unbounded" minOccurs="0" name="propertyList" nillable="true" type="tns:antProperty"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="antProperty">
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="value" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="runCommandWithSSH">
<xs:sequence>
<xs:element minOccurs="0" name="host" type="tns:connection"/>
<xs:element minOccurs="0" name="command" type="xs:string"/>
<xs:element name="timeout" type="xs:long"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="runCommandWithSSHResponse">
<xs:sequence>
<xs:element minOccurs="0" name="return" type="tns:ReturnCodeType"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="runJavaScript">
<xs:sequence>
<xs:element minOccurs="0" name="script" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="runJavaScriptResponse">
<xs:sequence/>
</xs:complexType>
<xs:complexType name="telnet">
<xs:sequence>
<xs:element minOccurs="0" name="host" type="tns:connection"/>
<xs:element minOccurs="0" name="prompt" type="xs:string"/>
<xs:element minOccurs="0" name="command" type="xs:string"/>
<xs:element minOccurs="0" name="expect" type="xs:string"/>
<xs:element name="timeout" type="xs:long"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="telnetResponse">
<xs:sequence>
<xs:element minOccurs="0" name="return" type="tns:ReturnCodeType"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="runCommandWithArgs">
<xs:sequence>
<xs:element minOccurs="0" name="executable" type="xs:string"/>
<xs:element maxOccurs="unbounded" minOccurs="0" name="arg" type="xs:string"/>
<xs:element name="timeout" type="xs:long"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="runCommandWithArgsResponse">
<xs:sequence>
<xs:element minOccurs="0" name="return" type="tns:ReturnCodeType"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="rExec">
<xs:sequence>
<xs:element minOccurs="0" name="host" type="tns:connection"/>
<xs:element minOccurs="0" name="command" type="xs:string"/>
<xs:element name="timeout" type="xs:long"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="rExecResponse">
<xs:sequence>
<xs:element minOccurs="0" name="return" type="tns:ReturnCodeType"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="runCommandAsync">
<xs:sequence>
<xs:element minOccurs="0" name="executable" type="xs:string"/>
<xs:element minOccurs="0" name="argline" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="runCommandAsyncResponse">
<xs:sequence>
<xs:element minOccurs="0" name="return" type="tns:ReturnCodeType"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="runCommand">
<xs:sequence>
<xs:element minOccurs="0" name="executable" type="xs:string"/>
<xs:element minOccurs="0" name="argline" type="xs:string"/>
<xs:element name="timeout" type="xs:long"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="runCommandResponse">
<xs:sequence>
<xs:element minOccurs="0" name="return" type="tns:ReturnCodeType"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="runCommandAsyncWithArgs">
<xs:sequence>
<xs:element minOccurs="0" name="executable" type="xs:string"/>
<xs:element maxOccurs="unbounded" minOccurs="0" name="arg" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="runCommandAsyncWithArgsResponse">
<xs:sequence>
<xs:element minOccurs="0" name="return" type="tns:ReturnCodeType"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="XServicesFault">
<xs:sequence>
<xs:element name="faultstring" nillable="true" type="xs:string"/>
<xs:element name="username" nillable="true" type="xs:string"/>
<xs:element name="homedir" nillable="true" type="xs:string"/>
<xs:element name="timestamp" nillable="true" type="xs:anySimpleType"/>
<xs:element name="jvmruntime" nillable="true" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:element name="XServicesFault" type="tns:XServicesFault"/>
</xs:schema>
</wsdl:types>
<wsdl:message name="runCommandAsyncWithArgs">
<wsdl:part element="tns:runCommandAsyncWithArgs" name="parameters"></wsdl:part>
</wsdl:message>
<wsdl:message name="runCommandWithSSHKeyAuth">
<wsdl:part element="tns:runCommandWithSSHKeyAuth" name="parameters"></wsdl:part>
</wsdl:message>
<wsdl:message name="runCommandWithSSHKeyAuthResponse">
<wsdl:part element="tns:runCommandWithSSHKeyAuthResponse" name="parameters"></wsdl:part>
</wsdl:message>
<wsdl:message name="runCommandWithArgsResponse">
<wsdl:part element="tns:runCommandWithArgsResponse" name="parameters"></wsdl:part>
</wsdl:message>
<wsdl:message name="rExec">
<wsdl:part element="tns:rExec" name="parameters"></wsdl:part>
</wsdl:message>
<wsdl:message name="runCommandAsync">
<wsdl:part element="tns:runCommandAsync" name="parameters"></wsdl:part>
</wsdl:message>
<wsdl:message name="XServicesFault">
<wsdl:part element="tns:XServicesFault" name="XServicesFault"></wsdl:part>
</wsdl:message>
<wsdl:message name="runJavaScript">
<wsdl:part element="tns:runJavaScript" name="parameters"></wsdl:part>
</wsdl:message>
<wsdl:message name="runCommandAsyncResponse">
<wsdl:part element="tns:runCommandAsyncResponse" name="parameters"></wsdl:part>
</wsdl:message>
<wsdl:message name="runCommandWithSSH">
<wsdl:part element="tns:runCommandWithSSH" name="parameters"></wsdl:part>
</wsdl:message>
<wsdl:message name="runCommandAsyncWithArgsResponse">
<wsdl:part element="tns:runCommandAsyncWithArgsResponse" name="parameters"></wsdl:part>
</wsdl:message>
<wsdl:message name="runCommand">
<wsdl:part element="tns:runCommand" name="parameters"></wsdl:part>
</wsdl:message>
<wsdl:message name="telnet">
<wsdl:part element="tns:telnet" name="parameters"></wsdl:part>
</wsdl:message>
<wsdl:message name="rExecResponse">
<wsdl:part element="tns:rExecResponse" name="parameters"></wsdl:part>
</wsdl:message>
<wsdl:message name="runCommandWithArgs">
<wsdl:part element="tns:runCommandWithArgs" name="parameters"></wsdl:part>
</wsdl:message>
<wsdl:message name="runCommandResponse">
<wsdl:part element="tns:runCommandResponse" name="parameters"></wsdl:part>
</wsdl:message>
<wsdl:message name="runCommandWithSSHResponse">
<wsdl:part element="tns:runCommandWithSSHResponse" name="parameters"></wsdl:part>
</wsdl:message>
<wsdl:message name="runJavaScriptResponse">
<wsdl:part element="tns:runJavaScriptResponse" name="parameters"></wsdl:part>
</wsdl:message>
<wsdl:message name="telnetResponse">
<wsdl:part element="tns:telnetResponse" name="parameters"></wsdl:part>
</wsdl:message>
<wsdl:portType name="ExecuteService">
<wsdl:operation name="runCommandWithSSHKeyAuth">
<wsdl:input message="tns:runCommandWithSSHKeyAuth" name="runCommandWithSSHKeyAuth"></wsdl:input>
<wsdl:output message="tns:runCommandWithSSHKeyAuthResponse" name="runCommandWithSSHKeyAuthResponse"></wsdl:output>
</wsdl:operation>
<wsdl:operation name="runCommandWithSSH">
<wsdl:input message="tns:runCommandWithSSH" name="runCommandWithSSH"></wsdl:input>
<wsdl:output message="tns:runCommandWithSSHResponse" name="runCommandWithSSHResponse"></wsdl:output>
</wsdl:operation>
<wsdl:operation name="runJavaScript">
<wsdl:input message="tns:runJavaScript" name="runJavaScript"></wsdl:input>
<wsdl:output message="tns:runJavaScriptResponse" name="runJavaScriptResponse"></wsdl:output>
<wsdl:fault message="tns:XServicesFault" name="XServicesFault"></wsdl:fault>
</wsdl:operation>
<wsdl:operation name="telnet">
<wsdl:input message="tns:telnet" name="telnet"></wsdl:input>
<wsdl:output message="tns:telnetResponse" name="telnetResponse"></wsdl:output>
</wsdl:operation>
<wsdl:operation name="runCommandWithArgs">
<wsdl:input message="tns:runCommandWithArgs" name="runCommandWithArgs"></wsdl:input>
<wsdl:output message="tns:runCommandWithArgsResponse" name="runCommandWithArgsResponse"></wsdl:output>
</wsdl:operation>
<wsdl:operation name="rExec">
<wsdl:input message="tns:rExec" name="rExec"></wsdl:input>
<wsdl:output message="tns:rExecResponse" name="rExecResponse"></wsdl:output>
</wsdl:operation>
<wsdl:operation name="runCommandAsync">
<wsdl:input message="tns:runCommandAsync" name="runCommandAsync"></wsdl:input>
<wsdl:output message="tns:runCommandAsyncResponse" name="runCommandAsyncResponse"></wsdl:output>
</wsdl:operation>
<wsdl:operation name="runCommand">
<wsdl:input message="tns:runCommand" name="runCommand"></wsdl:input>
<wsdl:output message="tns:runCommandResponse" name="runCommandResponse"></wsdl:output>
</wsdl:operation>
<wsdl:operation name="runCommandAsyncWithArgs">
<wsdl:input message="tns:runCommandAsyncWithArgs" name="runCommandAsyncWithArgs"></wsdl:input>
<wsdl:output message="tns:runCommandAsyncWithArgsResponse" name="runCommandAsyncWithArgsResponse"></wsdl:output>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="ExecuteServiceSoapBinding" type="tns:ExecuteService">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="runCommandWithSSHKeyAuth">
<soap:operation soapAction="" style="document"/>
<wsdl:input name="runCommandWithSSHKeyAuth">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="runCommandWithSSHKeyAuthResponse">
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="runCommandWithSSH">
<soap:operation soapAction="" style="document"/>
<wsdl:input name="runCommandWithSSH">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="runCommandWithSSHResponse">
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="runJavaScript">
<soap:operation soapAction="" style="document"/>
<wsdl:input name="runJavaScript">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="runJavaScriptResponse">
<soap:body use="literal"/>
</wsdl:output>
<wsdl:fault name="XServicesFault">
<soap:fault name="XServicesFault" use="literal"/>
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="telnet">
<soap:operation soapAction="" style="document"/>
<wsdl:input name="telnet">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="telnetResponse">
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="rExec">
<soap:operation soapAction="" style="document"/>
<wsdl:input name="rExec">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="rExecResponse">
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="runCommandWithArgs">
<soap:operation soapAction="" style="document"/>
<wsdl:input name="runCommandWithArgs">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="runCommandWithArgsResponse">
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="runCommandAsync">
<soap:operation soapAction="" style="document"/>
<wsdl:input name="runCommandAsync">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="runCommandAsyncResponse">
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="runCommand">
<soap:operation soapAction="" style="document"/>
<wsdl:input name="runCommand">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="runCommandResponse">
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="runCommandAsyncWithArgs">
<soap:operation soapAction="" style="document"/>
<wsdl:input name="runCommandAsyncWithArgs">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="runCommandAsyncWithArgsResponse">
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="ExecuteService">
<wsdl:port binding="tns:ExecuteServiceSoapBinding" name="ExecuteServiceImplPort">
<soap:address location="http://localhost:8080/XServices/ExecuteService"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>]]></con:content><con:type>http://schemas.xmlsoap.org/wsdl/</con:type></con:part></con:definitionCache><con:endpoints><con:endpoint>http://localhost:8080/XServices/ExecuteService</con:endpoint></con:endpoints><con:operation isOneWay="false" action="" name="rExec" bindingOperationName="rExec" type="Request-Response" outputName="rExecResponse" inputName="rExec" receivesAttachments="false" sendsAttachments="false" anonymous="optional"><con:settings/><con:call name="Request 1"><con:settings/><con:encoding>UTF-8</con:encoding><con:endpoint>http://localhost:8080/XServices/ExecuteService</con:endpoint><con:request><![CDATA[<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://ws.xservices.brutex.net">
<soapenv:Header/>
<soapenv:Body>
<ws:rExec>
<!--Optional:-->
<host>
<hostname>?</hostname>
<port>?</port>
<!--Optional:-->
<user>?</user>
<!--Optional:-->
<password>?</password>
</host>
<!--Optional:-->
<command>?</command>
<timeout>?</timeout>
</ws:rExec>
</soapenv:Body>
</soapenv:Envelope>]]></con:request><con:wsaConfig mustUnderstand="NONE" version="200508" action="http://ws.xservices.brutex.net/ExecuteService/rExec"/></con:call></con:operation><con:operation isOneWay="false" action="" name="runCommand" bindingOperationName="runCommand" type="Request-Response" outputName="runCommandResponse" inputName="runCommand" receivesAttachments="false" sendsAttachments="false" anonymous="optional"><con:settings/><con:call name="Request 1"><con:settings/><con:encoding>UTF-8</con:encoding><con:endpoint>http://localhost:8080/XServices/ExecuteService</con:endpoint><con:request><![CDATA[<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://ws.xservices.brutex.net">
<soapenv:Header/>
<soapenv:Body>
<ws:runCommand>
<!--Optional:-->
<executable>?</executable>
<!--Optional:-->
<argline>?</argline>
<timeout>?</timeout>
</ws:runCommand>
</soapenv:Body>
</soapenv:Envelope>]]></con:request><con:jmsConfig JMSDeliveryMode="PERSISTENT"/><con:jmsPropertyConfig/><con:wsaConfig mustUnderstand="NONE" version="200508" action="http://ws.xservices.brutex.net/ExecuteService/runCommand"/><con:wsrmConfig version="1.2"/></con:call></con:operation><con:operation isOneWay="false" action="" name="runCommandAsync" bindingOperationName="runCommandAsync" type="Request-Response" outputName="runCommandAsyncResponse" inputName="runCommandAsync" receivesAttachments="false" sendsAttachments="false" anonymous="optional"><con:settings/><con:call name="Request 1"><con:settings/><con:encoding>UTF-8</con:encoding><con:endpoint>http://localhost:8080/XServices/ExecuteService</con:endpoint><con:request><![CDATA[<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://ws.xservices.brutex.net">
<soapenv:Header/>
<soapenv:Body>
<ws:runCommandAsync>
<!--Optional:-->
<executable>?</executable>
<!--Optional:-->
<argline>?</argline>
</ws:runCommandAsync>
</soapenv:Body>
</soapenv:Envelope>]]></con:request><con:wsaConfig mustUnderstand="NONE" version="200508" action="http://ws.xservices.brutex.net/ExecuteService/runCommandAsync"/></con:call></con:operation><con:operation isOneWay="false" action="" name="runCommandAsyncWithArgs" bindingOperationName="runCommandAsyncWithArgs" type="Request-Response" outputName="runCommandAsyncWithArgsResponse" inputName="runCommandAsyncWithArgs" receivesAttachments="false" sendsAttachments="false" anonymous="optional"><con:settings/><con:call name="Request 1"><con:settings/><con:encoding>UTF-8</con:encoding><con:endpoint>http://localhost:8080/XServices/ExecuteService</con:endpoint><con:request><![CDATA[<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://ws.xservices.brutex.net">
<soapenv:Header/>
<soapenv:Body>
<ws:runCommandAsyncWithArgs>
<!--Optional:-->
<executable>?</executable>
<!--Zero or more repetitions:-->
<arg>?</arg>
</ws:runCommandAsyncWithArgs>
</soapenv:Body>
</soapenv:Envelope>]]></con:request><con:wsaConfig mustUnderstand="NONE" version="200508" action="http://ws.xservices.brutex.net/ExecuteService/runCommandAsyncWithArgs"/></con:call></con:operation><con:operation isOneWay="false" action="" name="runCommandWithArgs" bindingOperationName="runCommandWithArgs" type="Request-Response" outputName="runCommandWithArgsResponse" inputName="runCommandWithArgs" receivesAttachments="false" sendsAttachments="false" anonymous="optional"><con:settings/><con:call name="Request 1"><con:settings/><con:encoding>UTF-8</con:encoding><con:endpoint>http://localhost:8080/XServices/ExecuteService</con:endpoint><con:request><![CDATA[<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://ws.xservices.brutex.net">
<soapenv:Header/>
<soapenv:Body>
<ws:runCommandWithArgs>
<!--Optional:-->
<executable>?</executable>
<!--Zero or more repetitions:-->
<arg>?</arg>
<timeout>?</timeout>
</ws:runCommandWithArgs>
</soapenv:Body>
</soapenv:Envelope>]]></con:request><con:wsaConfig mustUnderstand="NONE" version="200508" action="http://ws.xservices.brutex.net/ExecuteService/runCommandWithArgs"/></con:call></con:operation><con:operation isOneWay="false" action="" name="runCommandWithSSH" bindingOperationName="runCommandWithSSH" type="Request-Response" outputName="runCommandWithSSHResponse" inputName="runCommandWithSSH" receivesAttachments="false" sendsAttachments="false" anonymous="optional"><con:settings/><con:call name="Request 1"><con:settings/><con:encoding>UTF-8</con:encoding><con:endpoint>http://localhost:8080/XServices/ExecuteService</con:endpoint><con:request><![CDATA[<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://ws.xservices.brutex.net">
<soapenv:Header/>
<soapenv:Body>
<ws:runCommandWithSSH>
<!--Optional:-->
<host>
<hostname>?</hostname>
<port>?</port>
<!--Optional:-->
<user>?</user>
<!--Optional:-->
<password>?</password>
</host>
<!--Optional:-->
<command>?</command>
<timeout>?</timeout>
</ws:runCommandWithSSH>
</soapenv:Body>
</soapenv:Envelope>]]></con:request><con:wsaConfig mustUnderstand="NONE" version="200508" action="http://ws.xservices.brutex.net/ExecuteService/runCommandWithSSH"/></con:call></con:operation><con:operation isOneWay="false" action="" name="runCommandWithSSHKeyAuth" bindingOperationName="runCommandWithSSHKeyAuth" type="Request-Response" outputName="runCommandWithSSHKeyAuthResponse" inputName="runCommandWithSSHKeyAuth" receivesAttachments="false" sendsAttachments="false" anonymous="optional"><con:settings/><con:call name="Request 1"><con:settings/><con:encoding>UTF-8</con:encoding><con:endpoint>http://localhost:8080/XServices/ExecuteService</con:endpoint><con:request><![CDATA[<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://ws.xservices.brutex.net">
<soapenv:Header/>
<soapenv:Body>
<ws:runCommandWithSSHKeyAuth>
<!--Optional:-->
<host>
<hostname>?</hostname>
<port>?</port>
<!--Optional:-->
<user>?</user>
<!--Optional:-->
<password>?</password>
</host>
<!--Optional:-->
<keyfile>?</keyfile>
<!--Optional:-->
<command>?</command>
<timeout>?</timeout>
</ws:runCommandWithSSHKeyAuth>
</soapenv:Body>
</soapenv:Envelope>]]></con:request><con:wsaConfig mustUnderstand="NONE" version="200508" action="http://ws.xservices.brutex.net/ExecuteService/runCommandWithSSHKeyAuth"/></con:call></con:operation><con:operation isOneWay="false" action="" name="runJavaScript" bindingOperationName="runJavaScript" type="Request-Response" outputName="runJavaScriptResponse" inputName="runJavaScript" receivesAttachments="false" sendsAttachments="false" anonymous="optional"><con:settings/><con:call name="Request 1"><con:settings><con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers">&lt;xml-fragment/></con:setting></con:settings><con:encoding>UTF-8</con:encoding><con:endpoint>http://localhost:8080/XServices/ExecuteService</con:endpoint><con:request><![CDATA[<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://ws.xservices.brutex.net">
<soapenv:Header/>
<soapenv:Body>
<ws:runJavaScript>
<!--Optional:-->
<script><![CDATA[
// Equivalent in effect to the Java declaration import java.io.*;
var bla = JavaImporter(Packages.java.util);
var blub = JavaImporter(Packages.java.lang);
with(blub) {
System.out.println("Mein out: ");
}
]]]]>><![CDATA[</script>
</ws:runJavaScript>
</soapenv:Body>
</soapenv:Envelope>]]></con:request><con:jmsConfig JMSDeliveryMode="PERSISTENT"/><con:jmsPropertyConfig/><con:wsaConfig mustUnderstand="NONE" version="200508" action="http://ws.xservices.brutex.net/ExecuteService/runJavaScript"/><con:wsrmConfig version="1.2"/></con:call></con:operation><con:operation isOneWay="false" action="" name="telnet" bindingOperationName="telnet" type="Request-Response" outputName="telnetResponse" inputName="telnet" receivesAttachments="false" sendsAttachments="false" anonymous="optional"><con:settings/><con:call name="Request 1"><con:settings/><con:encoding>UTF-8</con:encoding><con:endpoint>http://localhost:8080/XServices/ExecuteService</con:endpoint><con:request><![CDATA[<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://ws.xservices.brutex.net">
<soapenv:Header/>
<soapenv:Body>
<ws:telnet>
<!--Optional:-->
<host>
<hostname>localhost</hostname>
<port>23</port>
<hostname>?</hostname>
<port>?</port>
<!--Optional:-->
<user>brosenberger</user>
<user>?</user>
<!--Optional:-->
<password/>
<password>?</password>
</host>
<prompt>C:\Users\brosenberger></prompt>
<command>dir c:\</command>
<expect>enberger></expect>
<timeout>30000</timeout>
<!--Optional:-->
<prompt>?</prompt>
<!--Optional:-->
<command>?</command>
<!--Optional:-->
<expect>?</expect>
<timeout>?</timeout>
</ws:telnet>
</soapenv:Body>
</soapenv:Envelope>
</soapenv:Envelope>]]></con:request><con:wsaConfig mustUnderstand="NONE" version="200508" action="http://ws.xservices.brutex.net/ExecuteService/telnet"/></con:call></con:operation></con:interface><con:properties/><con:wssContainer/></con:soapui-project>

View File

@ -0,0 +1,232 @@
<?xml version="1.0" encoding="UTF-8"?>
<con:soapui-project name="JobServices" resourceRoot="" soapui-version="3.6.1" abortOnError="false" runType="SEQUENTIAL" xmlns:con="http://eviware.com/soapui/config"><con:settings/><con:interface xsi:type="con:WsdlInterface" wsaVersion="NONE" name="JobServiceSoapBinding" type="wsdl" bindingName="{http://ws.xservices.brutex.net}JobServiceSoapBinding" soapVersion="1_1" anonymous="optional" definition="http://localhost:8080/XServices/JobServices?wsdl" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><con:settings/><con:definitionCache type="TEXT" rootPart="http://localhost:8080/XServices/JobServices?wsdl"><con:part><con:url>http://localhost:8080/XServices/JobServices?wsdl</con:url><con:content><![CDATA[<wsdl:definitions name="JobService" targetNamespace="http://ws.xservices.brutex.net" xmlns:ns1="http://schemas.xmlsoap.org/soap/http" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://ws.xservices.brutex.net" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<wsdl:types>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="unqualified" targetNamespace="http://ws.xservices.brutex.net" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="deleteJob" type="tns:deleteJob"/>
<xs:element name="deleteJobResponse" type="tns:deleteJobResponse"/>
<xs:element name="getJob" type="tns:getJob"/>
<xs:element name="getJobResponse" type="tns:getJobResponse"/>
<xs:element name="getJobs" type="tns:getJobs"/>
<xs:element name="getJobsResponse" type="tns:getJobsResponse"/>
<xs:element name="scheduleJob" type="tns:scheduleJob"/>
<xs:element name="scheduleJobResponse" type="tns:scheduleJobResponse"/>
<xs:complexType name="getJobs">
<xs:sequence/>
</xs:complexType>
<xs:complexType name="getJobsResponse">
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" name="return" type="tns:scheduledJob"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="scheduledJob">
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element minOccurs="0" name="description" type="xs:string"/>
<xs:element name="datetime" type="xs:dateTime"/>
<xs:element minOccurs="0" name="script" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="getJob">
<xs:sequence>
<xs:element name="id" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="getJobResponse">
<xs:sequence>
<xs:element minOccurs="0" name="return" type="tns:scheduledJob"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="deleteJob">
<xs:sequence>
<xs:element name="id" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="deleteJobResponse">
<xs:sequence/>
</xs:complexType>
<xs:complexType name="scheduleJob">
<xs:sequence>
<xs:element name="job" type="tns:scheduledJob"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="scheduleJobResponse">
<xs:sequence>
<xs:element minOccurs="0" name="return" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="XServicesFault">
<xs:sequence>
<xs:element name="faultstring" nillable="true" type="xs:string"/>
<xs:element name="username" nillable="true" type="xs:string"/>
<xs:element name="homedir" nillable="true" type="xs:string"/>
<xs:element name="timestamp" nillable="true" type="xs:anySimpleType"/>
<xs:element name="jvmruntime" nillable="true" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:element name="XServicesFault" type="tns:XServicesFault"/>
</xs:schema>
</wsdl:types>
<wsdl:message name="scheduleJob">
<wsdl:part element="tns:scheduleJob" name="parameters"></wsdl:part>
</wsdl:message>
<wsdl:message name="getJobResponse">
<wsdl:part element="tns:getJobResponse" name="parameters"></wsdl:part>
</wsdl:message>
<wsdl:message name="deleteJob">
<wsdl:part element="tns:deleteJob" name="parameters"></wsdl:part>
</wsdl:message>
<wsdl:message name="getJob">
<wsdl:part element="tns:getJob" name="parameters"></wsdl:part>
</wsdl:message>
<wsdl:message name="getJobs">
<wsdl:part element="tns:getJobs" name="parameters"></wsdl:part>
</wsdl:message>
<wsdl:message name="getJobsResponse">
<wsdl:part element="tns:getJobsResponse" name="parameters"></wsdl:part>
</wsdl:message>
<wsdl:message name="scheduleJobResponse">
<wsdl:part element="tns:scheduleJobResponse" name="parameters"></wsdl:part>
</wsdl:message>
<wsdl:message name="deleteJobResponse">
<wsdl:part element="tns:deleteJobResponse" name="parameters"></wsdl:part>
</wsdl:message>
<wsdl:message name="XServicesFault">
<wsdl:part element="tns:XServicesFault" name="XServicesFault"></wsdl:part>
</wsdl:message>
<wsdl:portType name="JobService">
<wsdl:operation name="getJobs">
<wsdl:documentation>Get list of scheduled jobs</wsdl:documentation>
<wsdl:input message="tns:getJobs" name="getJobs"></wsdl:input>
<wsdl:output message="tns:getJobsResponse" name="getJobsResponse"></wsdl:output>
<wsdl:fault message="tns:XServicesFault" name="XServicesFault"></wsdl:fault>
</wsdl:operation>
<wsdl:operation name="getJob">
<wsdl:documentation>Get a job by id</wsdl:documentation>
<wsdl:input message="tns:getJob" name="getJob"></wsdl:input>
<wsdl:output message="tns:getJobResponse" name="getJobResponse"></wsdl:output>
<wsdl:fault message="tns:XServicesFault" name="XServicesFault"></wsdl:fault>
</wsdl:operation>
<wsdl:operation name="deleteJob">
<wsdl:documentation>Delete a scheduled job.</wsdl:documentation>
<wsdl:input message="tns:deleteJob" name="deleteJob"></wsdl:input>
<wsdl:output message="tns:deleteJobResponse" name="deleteJobResponse"></wsdl:output>
<wsdl:fault message="tns:XServicesFault" name="XServicesFault"></wsdl:fault>
</wsdl:operation>
<wsdl:operation name="scheduleJob">
<wsdl:documentation>Schedule a job</wsdl:documentation>
<wsdl:input message="tns:scheduleJob" name="scheduleJob"></wsdl:input>
<wsdl:output message="tns:scheduleJobResponse" name="scheduleJobResponse"></wsdl:output>
<wsdl:fault message="tns:XServicesFault" name="XServicesFault"></wsdl:fault>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="JobServiceSoapBinding" type="tns:JobService">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="getJobs">
<soap:operation soapAction="" style="document"/>
<wsdl:input name="getJobs">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="getJobsResponse">
<soap:body use="literal"/>
</wsdl:output>
<wsdl:fault name="XServicesFault">
<soap:fault name="XServicesFault" use="literal"/>
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="getJob">
<soap:operation soapAction="" style="document"/>
<wsdl:input name="getJob">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="getJobResponse">
<soap:body use="literal"/>
</wsdl:output>
<wsdl:fault name="XServicesFault">
<soap:fault name="XServicesFault" use="literal"/>
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="deleteJob">
<soap:operation soapAction="" style="document"/>
<wsdl:input name="deleteJob">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="deleteJobResponse">
<soap:body use="literal"/>
</wsdl:output>
<wsdl:fault name="XServicesFault">
<soap:fault name="XServicesFault" use="literal"/>
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="scheduleJob">
<soap:operation soapAction="" style="document"/>
<wsdl:input name="scheduleJob">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="scheduleJobResponse">
<soap:body use="literal"/>
</wsdl:output>
<wsdl:fault name="XServicesFault">
<soap:fault name="XServicesFault" use="literal"/>
</wsdl:fault>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="JobService">
<wsdl:port binding="tns:JobServiceSoapBinding" name="JobServiceImplPort">
<soap:address location="http://localhost:8080/XServices/JobServices"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>]]></con:content><con:type>http://schemas.xmlsoap.org/wsdl/</con:type></con:part></con:definitionCache><con:endpoints><con:endpoint>http://localhost:8080/XServices/JobServices</con:endpoint></con:endpoints><con:operation isOneWay="false" action="" name="getJobs" bindingOperationName="getJobs" type="Request-Response" outputName="getJobsResponse" inputName="getJobs" receivesAttachments="false" sendsAttachments="false" anonymous="optional"><con:settings/><con:call name="Request 1"><con:settings><con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers">&lt;xml-fragment/></con:setting></con:settings><con:encoding>UTF-8</con:encoding><con:endpoint>http://localhost:8080/XServices/JobServices</con:endpoint><con:request><![CDATA[<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://ws.xservices.brutex.net">
<soapenv:Header/>
<soapenv:Body>
<ws:getJobs/>
</soapenv:Body>
</soapenv:Envelope>]]></con:request><con:jmsConfig JMSDeliveryMode="PERSISTENT"/><con:jmsPropertyConfig/><con:wsaConfig mustUnderstand="NONE" version="200508" action="http://ws.xservices.brutex.net/JobService/getJobs"/><con:wsrmConfig version="1.2"/></con:call></con:operation><con:operation isOneWay="false" action="" name="getJob" bindingOperationName="getJob" type="Request-Response" outputName="getJobResponse" inputName="getJob" receivesAttachments="false" sendsAttachments="false" anonymous="optional"><con:settings/><con:call name="Request 1"><con:settings><con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers">&lt;xml-fragment/></con:setting></con:settings><con:encoding>UTF-8</con:encoding><con:endpoint>http://localhost:8080/XServices/JobServices</con:endpoint><con:request><![CDATA[<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://ws.xservices.brutex.net">
<soapenv:Header/>
<soapenv:Body>
<ws:getJob>
<id>6b3da1f0-ff1c-4422-b2ce-17a6d1c2a990</id>
</ws:getJob>
</soapenv:Body>
</soapenv:Envelope>]]></con:request><con:jmsConfig JMSDeliveryMode="PERSISTENT"/><con:jmsPropertyConfig/><con:wsaConfig mustUnderstand="NONE" version="200508" action="http://ws.xservices.brutex.net/JobService/getJob"/><con:wsrmConfig version="1.2"/></con:call></con:operation><con:operation isOneWay="false" action="" name="scheduleJob" bindingOperationName="scheduleJob" type="Request-Response" outputName="scheduleJobResponse" inputName="scheduleJob" receivesAttachments="false" sendsAttachments="false" anonymous="optional"><con:settings/><con:call name="Request 1"><con:settings><con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers">&lt;xml-fragment/></con:setting></con:settings><con:encoding>UTF-8</con:encoding><con:endpoint>http://localhost:8080/XServices/JobServices</con:endpoint><con:request><![CDATA[<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://ws.xservices.brutex.net">
<soapenv:Header/>
<soapenv:Body>
<ws:scheduleJob>
<job>
<name></name>
<datetime>2011-06-06T17:00:00+02:00</datetime>
<!--Optional:-->
<script><![CDATA[
java.lang.System.out.println("hm")
java.lang.System.out.println("hm")
java.lang.System.out.println("hm")
java.lang.System.out.println("hm")
vjava.lang.System.out.println("hm")
java.lang.System.out.println("hm")
java.lang.System.out.println("hm")
java.lang.System.out.println("hm")
java.lang.System.out.println("hm")
vvvv
java.lang.System.out.println("hm")
java.lang.System.out.println("hm")
java.lang.System.out.println("hm")
java.lang.System.out.println("hm")
v
java.lang.System.out.println("hm")
java.lang.System.out.println("hm")
java.lang.System.out.println("hm")
java.lang.System.out.println("hm")
]]]]>><![CDATA[</script>
</job>
</ws:scheduleJob>
</soapenv:Body>
</soapenv:Envelope>]]></con:request><con:jmsConfig JMSDeliveryMode="PERSISTENT"/><con:jmsPropertyConfig/><con:wsaConfig mustUnderstand="NONE" version="200508" action="http://ws.xservices.brutex.net/JobService/scheduleJob"/><con:wsrmConfig version="1.2"/></con:call></con:operation><con:operation isOneWay="false" action="" name="deleteJob" bindingOperationName="deleteJob" type="Request-Response" outputName="deleteJobResponse" inputName="deleteJob" receivesAttachments="false" sendsAttachments="false" anonymous="optional"><con:settings/><con:call name="Request 1"><con:settings><con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers">&lt;xml-fragment/></con:setting></con:settings><con:encoding>UTF-8</con:encoding><con:endpoint>http://localhost:8080/XServices/JobServices</con:endpoint><con:request><![CDATA[<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://ws.xservices.brutex.net">
<soapenv:Header/>
<soapenv:Body>
<ws:deleteJob>
<id>6b3da1f0-ff1c-4422-b2ce-17a6d1c2a990</id>
</ws:deleteJob>
</soapenv:Body>
</soapenv:Envelope>]]></con:request><con:jmsConfig JMSDeliveryMode="PERSISTENT"/><con:jmsPropertyConfig/><con:wsaConfig mustUnderstand="NONE" version="200508" action="http://ws.xservices.brutex.net/JobService/deleteJob"/><con:wsrmConfig version="1.2"/></con:call></con:operation></con:interface><con:properties/><con:wssContainer/></con:soapui-project>

View File

@ -41,6 +41,10 @@
<jaxws:endpoint id="executeservice"
implementor="net.brutex.xservices.ws.impl.ExecuteServiceImpl" address="/ExecuteService" />
<jaxws:endpoint id="jobservice"
implementor="net.brutex.xservices.ws.impl.JobServiceImpl" address="/JobService" />
<jaxws:endpoint id="miscservice"
implementor="net.brutex.xservices.ws.impl.MiscServiceImpl" address="/MiscService" />
</beans>

View File

@ -0,0 +1,8 @@
create table qrtz_blob_triggers(
sched_name varchar(120) not null,
trigger_name varchar(200) not null,
trigger_group varchar(200) not null,
blob_data blob,
primary key (sched_name,trigger_name,trigger_group),
foreign key (sched_name,trigger_name,trigger_group) references qrtz_triggers(sched_name,trigger_name,trigger_group)
)

View File

@ -0,0 +1,6 @@
create table qrtz_calendars(
sched_name varchar(120) not null,
calendar_name varchar(200) not null,
calendar blob not null,
primary key (sched_name,calendar_name)
)

View File

@ -0,0 +1,9 @@
create table qrtz_cron_triggers(
sched_name varchar(120) not null,
trigger_name varchar(200) not null,
trigger_group varchar(200) not null,
cron_expression varchar(120) not null,
time_zone_id varchar(80),
primary key (sched_name,trigger_name,trigger_group),
foreign key (sched_name,trigger_name,trigger_group) references qrtz_triggers(sched_name,trigger_name,trigger_group)
)

View File

@ -0,0 +1,15 @@
create table qrtz_fired_triggers(
sched_name varchar(120) not null,
entry_id varchar(95) not null,
trigger_name varchar(200) not null,
trigger_group varchar(200) not null,
instance_name varchar(200) not null,
fired_time bigint not null,
priority integer not null,
state varchar(16) not null,
job_name varchar(200),
job_group varchar(200),
is_nonconcurrent varchar(5),
requests_recovery varchar(5),
primary key (sched_name,entry_id)
)

View File

@ -0,0 +1,13 @@
create table qrtz_job_details (
sched_name varchar(120) not null,
job_name varchar(200) not null,
job_group varchar(200) not null,
description varchar(250) ,
job_class_name varchar(250) not null,
is_durable varchar(5) not null,
is_nonconcurrent varchar(5) not null,
is_update_data varchar(5) not null,
requests_recovery varchar(5) not null,
job_data blob,
primary key (sched_name,job_name,job_group)
)

View File

@ -0,0 +1,6 @@
create table qrtz_locks
(
sched_name varchar(120) not null,
lock_name varchar(40) not null,
primary key (sched_name,lock_name)
)

View File

@ -0,0 +1,6 @@
create table qrtz_paused_trigger_grps
(
sched_name varchar(120) not null,
trigger_group varchar(200) not null,
primary key (sched_name,trigger_group)
)

View File

@ -0,0 +1,8 @@
create table qrtz_scheduler_state
(
sched_name varchar(120) not null,
instance_name varchar(200) not null,
last_checkin_time bigint not null,
checkin_interval bigint not null,
primary key (sched_name,instance_name)
)

View File

@ -0,0 +1,10 @@
create table qrtz_simple_triggers(
sched_name varchar(120) not null,
trigger_name varchar(200) not null,
trigger_group varchar(200) not null,
repeat_count bigint not null,
repeat_interval bigint not null,
times_triggered bigint not null,
primary key (sched_name,trigger_name,trigger_group),
foreign key (sched_name,trigger_name,trigger_group) references qrtz_triggers(sched_name,trigger_name,trigger_group)
)

View File

@ -0,0 +1,19 @@
CREATE TABLE qrtz_simprop_triggers (
sched_name varchar(120) not null,
TRIGGER_NAME VARCHAR(200) NOT NULL,
TRIGGER_GROUP VARCHAR(200) NOT NULL,
STR_PROP_1 VARCHAR(512),
STR_PROP_2 VARCHAR(512),
STR_PROP_3 VARCHAR(512),
INT_PROP_1 INT,
INT_PROP_2 INT,
LONG_PROP_1 BIGINT,
LONG_PROP_2 BIGINT,
DEC_PROP_1 NUMERIC(13,4),
DEC_PROP_2 NUMERIC(13,4),
BOOL_PROP_1 varchar(5),
BOOL_PROP_2 varchar(5),
PRIMARY KEY (sched_name,TRIGGER_NAME,TRIGGER_GROUP),
FOREIGN KEY (sched_name,TRIGGER_NAME,TRIGGER_GROUP)
REFERENCES QRTZ_TRIGGERS(sched_name,TRIGGER_NAME,TRIGGER_GROUP)
)

View File

@ -0,0 +1,20 @@
create table qrtz_triggers(
sched_name varchar(120) not null,
trigger_name varchar(200) not null,
trigger_group varchar(200) not null,
job_name varchar(200) not null,
job_group varchar(200) not null,
description varchar(250),
next_fire_time bigint,
prev_fire_time bigint,
priority integer,
trigger_state varchar(16) not null,
trigger_type varchar(8) not null,
start_time bigint not null,
end_time bigint,
calendar_name varchar(200),
misfire_instr smallint,
job_data blob,
primary key (sched_name,trigger_name,trigger_group),
foreign key (sched_name,job_name,job_group) references qrtz_job_details(sched_name,job_name,job_group)
)

View File

@ -2,16 +2,51 @@
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/cxf-beans.xml</param-value>
<param-value>/WEB-INF/cxf-beans.xml</param-value>
</context-param>
<context-param>
<param-name>quartz:config-file</param-name>
<param-value>quartz.properties</param-value>
</context-param>
<context-param>
<param-name>quartz:shutdown-on-unload</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>quartz:wait-on-shutdown</param-name>
<param-value>false</param-value>
</context-param>
<context-param>
<param-name>quartz:start-scheduler-on-load</param-name>
<param-value>true</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>
org.quartz.ee.servlet.QuartzInitializerListener
</listener-class>
</listener>
<servlet>
<servlet-name>XServices</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>QuartzInitializer</servlet-name>
<servlet-class>org.quartz.ee.servlet.QuartzInitializerServlet</servlet-class>
<init-param>
<param-name>shutdown-on-unload</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>XServices</servlet-name>
<url-pattern>/*</url-pattern>