Author: lahiru
Date: Tue Jan 15 18:12:27 2013
New Revision: 1433561
URL: http://svn.apache.org/viewvc?rev=1433561&view=rev
Log:
fixing an error during embedded gfac execution.
Modified:
airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/invoker/EmbeddedGFacInvoker.java
Modified:
airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/invoker/EmbeddedGFacInvoker.java
URL:
http://svn.apache.org/viewvc/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/invoker/EmbeddedGFacInvoker.java?rev=1433561&r1=1433560&r2=1433561&view=diff
==============================================================================
---
airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/invoker/EmbeddedGFacInvoker.java
(original)
+++
airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/invoker/EmbeddedGFacInvoker.java
Tue Jan 15 18:12:27 2013
@@ -21,11 +21,7 @@
package org.apache.airavata.xbaya.invoker;
import java.io.StringReader;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
@@ -40,6 +36,7 @@ import javax.xml.stream.XMLStreamExcepti
import javax.xml.stream.XMLStreamReader;
import org.apache.airavata.client.api.AiravataAPI;
+import org.apache.airavata.client.api.AiravataAPIInvocationException;
import
org.apache.airavata.common.workflow.execution.context.WorkflowContextHeaderBuilder;
import org.apache.airavata.core.gfac.exception.ProviderException;
import org.apache.airavata.registry.api.exception.RegistryException;
@@ -53,6 +50,7 @@ import org.apache.airavata.core.gfac.con
import org.apache.airavata.core.gfac.context.message.impl.ParameterContextImpl;
import org.apache.airavata.core.gfac.utils.GfacUtils;
//import org.apache.airavata.registry.api.AiravataRegistry2;
+import org.apache.airavata.schemas.gfac.InputParameterType;
import org.apache.airavata.schemas.gfac.Parameter;
import org.apache.airavata.schemas.gfac.ServiceDescriptionType;
import org.apache.airavata.workflow.model.exceptions.WorkflowException;
@@ -123,7 +121,7 @@ public class EmbeddedGFacInvoker impleme
private Object outPut;
- Map<Parameter, ActualParameter> actualParameters = new HashMap<Parameter,
ActualParameter>();
+ Map<Parameter, ActualParameter> actualParameters = new
LinkedHashMap<Parameter, ActualParameter>();
/**
* Creates an InvokerWithNotification.
@@ -236,22 +234,7 @@ public class EmbeddedGFacInvoker impleme
}
this.inputNames.add(name);
this.inputValues.add(value);
- ServiceDescription serviceDescription =
airavataAPI.getApplicationManager().getServiceDescription(this.serviceName);
- if (serviceDescription == null) {
- throw new RegistryException(new Exception("Service Description
not found in registry."));
- }
- ServiceDescriptionType serviceDescriptionType =
serviceDescription.getType();
- for (Parameter parameter :
serviceDescriptionType.getInputParametersArray()) {
- //todo this implementation doesn't work when there are n
number of nodes connecting .. need to fix
- if (value instanceof XmlElement) {
- XMLStreamReader reader =
XMLInputFactory.newInstance().createXMLStreamReader(new
StringReader(XMLUtil.xmlElementToString((XmlElement) value)));
- StAXOMBuilder builder = new StAXOMBuilder(reader);
- OMElement input = builder.getDocumentElement();
- actualParameters.put(parameter,
GfacUtils.getInputActualParameter(parameter, input));
- } else if (value instanceof String) {
- actualParameters.put(parameter,
GfacUtils.getInputActualParameter(parameter, AXIOMUtil.stringToOM("<value>" +
value + "</value>")));
- }
- }
+
} catch (RuntimeException e) {
logger.error(e.getMessage(), e);
String message = "Error in setting an input. name: " + name + "
value: " + value;
@@ -262,8 +245,6 @@ public class EmbeddedGFacInvoker impleme
String message = "Unexpected error: " + this.serviceInformation;
this.notifier.invocationFailed(message, e);
throw new WorkflowException(message, e);
- } catch (RegistryException e) {
- e.printStackTrace(); //To change body of catch statement use File
| Settings | File Templates.
} catch (Exception e) {
e.printStackTrace(); //To change body of catch statement use File
| Settings | File Templates.
}
@@ -275,6 +256,7 @@ public class EmbeddedGFacInvoker impleme
*/
public synchronized boolean invoke() throws WorkflowException {
try {
+ createActualParameters();
JobContext jobContext = new JobContext(actualParameters,
EmbeddedGFacInvoker.this.topic,
EmbeddedGFacInvoker.this.serviceName,
EmbeddedGFacInvoker.this.gfacURL);
GFacConfiguration gFacConfiguration = new
GFacConfiguration(EmbeddedGFacInvoker.this.configuration.getMyProxyServer(),
@@ -284,7 +266,7 @@ public class EmbeddedGFacInvoker impleme
GfacAPI gfacAPI1 = new GfacAPI();
InvocationContext defaultInvocationContext =
gfacAPI1.gridJobSubmit(jobContext,
-
gFacConfiguration,this.nodeID,this.notifier.getWorkflowID().toASCIIString());
+ gFacConfiguration, this.nodeID,
this.notifier.getWorkflowID().toASCIIString());
ParameterContextImpl outputParamContext = (ParameterContextImpl)
defaultInvocationContext
.<ActualParameter>getMessageContext("output");
if (outputParamContext.getNames().hasNext()) {
@@ -445,4 +427,26 @@ public class EmbeddedGFacInvoker impleme
public WSIFMessage getFault() throws WorkflowException {
return null;
}
+
+ private void createActualParameters() throws
AiravataAPIInvocationException, RegistryException, XMLStreamException {
+ ServiceDescription serviceDescription =
airavataAPI.getApplicationManager().getServiceDescription(this.serviceName);
+ if (serviceDescription == null) {
+ throw new RegistryException(new Exception("Service Description not
found in registry."));
+ }
+ ServiceDescriptionType serviceDescriptionType =
serviceDescription.getType();
+ for(String inputName:this.inputNames) {
+ int index = this.inputNames.indexOf(inputName);
+ Object value = this.inputValues.get(index);
+ InputParameterType parameter =
serviceDescriptionType.getInputParametersArray(index);
+ if (value instanceof XmlElement) {
+ XMLStreamReader reader =
XMLInputFactory.newInstance().createXMLStreamReader(new
StringReader(XMLUtil.xmlElementToString((XmlElement) value)));
+ StAXOMBuilder builder = new StAXOMBuilder(reader);
+ OMElement input = builder.getDocumentElement();
+ actualParameters.put(parameter,
GfacUtils.getInputActualParameter(parameter, input));
+ } else if (value instanceof String) {
+
+ actualParameters.put(parameter,
GfacUtils.getInputActualParameter(parameter, AXIOMUtil.stringToOM("<value>" +
value + "</value>")));
+ }
+ }
+ }
}