You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by sa...@apache.org on 2014/04/14 20:31:11 UTC
[69/90] [abbrv] AIRAVATA-1124
http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/jython/JythonRunnerTestCase.java
----------------------------------------------------------------------
diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/jython/JythonRunnerTestCase.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/jython/JythonRunnerTestCase.java
new file mode 100644
index 0000000..c7a815f
--- /dev/null
+++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/jython/JythonRunnerTestCase.java
@@ -0,0 +1,74 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 org.apache.airavata.xbaya.test.jython;
+
+import java.util.LinkedList;
+
+import org.apache.airavata.workflow.model.exceptions.WorkflowException;
+import org.apache.airavata.workflow.model.wf.Workflow;
+import org.apache.airavata.xbaya.jython.runner.JythonRunner;
+import org.apache.airavata.xbaya.jython.script.JythonScript;
+import org.apache.airavata.xbaya.test.XBayaTestCase;
+import org.apache.airavata.xbaya.test.service.adder.AdderService;
+import org.apache.airavata.xbaya.test.service.multiplier.MultiplierService;
+import org.apache.airavata.xbaya.test.util.WorkflowCreator;
+
+public class JythonRunnerTestCase extends XBayaTestCase {
+
+ /**
+ * @throws WorkflowException
+ */
+ public void testRun() throws WorkflowException {
+
+ WorkflowCreator creator = new WorkflowCreator();
+ Workflow workflow = creator.createComplexMathWorkflow();
+ JythonScript script = new JythonScript(workflow, this.configuration);
+ script.create();
+ String jythonString = script.getJythonString();
+
+ AdderService adder = new AdderService();
+ adder.run();
+ String adderWSDLLoc = adder.getServiceWsdlLocation();
+
+ MultiplierService multiplier = new MultiplierService();
+ multiplier.run();
+ String multiplierWSDLLoc = multiplier.getServiceWsdlLocation();
+
+ LinkedList<String> arguments = new LinkedList<String>();
+ arguments.add("-topic");
+ arguments.add("complex-math");
+ arguments.add("-Adder_wsdl");
+ arguments.add(adderWSDLLoc);
+ arguments.add("-Adder_2_wsdl");
+ arguments.add(adderWSDLLoc);
+ arguments.add("-Multiplier_wsdl");
+ arguments.add(multiplierWSDLLoc);
+
+ JythonRunner runner = new JythonRunner();
+ runner.run(jythonString, arguments);
+ runner.run(jythonString, arguments);
+
+ adder.shutdownServer();
+ multiplier.shutdownServer();
+ }
+
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/jython/JythonScriptTestCase.java
----------------------------------------------------------------------
diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/jython/JythonScriptTestCase.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/jython/JythonScriptTestCase.java
new file mode 100644
index 0000000..022b099
--- /dev/null
+++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/jython/JythonScriptTestCase.java
@@ -0,0 +1,131 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 org.apache.airavata.xbaya.test.jython;
+
+import java.io.IOException;
+
+import org.apache.airavata.common.utils.IOUtil;
+import org.apache.airavata.workflow.model.exceptions.WorkflowException;
+import org.apache.airavata.workflow.model.wf.Workflow;
+import org.apache.airavata.xbaya.jython.runner.JythonRunner;
+import org.apache.airavata.xbaya.jython.script.JythonScript;
+import org.apache.airavata.xbaya.test.XBayaTestCase;
+import org.apache.airavata.xbaya.test.service.adder.AdderService;
+import org.apache.airavata.xbaya.test.service.arrayadder.ArrayAdderService;
+import org.apache.airavata.xbaya.test.service.arraygen.ArrayGeneratorService;
+import org.apache.airavata.xbaya.test.service.multiplier.MultiplierService;
+import org.apache.airavata.xbaya.test.util.WorkflowCreator;
+
+public class JythonScriptTestCase extends XBayaTestCase {
+
+ private WorkflowCreator workflowCreator;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ this.workflowCreator = new WorkflowCreator();
+ }
+
+ /**
+ * @throws IOException
+ * @throws WorkflowException
+ */
+ public void testSimpleMath() throws IOException, WorkflowException {
+ Workflow workflow = this.workflowCreator.createSimpleMathWorkflow();
+ JythonScript script = new JythonScript(workflow, this.configuration);
+ script.create();
+ String jythonString = script.getJythonString();
+ String filename = "tmp/simple-math.py";
+ IOUtil.writeToFile(jythonString, filename);
+
+ AdderService service = new AdderService();
+ service.run();
+ String adderWSDLLoc = service.getServiceWsdlLocation();
+
+ String[] arguments = new String[] { "-Adder_add_wsdl", adderWSDLLoc };
+ JythonRunner runner = new JythonRunner();
+ runner.run(jythonString, arguments);
+
+ service.shutdownServer();
+ }
+
+ /**
+ * @throws IOException
+ * @throws WorkflowException
+ */
+ public void testComplexMath() throws IOException, WorkflowException {
+ Workflow workflow = this.workflowCreator.createComplexMathWorkflow();
+ JythonScript script = new JythonScript(workflow, this.configuration);
+ script.create();
+ String jythonString = script.getJythonString();
+ String filename = "tmp/complex-math.py";
+ IOUtil.writeToFile(jythonString, filename);
+
+ AdderService adder = new AdderService();
+ adder.run();
+ String adderWSDLLoc = adder.getServiceWsdlLocation();
+
+ MultiplierService multiplier = new MultiplierService();
+ multiplier.run();
+ String multiplierWSDLLoc = multiplier.getServiceWsdlLocation();
+
+ String[] arguments = new String[] { "-topic", "complex-math", "-Adder_add_wsdl", adderWSDLLoc,
+ "-Adder_add_2_wsdl", adderWSDLLoc, "-Multiplier_multiply_wsdl", multiplierWSDLLoc };
+
+ JythonRunner runner = new JythonRunner();
+ runner.run(jythonString, arguments);
+
+ adder.shutdownServer();
+ multiplier.shutdownServer();
+ }
+
+ /**
+ * @throws IOException
+ * @throws WorkflowException
+ */
+ public void testArray() throws IOException, WorkflowException {
+ Workflow workflow = this.workflowCreator.createArrayWorkflow();
+ JythonScript script = new JythonScript(workflow, this.configuration);
+ script.create();
+ String jythonString = script.getJythonString();
+ String filename = "tmp/array-test.py";
+ IOUtil.writeToFile(jythonString, filename);
+
+ ArrayGeneratorService arrayGenerator = new ArrayGeneratorService();
+ arrayGenerator.run();
+ String arrayGeneratorWSDLLoc = arrayGenerator.getServiceWsdlLocation();
+
+ ArrayAdderService arrayAdder = new ArrayAdderService();
+ arrayAdder.run();
+ String arrayAdderWSDLLoc = arrayAdder.getServiceWsdlLocation();
+
+ String[] arguments = new String[] { "-topic", "array-test", "-ArrayAdder_add_wsdl", arrayAdderWSDLLoc,
+ "-ArrayGenerator_generate_wsdl", arrayGeneratorWSDLLoc };
+
+ JythonRunner runner = new JythonRunner();
+ runner.run(jythonString, arguments);
+
+ arrayGenerator.shutdownServer();
+ arrayAdder.shutdownServer();
+ }
+
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/AllServices.java
----------------------------------------------------------------------
diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/AllServices.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/AllServices.java
new file mode 100644
index 0000000..e63027b
--- /dev/null
+++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/AllServices.java
@@ -0,0 +1,115 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 org.apache.airavata.xbaya.test.service;
+
+import java.io.File;
+import java.io.IOException;
+
+import org.apache.airavata.common.utils.XMLUtil;
+import org.apache.airavata.xbaya.file.XBayaPathConstants;
+import org.apache.airavata.xbaya.test.service.adder.Adder;
+import org.apache.airavata.xbaya.test.service.adder.AdderImpl;
+import org.apache.airavata.xbaya.test.service.approver.Approver;
+import org.apache.airavata.xbaya.test.service.approver.ApproverImpl;
+import org.apache.airavata.xbaya.test.service.arrayadder.ArrayAdder;
+import org.apache.airavata.xbaya.test.service.arrayadder.ArrayAdderImpl;
+import org.apache.airavata.xbaya.test.service.arraygen.ArrayGenerator;
+import org.apache.airavata.xbaya.test.service.arraygen.ArrayGeneratorImpl;
+import org.apache.airavata.xbaya.test.service.echo.Echo;
+import org.apache.airavata.xbaya.test.service.echo.EchoImpl;
+import org.apache.airavata.xbaya.test.service.multiplier.Multiplier;
+import org.apache.airavata.xbaya.test.service.multiplier.MultiplierImpl;
+
+import xsul.lead.LeadContextHeader;
+import xsul.wsdl.WsdlDefinitions;
+import xsul.xhandler_soap_sticky_header.StickySoapHeaderHandler;
+import xsul.xservo.XService;
+import xsul.xservo_soap.XSoapDocLiteralService;
+import xsul.xservo_soap_http.HttpBasedServices;
+
+public class AllServices {
+
+ // private static final Logger logger = LoggerFactory.getLogger();
+
+ private int port;
+
+ private HttpBasedServices httpServices;
+
+ /**
+ * Constructs an AllService.
+ *
+ * @param port
+ */
+ public AllServices(int port) {
+ this.port = port;
+ }
+
+ /**
+ * @throws IOException
+ */
+ public void startAll() throws IOException {
+ this.httpServices = new HttpBasedServices(this.port);
+
+ start(Adder.SERVICE_NAME, Adder.WSDL_NAME, Adder.WSDL_PATH, new AdderImpl());
+ start(Multiplier.SERVICE_NAME, Multiplier.WSDL_NAME, Multiplier.WSDL_PATH, new MultiplierImpl());
+ start(ArrayGenerator.SERVICE_NAME, ArrayGenerator.WSDL_NAME, ArrayGenerator.WSDL_PATH, new ArrayGeneratorImpl());
+ start(ArrayAdder.SERVICE_NAME, ArrayAdder.WSDL_NAME, ArrayAdder.WSDL_PATH, new ArrayAdderImpl());
+ start(Echo.SERVICE_NAME, Echo.WSDL_NAME, Echo.WSDL_PATH, new EchoImpl());
+
+ start(Approver.SERVICE_NAME, Approver.WSDL_NAME, Approver.WSDL_PATH, new ApproverImpl());
+ }
+
+ /**
+ * @param serviceName
+ * @param wsdlName
+ * @param wsdlPath
+ * @param serviceImpl
+ * @throws IOException
+ */
+ private void start(String serviceName, String wsdlName, String wsdlPath, Object serviceImpl) throws IOException {
+ String wsdlLocation = XBayaPathConstants.WSDL_DIRECTORY + File.separator + wsdlPath;
+ XService xservice = this.httpServices.addService(new XSoapDocLiteralService(serviceName, wsdlLocation,
+ serviceImpl));
+ xservice.addHandler(new StickySoapHeaderHandler("retrieve-lead-header", LeadContextHeader.TYPE));
+ xservice.startService();
+
+ WsdlDefinitions wsdl = xservice.getWsdl();
+
+ File wsdlFile = new File(Service.SAMPLE_WSDL_DIRECTORY, wsdlName);
+ XMLUtil.saveXML(wsdl, wsdlFile);
+ }
+
+ /**
+ * @param args
+ * @throws IOException
+ */
+ public static void main(String args[]) throws IOException {
+ int port = 0;
+ if (args.length == 2) {
+ if ("-port".equalsIgnoreCase(args[0])) {
+ port = Integer.parseInt(args[1]);
+ }
+ }
+ AllServices service = new AllServices(port);
+ service.startAll();
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/Service.java
----------------------------------------------------------------------
diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/Service.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/Service.java
new file mode 100644
index 0000000..ca6a4df
--- /dev/null
+++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/Service.java
@@ -0,0 +1,44 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 org.apache.airavata.xbaya.test.service;
+
+import java.io.File;
+
+import org.apache.airavata.xbaya.file.XBayaPathConstants;
+
+public interface Service {
+
+ /**
+ * SAMPLE_WSDL_DIRECTORY
+ */
+ public static final String SAMPLE_WSDL_DIRECTORY = XBayaPathConstants.WSDL_DIRECTORY + File.separator + "sample";
+
+ /**
+ * MATH_DIRECTORY_NAME
+ */
+ public static final String MATH_DIRECTORY_NAME = "math";
+
+ /**
+ * LOAD_DIRECTORY_NAME
+ */
+ public static final String LOAN_DIRECTORY_NAME = "loan";
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/ServiceNotificationSender.java
----------------------------------------------------------------------
diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/ServiceNotificationSender.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/ServiceNotificationSender.java
new file mode 100644
index 0000000..cd2db2b
--- /dev/null
+++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/ServiceNotificationSender.java
@@ -0,0 +1,161 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 org.apache.airavata.xbaya.test.service;
+
+import java.net.URI;
+import java.util.Properties;
+
+import org.apache.airavata.common.utils.XMLUtil;
+import org.apache.airavata.workflow.tracking.Notifier;
+import org.apache.airavata.workflow.tracking.NotifierFactory;
+import org.apache.airavata.workflow.tracking.common.InvocationContext;
+import org.apache.airavata.workflow.tracking.common.InvocationEntity;
+import org.apache.airavata.workflow.tracking.common.WorkflowTrackingContext;
+import org.apache.axis2.addressing.EndpointReference;
+import org.apache.xmlbeans.XmlObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.xmlpull.v1.builder.XmlDocument;
+import org.xmlpull.v1.builder.XmlElement;
+
+import xsul.XmlConstants;
+import xsul.lead.LeadContextHeader;
+import xsul.soap.SoapUtil;
+import xsul.soap11_util.Soap11Util;
+import xsul.soap12_util.Soap12Util;
+import xsul.xbeans_util.XBeansUtil;
+
+public class ServiceNotificationSender {
+
+ private final static Logger logger = LoggerFactory.getLogger(ServiceNotificationSender.class);
+
+ private final static String INVOKED_MESSAGE = "Service is invoked";
+
+ private final static String SENDING_RESULT_MESSAGE = "Sending successful result of invocation";
+
+ private Notifier notifier;
+
+ private InvocationEntity initiator;
+
+ private InvocationEntity receiver;
+
+ private InvocationContext invocationContext;
+
+ private WorkflowTrackingContext context;
+
+ private SoapUtil soapFragrance;
+
+ /**
+ * @param inputElement
+ * @return The ServiceNotificationSender
+ */
+ public static ServiceNotificationSender invoked(XmlElement inputElement) {
+ try {
+
+ XmlElement soapBody = (XmlElement) inputElement.getParent();
+ XmlElement soapEnvelope = (XmlElement) soapBody.getParent();
+ SoapUtil soapFragrance = SoapUtil.selectSoapFragrance(soapEnvelope,
+ new SoapUtil[] { Soap11Util.getInstance(), Soap12Util.getInstance() });
+ XmlElement soapHeader = soapEnvelope.element(null, XmlConstants.S_HEADER);
+ XmlElement leadHeader = soapHeader.element(LeadContextHeader.NS, LeadContextHeader.TYPE.getLocalPart());
+ logger.info("leadHeader: " + XMLUtil.xmlElementToString(leadHeader));
+ if (leadHeader == null) {
+ return null;
+ }
+ LeadContextHeader leadContext = new LeadContextHeader(leadHeader);
+ ServiceNotificationSender sender = new ServiceNotificationSender(soapFragrance, leadContext);
+ sender.serviceInvoked(inputElement);
+
+ return sender;
+ } catch (RuntimeException e) {
+ logger.error(e.getMessage(), e);
+ return null;
+ }
+ }
+
+ /**
+ * Constructs a ServiceNotificationSender.
+ *
+ * @param soapFragrance
+ * @param leadContext
+ */
+ private ServiceNotificationSender(SoapUtil soapFragrance, LeadContextHeader leadContext) {
+ this.soapFragrance = soapFragrance;
+ this.notifier = NotifierFactory.createNotifier();
+
+ URI workflowID = leadContext.getWorkflowId();
+ String serviceIDString = leadContext.getServiceId();
+ if (serviceIDString == null) {
+ serviceIDString = "serviceIDWasNull";
+ }
+ URI serviceID = URI.create(serviceIDString);
+ String nodeID = leadContext.getNodeId();
+ String timeStepString = leadContext.getTimeStep();
+ Integer timeStep = null;
+ if (timeStepString != null) {
+ try {
+ timeStep = new Integer(timeStepString);
+ } catch (NumberFormatException e) {
+ logger.error(e.getMessage(), e);
+ }
+ }
+ this.initiator = this.notifier.createEntity(workflowID, serviceID, nodeID, timeStep);
+ this.receiver = this.notifier.createEntity(workflowID, serviceID, nodeID, timeStep);
+ EndpointReference epr = new EndpointReference(leadContext.getEventSink().getAddress().toString());
+ this.context = this.notifier.createTrackingContext(new Properties(), epr.toString(), workflowID, serviceID,
+ nodeID, timeStep);
+ }
+
+ /**
+ * @param inputElement
+ */
+ private void serviceInvoked(XmlElement inputElement) {
+ XmlElement soapBody = (XmlElement) inputElement.getParent();
+ XmlElement soapEnvelope = (XmlElement) soapBody.getParent();
+ XmlElement soapHeader = soapEnvelope.element(null, XmlConstants.S_HEADER);
+ XmlObject headerObject = XBeansUtil.xmlElementToXmlObject(soapHeader);
+ XmlObject bodyObject = XBeansUtil.xmlElementToXmlObject(soapBody);
+ this.invocationContext = this.notifier.serviceInvoked(this.context, this.initiator, headerObject, bodyObject,
+ INVOKED_MESSAGE);
+ }
+
+ /**
+ * @param outputElement
+ */
+ public void sendingResult(XmlElement outputElement) {
+ try {
+ XmlDocument document = this.soapFragrance.wrapBodyContent(outputElement);
+ XmlElement soapEnvelope = document.getDocumentElement();
+ XmlElement soapHeader = soapEnvelope.element(null, XmlConstants.S_HEADER);
+ XmlElement soapBody = soapEnvelope.element(null, XmlConstants.S_BODY);
+ XmlObject headerObject = null;
+ if (soapHeader != null) {
+ headerObject = XBeansUtil.xmlElementToXmlObject(soapHeader);
+ }
+ XmlObject bodyObject = XBeansUtil.xmlElementToXmlObject(soapBody);
+ this.notifier.sendingResult(this.context, this.invocationContext, headerObject, bodyObject,
+ SENDING_RESULT_MESSAGE);
+ } catch (RuntimeException e) {
+ logger.error(e.getMessage(), e);
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/adder/Adder.java
----------------------------------------------------------------------
diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/adder/Adder.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/adder/Adder.java
new file mode 100644
index 0000000..1d29245
--- /dev/null
+++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/adder/Adder.java
@@ -0,0 +1,54 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 org.apache.airavata.xbaya.test.service.adder;
+
+import java.io.File;
+
+import org.apache.airavata.xbaya.test.service.Service;
+import org.xmlpull.v1.builder.XmlElement;
+
+import xsul.xwsif_runtime.XmlElementBasedStub;
+
+public interface Adder extends XmlElementBasedStub {
+
+ /**
+ * SERVICE_NAME
+ */
+ public final static String SERVICE_NAME = "AdderService";
+
+ /**
+ * WSDL_NAME
+ */
+ public final static String WSDL_NAME = "adder.wsdl";
+
+ /**
+ * WSDL_PATH
+ */
+ public final static String WSDL_PATH = Service.MATH_DIRECTORY_NAME + File.separator + WSDL_NAME;
+
+ /**
+ * @param input
+ * the input message
+ * @return the output message
+ */
+ public XmlElement add(XmlElement input);
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/adder/AdderClient.java
----------------------------------------------------------------------
diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/adder/AdderClient.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/adder/AdderClient.java
new file mode 100644
index 0000000..d3cfe7c
--- /dev/null
+++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/adder/AdderClient.java
@@ -0,0 +1,114 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 org.apache.airavata.xbaya.test.service.adder;
+
+import java.net.URI;
+
+import org.apache.airavata.common.utils.XMLUtil;
+import org.apache.airavata.xbaya.XBayaConfiguration;
+import org.apache.airavata.xbaya.lead.LeadContextHeaderHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.xmlpull.v1.builder.XmlElement;
+
+import xsul.lead.LeadContextHeader;
+import xsul.wsif.WSIFMessage;
+import xsul.wsif.WSIFOperation;
+import xsul.wsif.WSIFPort;
+import xsul.xhandler_soap_sticky_header.StickySoapHeaderHandler;
+import xsul.xwsif_runtime.WSIFClient;
+import xsul.xwsif_runtime.WSIFRuntime;
+import xsul.xwsif_runtime_async.WSIFAsyncResponsesCorrelator;
+
+public class AdderClient {
+
+ private final static Logger logger = LoggerFactory.getLogger(AdderClient.class);
+
+ private AdderService service;
+
+ /**
+ *
+ */
+ public void run() {
+ String wsdlLoc = startServer();
+ runClient(wsdlLoc);
+ shutdownServer();
+ }
+
+ private String startServer() {
+ this.service = new AdderService();
+ this.service.run();
+ return this.service.getServiceWsdlLocation();
+ }
+
+ private void shutdownServer() {
+ this.service.shutdownServer();
+ }
+
+ private void runClient(String wsdlLoc) {
+ logger.info("Invoking operation echoString using WSDL from " + wsdlLoc);
+
+ WSIFAsyncResponsesCorrelator correlator;
+ correlator = null;
+
+ // pass some headers
+ LeadContextHeaderHelper helper = new LeadContextHeaderHelper();
+ helper.setXBayaConfiguration(new XBayaConfiguration());
+ LeadContextHeader leadContext = helper.getLeadContextHeader();
+ leadContext.setWorkflowId(URI.create("http://host/2005/11/09/workflowinstace"));
+ leadContext.setNodeId("decoder1");
+ leadContext.setTimeStep("5");
+ leadContext.setServiceId("decoder-instance-10");
+
+ WSIFClient wclient = WSIFRuntime.newClient(wsdlLoc)
+ .addHandler(new StickySoapHeaderHandler("use-lead-header", leadContext)).useAsyncMessaging(correlator)
+ .setAsyncResponseTimeoutInMs(33000L); // to simplify testing set to just few
+ // seconds
+
+ WSIFPort port = wclient.getPort();
+ WSIFOperation operation = port.createOperation("add");
+ WSIFMessage inputMessage = operation.createInputMessage();
+ WSIFMessage outputMessage = operation.createOutputMessage();
+ WSIFMessage faultMessage = operation.createFaultMessage();
+
+ inputMessage.setObjectPart("x", "2");
+ inputMessage.setObjectPart("y", "3");
+
+ logger.info("Sending a message:\n" + XMLUtil.xmlElementToString((XmlElement) inputMessage));
+ boolean success = operation.executeRequestResponseOperation(inputMessage, outputMessage, faultMessage);
+
+ XmlElement result;
+ if (success) {
+ result = (XmlElement) outputMessage;
+ } else {
+ result = (XmlElement) faultMessage;
+ }
+ logger.info("Received message:\n" + XMLUtil.xmlElementToString(result));
+ }
+
+ /**
+ * @param args
+ */
+ public static void main(String[] args) {
+ (new AdderClient()).run();
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/adder/AdderImpl.java
----------------------------------------------------------------------
diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/adder/AdderImpl.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/adder/AdderImpl.java
new file mode 100644
index 0000000..ee37bf4
--- /dev/null
+++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/adder/AdderImpl.java
@@ -0,0 +1,79 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 org.apache.airavata.xbaya.test.service.adder;
+
+import java.util.Random;
+
+import org.apache.airavata.common.utils.XMLUtil;
+import org.apache.airavata.xbaya.test.service.ServiceNotificationSender;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.xmlpull.v1.builder.XmlElement;
+import org.xmlpull.v1.builder.XmlNamespace;
+
+import xsul.XmlConstants;
+
+public class AdderImpl implements Adder {
+
+ private final static Logger logger = LoggerFactory.getLogger(AdderImpl.class);
+
+ /**
+ * @see org.apache.airavata.xbaya.test.service.adder.Adder#add(org.xmlpull.v1.builder.XmlElement)
+ */
+ public XmlElement add(XmlElement inputElement) {
+ logger.info(XMLUtil.xmlElementToString(inputElement));
+ ServiceNotificationSender notifier = ServiceNotificationSender.invoked(inputElement);
+
+ XmlElement xElement = inputElement.requiredElement(null, "x");
+ XmlElement yElement = inputElement.requiredElement(null, "y");
+ String xString = xElement.requiredTextContent();
+ String yString = yElement.requiredTextContent();
+
+ int x = Integer.parseInt(xString);
+ int y = Integer.parseInt(yString);
+
+ int z = x + y;
+
+ Random random = new Random();
+ int msec = random.nextInt(5000);
+ logger.info("Sleep for " + msec + " msec");
+ try {
+ Thread.sleep(msec);
+ } catch (InterruptedException e) {
+ logger.error(e.getMessage(), e);
+ }
+
+ String zString = "" + z;
+
+ XmlNamespace namespace = XmlConstants.BUILDER.newNamespace("addertypens",
+ "http://www.extreme.indiana.edu/math/adder/xsd/");
+ XmlElement outputElement = XmlConstants.BUILDER.newFragment(namespace, "AddOutput");
+ XmlElement zElement = outputElement.addElement("z");
+ zElement.addChild(zString);
+
+ if (notifier != null) {
+ notifier.sendingResult(outputElement);
+ }
+ logger.info(XMLUtil.xmlElementToString(outputElement));
+ return outputElement;
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/adder/AdderService.java
----------------------------------------------------------------------
diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/adder/AdderService.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/adder/AdderService.java
new file mode 100644
index 0000000..d14e5f6
--- /dev/null
+++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/adder/AdderService.java
@@ -0,0 +1,131 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 org.apache.airavata.xbaya.test.service.adder;
+
+import java.io.File;
+
+import org.apache.airavata.common.utils.XMLUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import xsul.lead.LeadContextHeader;
+import xsul.wsdl.WsdlDefinitions;
+import xsul.xhandler_soap_sticky_header.StickySoapHeaderHandler;
+import xsul.xservo.XService;
+import xsul.xservo_soap.XSoapDocLiteralService;
+import xsul.xservo_soap_http.HttpBasedServices;
+
+public class AdderService {
+
+ private final static String SERVICE_NAME = "AdderService";
+
+ private final static String BASE_WSDL_LOCATION = "wsdls/math/adder.wsdl";
+
+ private final static String OUTPUT_WSDL_LOCATION = "wsdls/sample/adder.wsdl";
+
+ private final static Logger logger = LoggerFactory.getLogger(AdderService.class);
+
+ private HttpBasedServices httpServices;
+
+ private XService xservice;
+
+ private int port;
+
+ /**
+ * Constructs a AdderService.
+ */
+ public AdderService() {
+ this(0);
+ }
+
+ /**
+ * Constructs a AdderService.
+ *
+ * @param port
+ */
+ public AdderService(int port) {
+ this.port = port;
+ }
+
+ /**
+ * Runs the service.
+ */
+ public void run() {
+ this.httpServices = new HttpBasedServices(this.port);
+ logger.info("Server started on " + this.httpServices.getServerPort());
+
+ logger.info("Using WSDL for service description from " + BASE_WSDL_LOCATION);
+ this.xservice = this.httpServices.addService(new XSoapDocLiteralService(SERVICE_NAME, BASE_WSDL_LOCATION,
+ new AdderImpl()));
+ this.xservice.addHandler(new StickySoapHeaderHandler("retrieve-lead-header", LeadContextHeader.TYPE));
+ this.xservice.startService();
+ logger.info("Service started");
+ logger.info("Service WSDL available at " + getServiceWsdlLocation());
+
+ }
+
+ /**
+ * Returns the location of the WSDL of the service.
+ *
+ * @return The location of the WSDL of the service.
+ */
+ public String getServiceWsdlLocation() {
+ return this.httpServices.getServer().getLocation() + "/" + SERVICE_NAME + "?wsdl";
+ }
+
+ /**
+ * Returns the WSDL of the service.
+ *
+ * @return The WSDL of the service.
+ */
+ public WsdlDefinitions getWsdl() {
+ return this.xservice.getWsdl();
+ }
+
+ /**
+ * Shutdowns the service.
+ */
+ public void shutdownServer() {
+ this.httpServices.getServer().shutdownServer();
+ }
+
+ /**
+ * @param args
+ */
+ public static void main(String[] args) {
+ try {
+ int port = 0;
+ if (args.length == 2) {
+ if ("-port".equalsIgnoreCase(args[0])) {
+ port = Integer.parseInt(args[1]);
+ }
+ }
+ AdderService service = new AdderService(port);
+ service.run();
+ WsdlDefinitions wsdl = service.getWsdl();
+ File wsdlFile = new File(OUTPUT_WSDL_LOCATION);
+ XMLUtil.saveXML(wsdl, wsdlFile);
+ } catch (Exception e) {
+ logger.error(e.getMessage(), e);
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/approver/Approver.java
----------------------------------------------------------------------
diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/approver/Approver.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/approver/Approver.java
new file mode 100644
index 0000000..067770d
--- /dev/null
+++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/approver/Approver.java
@@ -0,0 +1,54 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 org.apache.airavata.xbaya.test.service.approver;
+
+import java.io.File;
+
+import org.apache.airavata.xbaya.test.service.Service;
+import org.xmlpull.v1.builder.XmlElement;
+
+import xsul.xwsif_runtime.XmlElementBasedStub;
+
+public interface Approver extends XmlElementBasedStub {
+
+ /**
+ * SERVICE_NAME
+ */
+ public final static String SERVICE_NAME = "ApproverService";
+
+ /**
+ * WSDL_NAME
+ */
+ public final static String WSDL_NAME = "approver.wsdl";
+
+ /**
+ * WSDL_PATH
+ */
+ public final static String WSDL_PATH = Service.LOAN_DIRECTORY_NAME + File.separator + WSDL_NAME;
+
+ /**
+ * @param input
+ * the input message
+ * @return the output message
+ */
+ public XmlElement approve(XmlElement input);
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/approver/ApproverClient.java
----------------------------------------------------------------------
diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/approver/ApproverClient.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/approver/ApproverClient.java
new file mode 100644
index 0000000..954d93e
--- /dev/null
+++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/approver/ApproverClient.java
@@ -0,0 +1,113 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 org.apache.airavata.xbaya.test.service.approver;
+
+import java.net.URI;
+
+import org.apache.airavata.common.utils.XMLUtil;
+import org.apache.airavata.xbaya.XBayaConfiguration;
+import org.apache.airavata.xbaya.lead.LeadContextHeaderHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.xmlpull.v1.builder.XmlElement;
+
+import xsul.lead.LeadContextHeader;
+import xsul.wsif.WSIFMessage;
+import xsul.wsif.WSIFOperation;
+import xsul.wsif.WSIFPort;
+import xsul.xhandler_soap_sticky_header.StickySoapHeaderHandler;
+import xsul.xwsif_runtime.WSIFClient;
+import xsul.xwsif_runtime.WSIFRuntime;
+import xsul.xwsif_runtime_async.WSIFAsyncResponsesCorrelator;
+
+public class ApproverClient {
+
+ private final static Logger logger = LoggerFactory.getLogger(ApproverClient.class);
+
+ private ApproverService service;
+
+ /**
+ *
+ */
+ public void run() {
+ String wsdlLoc = startServer();
+ runClient(wsdlLoc);
+ shutdownServer();
+ }
+
+ private String startServer() {
+ this.service = new ApproverService();
+ this.service.run();
+ return this.service.getServiceWsdlLocation();
+ }
+
+ private void shutdownServer() {
+ this.service.shutdownServer();
+ }
+
+ private void runClient(String wsdlLoc) {
+ logger.info("Invoking operation echoString using WSDL from " + wsdlLoc);
+
+ WSIFAsyncResponsesCorrelator correlator;
+ correlator = null;
+
+ // pass some headers
+ LeadContextHeaderHelper helper = new LeadContextHeaderHelper();
+ helper.setXBayaConfiguration(new XBayaConfiguration());
+ LeadContextHeader leadContext = helper.getLeadContextHeader();
+ leadContext.setWorkflowId(URI.create("http://host/2005/11/09/workflowinstace"));
+ leadContext.setNodeId("decoder1");
+ leadContext.setTimeStep("5");
+ leadContext.setServiceId("decoder-instance-10");
+
+ WSIFClient wclient = WSIFRuntime.newClient(wsdlLoc)
+ .addHandler(new StickySoapHeaderHandler("use-lead-header", leadContext)).useAsyncMessaging(correlator)
+ .setAsyncResponseTimeoutInMs(33000L); // to simplify testing set to just few
+ // seconds
+
+ WSIFPort port = wclient.getPort();
+ WSIFOperation operation = port.createOperation("approve");
+ WSIFMessage inputMessage = operation.createInputMessage();
+ WSIFMessage outputMessage = operation.createOutputMessage();
+ WSIFMessage faultMessage = operation.createFaultMessage();
+
+ inputMessage.setObjectPart("amount", "100");
+
+ logger.info("Sending a message:\n" + XMLUtil.xmlElementToString((XmlElement) inputMessage));
+ boolean success = operation.executeRequestResponseOperation(inputMessage, outputMessage, faultMessage);
+
+ XmlElement result;
+ if (success) {
+ result = (XmlElement) outputMessage;
+ } else {
+ result = (XmlElement) faultMessage;
+ }
+ logger.info("Received message:\n" + XMLUtil.xmlElementToString(result));
+ }
+
+ /**
+ * @param args
+ */
+ public static void main(String[] args) {
+ (new ApproverClient()).run();
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/approver/ApproverImpl.java
----------------------------------------------------------------------
diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/approver/ApproverImpl.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/approver/ApproverImpl.java
new file mode 100644
index 0000000..37bff40
--- /dev/null
+++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/approver/ApproverImpl.java
@@ -0,0 +1,74 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 org.apache.airavata.xbaya.test.service.approver;
+
+import java.util.Random;
+
+import org.apache.airavata.common.utils.XMLUtil;
+import org.apache.airavata.xbaya.test.service.ServiceNotificationSender;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.xmlpull.v1.builder.XmlElement;
+import org.xmlpull.v1.builder.XmlNamespace;
+
+import xsul.XmlConstants;
+
+public class ApproverImpl implements Approver {
+
+ private final static Logger logger = LoggerFactory.getLogger(ApproverImpl.class);
+
+ /**
+ * @see org.apache.airavata.xbaya.test.service.approver.Approver#approve(org.xmlpull.v1.builder.XmlElement)
+ */
+ public XmlElement approve(XmlElement inputElement) {
+ logger.info(XMLUtil.xmlElementToString(inputElement));
+ ServiceNotificationSender notifier = ServiceNotificationSender.invoked(inputElement);
+
+ XmlElement amountElement = inputElement.requiredElement(null, "amount");
+ String amountString = amountElement.requiredTextContent();
+ int amount = Integer.parseInt(amountString);
+ logger.info("amount: " + amount);
+
+ Random random = new Random();
+ int msec = random.nextInt(5000);
+ logger.info("Sleep for " + msec + " msec");
+ try {
+ Thread.sleep(msec);
+ } catch (InterruptedException e) {
+ logger.error(e.getMessage(), e);
+ }
+
+ String accept = "No";
+
+ XmlNamespace namespace = XmlConstants.BUILDER.newNamespace("approvertypens",
+ "http://www.extreme.indiana.edu/loan/approver/xsd/");
+ XmlElement outputElement = XmlConstants.BUILDER.newFragment(namespace, "ApproveOutput");
+ XmlElement acceptElement = outputElement.addElement("accept");
+ acceptElement.addChild(accept);
+
+ if (notifier != null) {
+ notifier.sendingResult(outputElement);
+ }
+ logger.info(XMLUtil.xmlElementToString(outputElement));
+ return outputElement;
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/approver/ApproverService.java
----------------------------------------------------------------------
diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/approver/ApproverService.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/approver/ApproverService.java
new file mode 100644
index 0000000..30caac2
--- /dev/null
+++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/approver/ApproverService.java
@@ -0,0 +1,131 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 org.apache.airavata.xbaya.test.service.approver;
+
+import java.io.File;
+
+import org.apache.airavata.common.utils.XMLUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import xsul.lead.LeadContextHeader;
+import xsul.wsdl.WsdlDefinitions;
+import xsul.xhandler_soap_sticky_header.StickySoapHeaderHandler;
+import xsul.xservo.XService;
+import xsul.xservo_soap.XSoapDocLiteralService;
+import xsul.xservo_soap_http.HttpBasedServices;
+
+public class ApproverService {
+
+ private final static String SERVICE_NAME = "ApproverService";
+
+ private final static String BASE_WSDL_LOCATION = "wsdls/loan/approver-wsdl.xml";
+
+ private final static String OUTPUT_WSDL_LOCATION = "wsdls/sample/approver-wsdl.xml";
+
+ private final static Logger logger = LoggerFactory.getLogger(ApproverService.class);
+
+ private HttpBasedServices httpServices;
+
+ private XService xservice;
+
+ private int port;
+
+ /**
+ * Constructs a AdderService.
+ */
+ public ApproverService() {
+ this(0);
+ }
+
+ /**
+ * Constructs a AdderService.
+ *
+ * @param port
+ */
+ public ApproverService(int port) {
+ this.port = port;
+ }
+
+ /**
+ * Runs the service.
+ */
+ public void run() {
+ this.httpServices = new HttpBasedServices(this.port);
+ logger.info("Server started on " + this.httpServices.getServerPort());
+
+ logger.info("Using WSDL for service description from " + BASE_WSDL_LOCATION);
+ this.xservice = this.httpServices.addService(new XSoapDocLiteralService(SERVICE_NAME, BASE_WSDL_LOCATION,
+ new ApproverImpl()));
+ this.xservice.addHandler(new StickySoapHeaderHandler("retrieve-lead-header", LeadContextHeader.TYPE));
+ this.xservice.startService();
+ logger.info("Service started");
+ logger.info("Service WSDL available at " + getServiceWsdlLocation());
+
+ }
+
+ /**
+ * Returns the location of the WSDL of the service.
+ *
+ * @return The location of the WSDL of the service.
+ */
+ public String getServiceWsdlLocation() {
+ return this.httpServices.getServer().getLocation() + "/" + SERVICE_NAME + "?wsdl";
+ }
+
+ /**
+ * Returns the WSDL of the service.
+ *
+ * @return The WSDL of the service.
+ */
+ public WsdlDefinitions getWsdl() {
+ return this.xservice.getWsdl();
+ }
+
+ /**
+ * Shutdowns the service.
+ */
+ public void shutdownServer() {
+ this.httpServices.getServer().shutdownServer();
+ }
+
+ /**
+ * @param args
+ */
+ public static void main(String[] args) {
+ try {
+ int port = 0;
+ if (args.length == 2) {
+ if ("-port".equalsIgnoreCase(args[0])) {
+ port = Integer.parseInt(args[1]);
+ }
+ }
+ ApproverService service = new ApproverService(port);
+ service.run();
+ WsdlDefinitions wsdl = service.getWsdl();
+ File wsdlFile = new File(OUTPUT_WSDL_LOCATION);
+ XMLUtil.saveXML(wsdl, wsdlFile);
+ } catch (Exception e) {
+ logger.error(e.getMessage(), e);
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/arrayadder/ArrayAdder.java
----------------------------------------------------------------------
diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/arrayadder/ArrayAdder.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/arrayadder/ArrayAdder.java
new file mode 100644
index 0000000..4fc4bb9
--- /dev/null
+++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/arrayadder/ArrayAdder.java
@@ -0,0 +1,54 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 org.apache.airavata.xbaya.test.service.arrayadder;
+
+import java.io.File;
+
+import org.apache.airavata.xbaya.test.service.Service;
+import org.xmlpull.v1.builder.XmlElement;
+
+import xsul.xwsif_runtime.XmlElementBasedStub;
+
+public interface ArrayAdder extends XmlElementBasedStub {
+
+ /**
+ * SERVICE_NAME
+ */
+ public final static String SERVICE_NAME = "ArrayAdderService";
+
+ /**
+ * WSDL_NAME
+ */
+ public final static String WSDL_NAME = "arrayadder.wsdl";
+
+ /**
+ * WSDL_PATH
+ */
+ public final static String WSDL_PATH = Service.MATH_DIRECTORY_NAME + File.separator + WSDL_NAME;
+
+ /**
+ * @param input
+ * the input message
+ * @return the output message
+ */
+ public XmlElement add(XmlElement input);
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/arrayadder/ArrayAdderClient.java
----------------------------------------------------------------------
diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/arrayadder/ArrayAdderClient.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/arrayadder/ArrayAdderClient.java
new file mode 100644
index 0000000..58786e2
--- /dev/null
+++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/arrayadder/ArrayAdderClient.java
@@ -0,0 +1,121 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 org.apache.airavata.xbaya.test.service.arrayadder;
+
+import java.net.URI;
+
+import org.apache.airavata.common.utils.XMLUtil;
+import org.apache.airavata.xbaya.XBayaConfiguration;
+import org.apache.airavata.xbaya.lead.LeadContextHeaderHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.xmlpull.v1.builder.XmlElement;
+
+import xsul.XmlConstants;
+import xsul.lead.LeadContextHeader;
+import xsul.wsif.WSIFMessage;
+import xsul.wsif.WSIFOperation;
+import xsul.wsif.WSIFPort;
+import xsul.xhandler_soap_sticky_header.StickySoapHeaderHandler;
+import xsul.xwsif_runtime.WSIFClient;
+import xsul.xwsif_runtime.WSIFRuntime;
+import xsul.xwsif_runtime_async.WSIFAsyncResponsesCorrelator;
+
+public class ArrayAdderClient {
+
+ private final static Logger logger = LoggerFactory.getLogger(ArrayAdderClient.class);
+
+ private ArrayAdderService service;
+
+ /**
+ *
+ */
+ public void run() {
+ String wsdlLoc = startServer();
+ runClient(wsdlLoc);
+ shutdownServer();
+ }
+
+ private String startServer() {
+ this.service = new ArrayAdderService();
+ this.service.run();
+ return this.service.getServiceWsdlLocation();
+ }
+
+ private void shutdownServer() {
+ this.service.shutdownServer();
+ }
+
+ private void runClient(String wsdlLoc) {
+ logger.info("Invoking operation add using WSDL from " + wsdlLoc);
+
+ WSIFAsyncResponsesCorrelator correlator;
+ correlator = null;
+
+ // pass some headers
+ LeadContextHeaderHelper helper = new LeadContextHeaderHelper();
+ helper.setXBayaConfiguration(new XBayaConfiguration());
+ LeadContextHeader leadContext = helper.getLeadContextHeader();
+ leadContext.setWorkflowId(URI.create("http://host/2005/11/09/workflowinstace"));
+ leadContext.setNodeId("decoder1");
+ leadContext.setTimeStep("5");
+ leadContext.setServiceId("decoder-instance-10");
+
+ WSIFClient wclient = WSIFRuntime.newClient(wsdlLoc)
+ .addHandler(new StickySoapHeaderHandler("use-lead-header", leadContext)).useAsyncMessaging(correlator)
+ .setAsyncResponseTimeoutInMs(33000L); // to simplify testing set to just few
+ // seconds
+
+ WSIFPort port = wclient.getPort();
+ WSIFOperation operation = port.createOperation("add");
+ WSIFMessage inputMessage = operation.createInputMessage();
+ WSIFMessage outputMessage = operation.createOutputMessage();
+ WSIFMessage faultMessage = operation.createFaultMessage();
+
+ // Input
+ XmlElement arrayElement = XmlConstants.BUILDER.newFragment("input");
+ for (int i = 0; i < 5; i++) {
+ XmlElement valueElement = arrayElement.addElement("value");
+ valueElement.addChild("" + i);
+ }
+
+ inputMessage.setObjectPart("input", arrayElement);
+
+ logger.info("Sending a message:\n" + XMLUtil.xmlElementToString((XmlElement) inputMessage));
+ boolean success = operation.executeRequestResponseOperation(inputMessage, outputMessage, faultMessage);
+
+ XmlElement result;
+ if (success) {
+ result = (XmlElement) outputMessage;
+ } else {
+ result = (XmlElement) faultMessage;
+ }
+ logger.info("Received message:\n" + XMLUtil.xmlElementToString(result));
+ }
+
+ /**
+ * @param args
+ */
+ public static void main(String[] args) {
+ (new ArrayAdderClient()).run();
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/arrayadder/ArrayAdderImpl.java
----------------------------------------------------------------------
diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/arrayadder/ArrayAdderImpl.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/arrayadder/ArrayAdderImpl.java
new file mode 100644
index 0000000..ab2792c
--- /dev/null
+++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/arrayadder/ArrayAdderImpl.java
@@ -0,0 +1,83 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 org.apache.airavata.xbaya.test.service.arrayadder;
+
+import java.util.Iterator;
+import java.util.Random;
+
+import org.apache.airavata.common.utils.XMLUtil;
+import org.apache.airavata.xbaya.test.service.ServiceNotificationSender;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.xmlpull.v1.builder.XmlElement;
+import org.xmlpull.v1.builder.XmlNamespace;
+
+import xsul.XmlConstants;
+
+public class ArrayAdderImpl implements ArrayAdder {
+
+ private final static Logger logger = LoggerFactory.getLogger(ArrayAdderImpl.class);
+
+ /**
+ * @see org.apache.airavata.xbaya.test.service.arrayadder.ArrayAdder#add(org.xmlpull.v1.builder.XmlElement)
+ */
+ public XmlElement add(XmlElement inputElement) {
+ logger.info(XMLUtil.xmlElementToString(inputElement));
+
+ ServiceNotificationSender notifier = ServiceNotificationSender.invoked(inputElement);
+
+ XmlElement arrayElement = inputElement.requiredElement(null, "input");
+
+ int sum = 0;
+ @SuppressWarnings("rawtypes")
+ Iterator valueIt = arrayElement.elements(null, "value").iterator();
+ while (valueIt.hasNext()) {
+ XmlElement valueElement = (XmlElement) valueIt.next();
+ String valueString = valueElement.requiredTextContent();
+ int value = Integer.parseInt(valueString);
+ sum += value;
+ }
+
+ Random random = new Random();
+ int msec = random.nextInt(5000);
+ logger.info("Sleep for " + msec + " msec");
+ try {
+ Thread.sleep(msec);
+ } catch (InterruptedException e) {
+ logger.error(e.getMessage(), e);
+ }
+
+ String sumString = "" + sum;
+
+ XmlNamespace namespace = XmlConstants.BUILDER.newNamespace("typens",
+ "http://www.extreme.indiana.edu/math/arrayadder/xsd/");
+ XmlElement outputElement = XmlConstants.BUILDER.newFragment(namespace, "ArrayAdderOutput");
+ XmlElement sumElement = outputElement.addElement("sum");
+ sumElement.addChild(sumString);
+
+ if (notifier != null) {
+ notifier.sendingResult(outputElement);
+ }
+ logger.info(XMLUtil.xmlElementToString(outputElement));
+ return outputElement;
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/arrayadder/ArrayAdderService.java
----------------------------------------------------------------------
diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/arrayadder/ArrayAdderService.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/arrayadder/ArrayAdderService.java
new file mode 100644
index 0000000..b5f9cae
--- /dev/null
+++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/arrayadder/ArrayAdderService.java
@@ -0,0 +1,131 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 org.apache.airavata.xbaya.test.service.arrayadder;
+
+import java.io.File;
+
+import org.apache.airavata.common.utils.XMLUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import xsul.lead.LeadContextHeader;
+import xsul.wsdl.WsdlDefinitions;
+import xsul.xhandler_soap_sticky_header.StickySoapHeaderHandler;
+import xsul.xservo.XService;
+import xsul.xservo_soap.XSoapDocLiteralService;
+import xsul.xservo_soap_http.HttpBasedServices;
+
+public class ArrayAdderService {
+
+ private final static String SERVICE_NAME = "ArrayGeneratorService";
+
+ private final static String BASE_WSDL_LOCATION = "wsdls/math/arrayadder-wsdl.xml";
+
+ private final static String OUTPUT_WSDL_LOCATION = "wsdls/sample/arrayadder-wsdl.xml";
+
+ private final static Logger logger = LoggerFactory.getLogger(ArrayAdderService.class);
+
+ private HttpBasedServices httpServices;
+
+ private XService xservice;
+
+ private int port;
+
+ /**
+ * Constructs a AdderService.
+ */
+ public ArrayAdderService() {
+ this(0);
+ }
+
+ /**
+ * Constructs a AdderService.
+ *
+ * @param port
+ */
+ public ArrayAdderService(int port) {
+ this.port = port;
+ }
+
+ /**
+ * Runs the service.
+ */
+ public void run() {
+ this.httpServices = new HttpBasedServices(this.port);
+ logger.info("Server started on " + this.httpServices.getServerPort());
+
+ logger.info("Using WSDL for service description from " + BASE_WSDL_LOCATION);
+ this.xservice = this.httpServices.addService(new XSoapDocLiteralService(SERVICE_NAME, BASE_WSDL_LOCATION,
+ new ArrayAdderImpl()));
+ this.xservice.addHandler(new StickySoapHeaderHandler("retrieve-lead-header", LeadContextHeader.TYPE));
+ this.xservice.startService();
+ logger.info("Service started");
+ logger.info("Service WSDL available at " + getServiceWsdlLocation());
+
+ }
+
+ /**
+ * Returns the location of the WSDL of the service.
+ *
+ * @return The location of the WSDL of the service.
+ */
+ public String getServiceWsdlLocation() {
+ return this.httpServices.getServer().getLocation() + "/" + SERVICE_NAME + "?wsdl";
+ }
+
+ /**
+ * Returns the WSDL of the service.
+ *
+ * @return The WSDL of the service.
+ */
+ public WsdlDefinitions getWsdl() {
+ return this.xservice.getWsdl();
+ }
+
+ /**
+ * Shutdowns the service.
+ */
+ public void shutdownServer() {
+ this.httpServices.getServer().shutdownServer();
+ }
+
+ /**
+ * @param args
+ */
+ public static void main(String[] args) {
+ try {
+ int port = 0;
+ if (args.length == 2) {
+ if ("-port".equalsIgnoreCase(args[0])) {
+ port = Integer.parseInt(args[1]);
+ }
+ }
+ ArrayAdderService service = new ArrayAdderService(port);
+ service.run();
+ WsdlDefinitions wsdl = service.getWsdl();
+ File wsdlFile = new File(OUTPUT_WSDL_LOCATION);
+ XMLUtil.saveXML(wsdl, wsdlFile);
+ } catch (Exception e) {
+ logger.error(e.getMessage(), e);
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/arraygen/ArrayGenerator.java
----------------------------------------------------------------------
diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/arraygen/ArrayGenerator.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/arraygen/ArrayGenerator.java
new file mode 100644
index 0000000..4ffd01b
--- /dev/null
+++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/arraygen/ArrayGenerator.java
@@ -0,0 +1,54 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 org.apache.airavata.xbaya.test.service.arraygen;
+
+import java.io.File;
+
+import org.apache.airavata.xbaya.test.service.Service;
+import org.xmlpull.v1.builder.XmlElement;
+
+import xsul.xwsif_runtime.XmlElementBasedStub;
+
+public interface ArrayGenerator extends XmlElementBasedStub {
+
+ /**
+ * SERVICE_NAME
+ */
+ public final static String SERVICE_NAME = "ArrayGeneratorService";
+
+ /**
+ * WSDL_NAME
+ */
+ public final static String WSDL_NAME = "arraygen.wsdl";
+
+ /**
+ * WSDL_PATH
+ */
+ public final static String WSDL_PATH = Service.MATH_DIRECTORY_NAME + File.separator + WSDL_NAME;
+
+ /**
+ * @param input
+ * the input message
+ * @return the output message
+ */
+ public XmlElement generate(XmlElement input);
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/arraygen/ArrayGeneratorClient.java
----------------------------------------------------------------------
diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/arraygen/ArrayGeneratorClient.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/arraygen/ArrayGeneratorClient.java
new file mode 100644
index 0000000..3256d6f
--- /dev/null
+++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/arraygen/ArrayGeneratorClient.java
@@ -0,0 +1,113 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 org.apache.airavata.xbaya.test.service.arraygen;
+
+import java.net.URI;
+
+import org.apache.airavata.common.utils.XMLUtil;
+import org.apache.airavata.xbaya.XBayaConfiguration;
+import org.apache.airavata.xbaya.lead.LeadContextHeaderHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.xmlpull.v1.builder.XmlElement;
+
+import xsul.lead.LeadContextHeader;
+import xsul.wsif.WSIFMessage;
+import xsul.wsif.WSIFOperation;
+import xsul.wsif.WSIFPort;
+import xsul.xhandler_soap_sticky_header.StickySoapHeaderHandler;
+import xsul.xwsif_runtime.WSIFClient;
+import xsul.xwsif_runtime.WSIFRuntime;
+import xsul.xwsif_runtime_async.WSIFAsyncResponsesCorrelator;
+
+public class ArrayGeneratorClient {
+
+ private final static Logger logger = LoggerFactory.getLogger(ArrayGeneratorClient.class);
+
+ private ArrayGeneratorService service;
+
+ /**
+ *
+ */
+ public void run() {
+ String wsdlLoc = startServer();
+ runClient(wsdlLoc);
+ shutdownServer();
+ }
+
+ private String startServer() {
+ this.service = new ArrayGeneratorService();
+ this.service.run();
+ return this.service.getServiceWsdlLocation();
+ }
+
+ private void shutdownServer() {
+ this.service.shutdownServer();
+ }
+
+ private void runClient(String wsdlLoc) {
+ logger.info("Invoking operation echoString using WSDL from " + wsdlLoc);
+
+ WSIFAsyncResponsesCorrelator correlator;
+ correlator = null;
+
+ // pass some headers
+ LeadContextHeaderHelper helper = new LeadContextHeaderHelper();
+ helper.setXBayaConfiguration(new XBayaConfiguration());
+ LeadContextHeader leadContext = helper.getLeadContextHeader();
+ leadContext.setWorkflowId(URI.create("http://host/2005/11/09/workflowinstace"));
+ leadContext.setNodeId("decoder1");
+ leadContext.setTimeStep("5");
+ leadContext.setServiceId("decoder-instance-10");
+
+ WSIFClient wclient = WSIFRuntime.newClient(wsdlLoc)
+ .addHandler(new StickySoapHeaderHandler("use-lead-header", leadContext)).useAsyncMessaging(correlator)
+ .setAsyncResponseTimeoutInMs(33000L); // to simplify testing set to just few
+ // seconds
+
+ WSIFPort port = wclient.getPort();
+ WSIFOperation operation = port.createOperation("generate");
+ WSIFMessage inputMessage = operation.createInputMessage();
+ WSIFMessage outputMessage = operation.createOutputMessage();
+ WSIFMessage faultMessage = operation.createFaultMessage();
+
+ inputMessage.setObjectPart("n", "3");
+
+ logger.info("Sending a message:\n" + XMLUtil.xmlElementToString((XmlElement) inputMessage));
+ boolean success = operation.executeRequestResponseOperation(inputMessage, outputMessage, faultMessage);
+
+ XmlElement result;
+ if (success) {
+ result = (XmlElement) outputMessage;
+ } else {
+ result = (XmlElement) faultMessage;
+ }
+ logger.info("Received message:\n" + XMLUtil.xmlElementToString(result));
+ }
+
+ /**
+ * @param args
+ */
+ public static void main(String[] args) {
+ (new ArrayGeneratorClient()).run();
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/arraygen/ArrayGeneratorImpl.java
----------------------------------------------------------------------
diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/arraygen/ArrayGeneratorImpl.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/arraygen/ArrayGeneratorImpl.java
new file mode 100644
index 0000000..3f6cb9d
--- /dev/null
+++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/arraygen/ArrayGeneratorImpl.java
@@ -0,0 +1,77 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 org.apache.airavata.xbaya.test.service.arraygen;
+
+import java.util.Random;
+
+import org.apache.airavata.common.utils.XMLUtil;
+import org.apache.airavata.xbaya.test.service.ServiceNotificationSender;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.xmlpull.v1.builder.XmlElement;
+import org.xmlpull.v1.builder.XmlNamespace;
+
+import xsul.XmlConstants;
+
+public class ArrayGeneratorImpl implements ArrayGenerator {
+
+ private final static Logger logger = LoggerFactory.getLogger(ArrayGeneratorImpl.class);
+
+ /**
+ * @see org.apache.airavata.xbaya.test.service.arraygen.ArrayGenerator#generate(org.xmlpull.v1.builder.XmlElement)
+ */
+ public XmlElement generate(XmlElement inputElement) {
+ logger.info(XMLUtil.xmlElementToString(inputElement));
+
+ ServiceNotificationSender notifier = ServiceNotificationSender.invoked(inputElement);
+
+ XmlElement nElement = inputElement.requiredElement(null, "n");
+ String nString = nElement.requiredTextContent();
+
+ int n = Integer.parseInt(nString);
+
+ Random random = new Random();
+ int msec = random.nextInt(5000);
+ logger.info("Sleep for " + msec + " msec");
+ try {
+ Thread.sleep(msec);
+ } catch (InterruptedException e) {
+ logger.error(e.getMessage(), e);
+ }
+
+ XmlNamespace namespace = XmlConstants.BUILDER.newNamespace("typens",
+ "http://www.extreme.indiana.edu/math/arraygen/xsd/");
+ XmlElement outputElement = XmlConstants.BUILDER.newFragment(namespace, "ArrayGeneratorOutput");
+
+ XmlElement arrayElement = outputElement.addElement("output");
+ for (int i = 0; i < n; i++) {
+ XmlElement valueElement = arrayElement.addElement("value");
+ valueElement.addChild("" + i);
+ }
+
+ if (notifier != null) {
+ notifier.sendingResult(outputElement);
+ }
+ logger.info(XMLUtil.xmlElementToString(outputElement));
+ return outputElement;
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/arraygen/ArrayGeneratorService.java
----------------------------------------------------------------------
diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/arraygen/ArrayGeneratorService.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/arraygen/ArrayGeneratorService.java
new file mode 100644
index 0000000..5685c69
--- /dev/null
+++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/arraygen/ArrayGeneratorService.java
@@ -0,0 +1,131 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 org.apache.airavata.xbaya.test.service.arraygen;
+
+import java.io.File;
+
+import org.apache.airavata.common.utils.XMLUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import xsul.lead.LeadContextHeader;
+import xsul.wsdl.WsdlDefinitions;
+import xsul.xhandler_soap_sticky_header.StickySoapHeaderHandler;
+import xsul.xservo.XService;
+import xsul.xservo_soap.XSoapDocLiteralService;
+import xsul.xservo_soap_http.HttpBasedServices;
+
+public class ArrayGeneratorService {
+
+ private final static String SERVICE_NAME = "ArrayGeneratorService";
+
+ private final static String BASE_WSDL_LOCATION = "wsdls/math/arraygen-wsdl.xml";
+
+ private final static String OUTPUT_WSDL_LOCATION = "wsdls/sample/arraygen-wsdl.xml";
+
+ private final static Logger logger = LoggerFactory.getLogger(ArrayGeneratorService.class);
+
+ private HttpBasedServices httpServices;
+
+ private XService xservice;
+
+ private int port;
+
+ /**
+ * Constructs a AdderService.
+ */
+ public ArrayGeneratorService() {
+ this(0);
+ }
+
+ /**
+ * Constructs a AdderService.
+ *
+ * @param port
+ */
+ public ArrayGeneratorService(int port) {
+ this.port = port;
+ }
+
+ /**
+ * Runs the service.
+ */
+ public void run() {
+ this.httpServices = new HttpBasedServices(this.port);
+ logger.info("Server started on " + this.httpServices.getServerPort());
+
+ logger.info("Using WSDL for service description from " + BASE_WSDL_LOCATION);
+ this.xservice = this.httpServices.addService(new XSoapDocLiteralService(SERVICE_NAME, BASE_WSDL_LOCATION,
+ new ArrayGeneratorImpl()));
+ this.xservice.addHandler(new StickySoapHeaderHandler("retrieve-lead-header", LeadContextHeader.TYPE));
+ this.xservice.startService();
+ logger.info("Service started");
+ logger.info("Service WSDL available at " + getServiceWsdlLocation());
+
+ }
+
+ /**
+ * Returns the location of the WSDL of the service.
+ *
+ * @return The location of the WSDL of the service.
+ */
+ public String getServiceWsdlLocation() {
+ return this.httpServices.getServer().getLocation() + "/" + SERVICE_NAME + "?wsdl";
+ }
+
+ /**
+ * Returns the WSDL of the service.
+ *
+ * @return The WSDL of the service.
+ */
+ public WsdlDefinitions getWsdl() {
+ return this.xservice.getWsdl();
+ }
+
+ /**
+ * Shutdowns the service.
+ */
+ public void shutdownServer() {
+ this.httpServices.getServer().shutdownServer();
+ }
+
+ /**
+ * @param args
+ */
+ public static void main(String[] args) {
+ try {
+ int port = 0;
+ if (args.length == 2) {
+ if ("-port".equalsIgnoreCase(args[0])) {
+ port = Integer.parseInt(args[1]);
+ }
+ }
+ ArrayGeneratorService service = new ArrayGeneratorService(port);
+ service.run();
+ WsdlDefinitions wsdl = service.getWsdl();
+ File wsdlFile = new File(OUTPUT_WSDL_LOCATION);
+ XMLUtil.saveXML(wsdl, wsdlFile);
+ } catch (Exception e) {
+ logger.error(e.getMessage(), e);
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/echo/Echo.java
----------------------------------------------------------------------
diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/echo/Echo.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/echo/Echo.java
new file mode 100644
index 0000000..bfc22db
--- /dev/null
+++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/service/echo/Echo.java
@@ -0,0 +1,54 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 org.apache.airavata.xbaya.test.service.echo;
+
+import java.io.File;
+
+import org.apache.airavata.xbaya.test.service.Service;
+import org.xmlpull.v1.builder.XmlElement;
+
+import xsul.xwsif_runtime.XmlElementBasedStub;
+
+public interface Echo extends XmlElementBasedStub {
+
+ /**
+ * SERVICE_NAME
+ */
+ public final static String SERVICE_NAME = "EchoService";
+
+ /**
+ * WSDL_NAME
+ */
+ public final static String WSDL_NAME = "echo.wsdl";
+
+ /**
+ * WSDL_PATH
+ */
+ public final static String WSDL_PATH = Service.MATH_DIRECTORY_NAME + File.separator + WSDL_NAME;
+
+ /**
+ * @param input
+ * the input message
+ * @return the output message
+ */
+ public XmlElement echo(XmlElement input);
+}
\ No newline at end of file