You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by pa...@apache.org on 2011/08/26 23:36:06 UTC
svn commit: r1162269 - in /incubator/airavata/trunk/modules:
commons/gfac-schema/src/main/java/org/apache/airavata/core/gfac/type/util/SchemaUtil.java
gfac-axis2/src/main/java/org/apache/airavata/services/gfac/axis2/reciever/GFacMessageReciever.java
Author: patanachai
Date: Fri Aug 26 21:36:05 2011
New Revision: 1162269
URL: http://svn.apache.org/viewvc?rev=1162269&view=rev
Log:
Parameter validation in the service
Modified:
incubator/airavata/trunk/modules/commons/gfac-schema/src/main/java/org/apache/airavata/core/gfac/type/util/SchemaUtil.java
incubator/airavata/trunk/modules/gfac-axis2/src/main/java/org/apache/airavata/services/gfac/axis2/reciever/GFacMessageReciever.java
Modified: incubator/airavata/trunk/modules/commons/gfac-schema/src/main/java/org/apache/airavata/core/gfac/type/util/SchemaUtil.java
URL: http://svn.apache.org/viewvc/incubator/airavata/trunk/modules/commons/gfac-schema/src/main/java/org/apache/airavata/core/gfac/type/util/SchemaUtil.java?rev=1162269&r1=1162268&r2=1162269&view=diff
==============================================================================
--- incubator/airavata/trunk/modules/commons/gfac-schema/src/main/java/org/apache/airavata/core/gfac/type/util/SchemaUtil.java (original)
+++ incubator/airavata/trunk/modules/commons/gfac-schema/src/main/java/org/apache/airavata/core/gfac/type/util/SchemaUtil.java Fri Aug 26 21:36:05 2011
@@ -26,7 +26,15 @@ import java.beans.XMLEncoder;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
+import org.apache.airavata.core.gfac.type.DataType;
import org.apache.airavata.core.gfac.type.Type;
+import org.apache.airavata.core.gfac.type.parameter.AbstractParameter;
+import org.apache.airavata.core.gfac.type.parameter.BooleanParameter;
+import org.apache.airavata.core.gfac.type.parameter.DoubleParameter;
+import org.apache.airavata.core.gfac.type.parameter.FileParameter;
+import org.apache.airavata.core.gfac.type.parameter.FloatParameter;
+import org.apache.airavata.core.gfac.type.parameter.IntegerParameter;
+import org.apache.airavata.core.gfac.type.parameter.StringParameter;
public class SchemaUtil {
public static Type parseFromXML(String xml) {
@@ -44,4 +52,22 @@ public class SchemaUtil {
e.close();
return x.toString();
}
+
+ public static AbstractParameter mapFromType(DataType type){
+ switch(type){
+ case String:
+ return new StringParameter();
+ case Double:
+ return new DoubleParameter();
+ case Integer:
+ return new IntegerParameter();
+ case Float:
+ return new FloatParameter();
+ case Boolean:
+ return new BooleanParameter();
+ case File:
+ return new FileParameter();
+ }
+ return null;
+ }
}
Modified: incubator/airavata/trunk/modules/gfac-axis2/src/main/java/org/apache/airavata/services/gfac/axis2/reciever/GFacMessageReciever.java
URL: http://svn.apache.org/viewvc/incubator/airavata/trunk/modules/gfac-axis2/src/main/java/org/apache/airavata/services/gfac/axis2/reciever/GFacMessageReciever.java?rev=1162269&r1=1162268&r2=1162269&view=diff
==============================================================================
--- incubator/airavata/trunk/modules/gfac-axis2/src/main/java/org/apache/airavata/services/gfac/axis2/reciever/GFacMessageReciever.java (original)
+++ incubator/airavata/trunk/modules/gfac-axis2/src/main/java/org/apache/airavata/services/gfac/axis2/reciever/GFacMessageReciever.java Fri Aug 26 21:36:05 2011
@@ -19,15 +19,29 @@ package org.apache.airavata.services.gfa
* specific language governing permissions and limitations
* under the License.
*
-*/
+ */
+import java.io.StringReader;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.jcr.Credentials;
+import javax.jcr.Repository;
+import javax.xml.namespace.QName;
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamReader;
+
+import org.apache.airavata.core.gfac.api.Registry;
import org.apache.airavata.core.gfac.api.impl.JCRRegistry;
import org.apache.airavata.core.gfac.context.InvocationContext;
import org.apache.airavata.core.gfac.context.impl.ExecutionContextImpl;
import org.apache.airavata.core.gfac.context.impl.ParameterContextImpl;
import org.apache.airavata.core.gfac.factory.PropertyServiceFactory;
import org.apache.airavata.core.gfac.services.GenericService;
-import org.apache.airavata.core.gfac.type.parameter.StringParameter;
+import org.apache.airavata.core.gfac.type.Parameter;
+import org.apache.airavata.core.gfac.type.ServiceDescription;
+import org.apache.airavata.core.gfac.type.parameter.AbstractParameter;
+import org.apache.airavata.core.gfac.type.util.SchemaUtil;
import org.apache.airavata.services.gfac.axis2.utils.GFacServiceOperations;
import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
@@ -46,97 +60,110 @@ import org.apache.axis2.util.Utils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import javax.jcr.*;
-import javax.xml.namespace.QName;
-import javax.xml.stream.XMLInputFactory;
-import javax.xml.stream.XMLStreamReader;
-import java.io.StringReader;
-import java.util.Iterator;
-
public class GFacMessageReciever implements MessageReceiver {
private static final Log log = LogFactory.getLog(GFacMessageReciever.class);
public static final String SECURITY_CONTEXT = "security_context";
GenericService service = null;
- public void receive(org.apache.axis2.context.MessageContext axisRequestMsgCtx)
- throws AxisFault {
- GFacServiceOperations operation = GFacServiceOperations.valueFrom(axisRequestMsgCtx.getOperationContext().getOperationName());
+ public void receive(org.apache.axis2.context.MessageContext axisRequestMsgCtx) throws AxisFault {
+ GFacServiceOperations operation = GFacServiceOperations.valueFrom(axisRequestMsgCtx.getOperationContext()
+ .getOperationName());
switch (operation) {
- case INVOKE: {
+ case INVOKE:
+ try {
processInvokeOperation(axisRequestMsgCtx);
log.info("Invoke operation invoked !!");
+ } catch (Exception e) {
+ throw new AxisFault("Error Invoking the service");
}
break;
- case GETWSDL: {
- try {
- processgetWSDLOperation(axisRequestMsgCtx);
- } catch (Exception e) {
- throw new AxisFault("Error retrieving the WSDL");
- }
- log.info("getWSDL operation invoked !!");
+ case GETWSDL:
+ try {
+ processgetWSDLOperation(axisRequestMsgCtx);
+ } catch (Exception e) {
+ throw new AxisFault("Error retrieving the WSDL");
}
+ log.info("getWSDL operation invoked !!");
}
}
- public void processInvokeOperation(MessageContext messageContext) {
+ public void processInvokeOperation(MessageContext messageContext) throws Exception {
MessageContext response = null;
String serviceName = getOriginalServiceName(messageContext);
- try {
- ConfigurationContext context = messageContext.getConfigurationContext();
- OMElement invoke = messageContext.getEnvelope().getBody().getFirstChildWithName(new QName("invoke"));
- OMElement input = invoke.getFirstChildWithName(new QName("input"));
- OMElement output = invokeApplication(serviceName, input,context);
- SOAPFactory sf = OMAbstractFactory.getSOAP11Factory();
- SOAPEnvelope responseEnv = sf.createSOAPEnvelope();
- sf.createSOAPBody(responseEnv);
- responseEnv.getBody().addChild(output);
+ try {
+ ConfigurationContext context = messageContext.getConfigurationContext();
+ OMElement invoke = messageContext.getEnvelope().getBody().getFirstChildWithName(new QName("invoke"));
+ OMElement input = invoke.getFirstChildWithName(new QName("input"));
+ OMElement output = invokeApplication(serviceName, input, context);
+ SOAPFactory sf = OMAbstractFactory.getSOAP11Factory();
+ SOAPEnvelope responseEnv = sf.createSOAPEnvelope();
+ sf.createSOAPBody(responseEnv);
+ responseEnv.getBody().addChild(output);
response = MessageContextBuilder.createOutMessageContext(messageContext);
response.setEnvelope(responseEnv);
response.getOperationContext().addMessageContext(response);
AxisEngine.send(response);
- } catch (AxisFault fault) {
- log.error("Error creating response");
+ } catch (Exception e) {
+ throw e;
}
}
- private OMElement invokeApplication(String serviceName, OMElement input,ConfigurationContext context) {
+ private OMElement invokeApplication(String serviceName, OMElement input, ConfigurationContext context)
+ throws Exception {
OMElement outputElement = null;
try {
- Repository repository = (Repository)context.getProperty("repository");
- Credentials credentials = (Credentials)context.getProperty("credentials");
+ Repository repository = (Repository) context.getProperty("repository");
+ Credentials credentials = (Credentials) context.getProperty("credentials");
+
+ Registry regis = new JCRRegistry(repository, credentials);
InvocationContext ct = new InvocationContext();
ct.setExecutionContext(new ExecutionContextImpl());
ct.setServiceName(serviceName);
- ct.getExecutionContext().setRegistryService(new JCRRegistry(repository,credentials));
+ ct.getExecutionContext().setRegistryService(regis);
+
+ /*
+ * read from registry and set the correct parameters
+ */
+ ServiceDescription serviceDescription = regis.getServiceDescription(serviceName);
+
+ /*
+ * Input
+ */
ParameterContextImpl inputParam = new ParameterContextImpl();
+ List<Parameter> inputs = serviceDescription.getInputParameters();
+ for (Parameter parameter : inputs) {
+ OMElement element = input.getFirstChildWithName(new QName(parameter.getName()));
+
+ if (element == null) {
+ throw new Exception("Parameter is not found in the message");
+ }
- // TODO define real parameter passing in SOAP body
- //handle parameter
- for (Iterator iterator = input.getChildren(); iterator.hasNext(); ) {
- OMElement element = (OMElement) iterator.next();
- String name = element.getQName().getLocalPart();
- StringParameter value = new StringParameter();
- value.parseStringVal("output=" + element.getText());
- inputParam.addParameter(name, value);
+ AbstractParameter param = SchemaUtil.mapFromType(parameter.getType());
+ param.parseStringVal(element.getText());
+ inputParam.addParameter(parameter.getName(), param);
}
+ /*
+ * Output
+ */
ParameterContextImpl outputParam = new ParameterContextImpl();
- StringParameter echo_output = new StringParameter();
- outputParam.addParameter("output", echo_output);
+ List<Parameter> outputs = serviceDescription.getOutputParameters();
+ for (Parameter parameter : outputs) {
+ inputParam.addParameter(parameter.getName(), SchemaUtil.mapFromType(parameter.getType()));
+ }
ct.addMessageContext("input", inputParam);
- ct.addMessageContext("output",outputParam);
+ ct.addMessageContext("output", outputParam);
+
if (service == null) {
service = new PropertyServiceFactory().createService();
}
service.init();
- //invoke service
+ // invoke service
service.execute(ct);
-
- //TODO also define how outputParam too
/*
* Process Output
*/
@@ -145,7 +172,7 @@ public class GFacMessageReciever impleme
outputElement = fac.createOMElement("output", omNs);
ParameterContextImpl paramContext = (ParameterContextImpl) ct.getMessageContext("output");
- for (Iterator<String> iterator = paramContext.getParameterNames(); iterator.hasNext(); ) {
+ for (Iterator<String> iterator = paramContext.getParameterNames(); iterator.hasNext();) {
String name = iterator.next();
OMElement ele = fac.createOMElement(name, omNs);
ele.addAttribute("type", paramContext.getParameterValue(name).getType().toString(), omNs);
@@ -154,24 +181,26 @@ public class GFacMessageReciever impleme
}
} catch (Exception e) {
- e.printStackTrace();
-
+ log.error("Error in invoking service", e);
+ throw e;
}
return outputElement;
}
- public void processgetWSDLOperation(MessageContext messageContext)throws Exception {
+ public void processgetWSDLOperation(MessageContext messageContext) throws Exception {
MessageContext response = null;
String serviceName = getOriginalServiceName(messageContext);
ConfigurationContext context = messageContext.getConfigurationContext();
- //todo this logic has to change based on the logic we are storing data into repository
+ // todo this logic has to change based on the logic we are storing data
+ // into repository
try {
Credentials credentials = (Credentials) context.getProperty("credentials");
- Session session = ((Repository)context.getProperty("repository")).login(credentials);
- Node node = session.getRootNode().getNode("wsdls").getNode(serviceName);
- Property propertyContent = node.getProperty("content");
- XMLStreamReader reader = XMLInputFactory.newInstance().createXMLStreamReader
- (new StringReader(propertyContent.getString()));
+ Repository repo = (Repository) context.getProperty("repository");
+
+ JCRRegistry jcr = new JCRRegistry(repo, credentials);
+
+ XMLStreamReader reader = XMLInputFactory.newInstance().createXMLStreamReader(
+ new StringReader(jcr.getWSDL(serviceName)));
StAXOMBuilder builder = new StAXOMBuilder(reader);
OMElement wsdlElement = builder.getDocumentElement();
SOAPFactory sf = OMAbstractFactory.getSOAP11Factory();
@@ -190,9 +219,8 @@ public class GFacMessageReciever impleme
private String getOriginalServiceName(MessageContext messageContext) {
String toAddress = messageContext.getTo().getAddress();
- String[] values = Utils.parseRequestURLForServiceAndOperation(toAddress,
- messageContext
- .getConfigurationContext().getServiceContextPath());
+ String[] values = Utils.parseRequestURLForServiceAndOperation(toAddress, messageContext
+ .getConfigurationContext().getServiceContextPath());
return values[0];
}