Repository: ode Updated Branches: refs/heads/ode-1.3.x 79a1094a0 -> 7f6f94c05
ODE-1017: Backported setVariable operation in PMAPI from trunk Project: http://git-wip-us.apache.org/repos/asf/ode/repo Commit: http://git-wip-us.apache.org/repos/asf/ode/commit/7f6f94c0 Tree: http://git-wip-us.apache.org/repos/asf/ode/tree/7f6f94c0 Diff: http://git-wip-us.apache.org/repos/asf/ode/diff/7f6f94c0 Branch: refs/heads/ode-1.3.x Commit: 7f6f94c0509696601d58fe0154fd6ea166c8662d Parents: 79a1094 Author: sathwik <[email protected]> Authored: Tue Jul 22 01:06:25 2014 +0530 Committer: sathwik <[email protected]> Committed: Tue Jul 22 01:06:25 2014 +0530 ---------------------------------------------------------------------- axis2/src/main/wsdl/pmapi.wsdl | 25 +++++++++++ .../ProcessAndInstanceManagementImpl.java | 46 ++++++++++++++++++++ .../java/org/apache/ode/utils/DOMUtils.java | 8 ++++ 3 files changed, 79 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ode/blob/7f6f94c0/axis2/src/main/wsdl/pmapi.wsdl ---------------------------------------------------------------------- diff --git a/axis2/src/main/wsdl/pmapi.wsdl b/axis2/src/main/wsdl/pmapi.wsdl index ef619bd..5517a8b 100644 --- a/axis2/src/main/wsdl/pmapi.wsdl +++ b/axis2/src/main/wsdl/pmapi.wsdl @@ -172,6 +172,14 @@ <message name="getVariableInfoOutput"> <part name="variable-info" type="typ:tVariableInfo"/> </message> + <message name="setVariableInput"> + <part name="sid" type="xsd:string"/> + <part name="varName" type="xsd:string"/> + <part name="value" type="xsd:anyType"/> + </message> + <message name="setVariableOutput"> + <part name="scope-info" type="typ:tVariableInfo"/> + </message> <message name="listEventsInput"> <part name="instanceFilter" type="xsd:string"/> <part name="eventFilter" type="xsd:string"/> @@ -340,6 +348,11 @@ <output message="tns:getVariableInfoOutput"/> <fault name="ManagementFault" message="tns:managementFault"/> </operation> + <operation name="setVariable"> + <input message="tns:setVariableInput"/> + <output message="tns:setVariableOutput"/> + <fault name="ManagementFault" message="tns:managementFault"/> + </operation> <operation name="listEvents"> <input message="tns:listEventsInput"/> <output message="tns:listEventsOutput"/> @@ -626,6 +639,18 @@ <soap:fault name="ManagementFault" use="literal"/> </fault> </operation> + <operation name="setVariable"> + <soap:operation soapAction="" style="rpc"/> + <input> + <soap:body namespace="http://www.apache.org/ode/pmapi" use="literal"/> + </input> + <output> + <soap:body namespace="http://www.apache.org/ode/pmapi" use="literal"/> + </output> + <fault name="ManagementFault"> + <soap:fault name="ManagementFault" use="literal"/> + </fault> + </operation> <operation name="listEvents"> <soap:operation soapAction="" style="rpc"/> <input> http://git-wip-us.apache.org/repos/asf/ode/blob/7f6f94c0/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/ProcessAndInstanceManagementImpl.java ---------------------------------------------------------------------- diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/ProcessAndInstanceManagementImpl.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/ProcessAndInstanceManagementImpl.java index d21f378..9523121 100644 --- a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/ProcessAndInstanceManagementImpl.java +++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/ProcessAndInstanceManagementImpl.java @@ -19,6 +19,7 @@ package org.apache.ode.bpel.engine; +import java.io.ByteArrayOutputStream; import java.io.File; import java.text.ParseException; import java.util.ArrayList; @@ -140,6 +141,8 @@ import org.apache.ode.utils.msg.MessageBundle; import org.apache.ode.utils.stl.CollectionsX; import org.apache.ode.utils.stl.MemberOfFunction; import org.apache.ode.utils.stl.UnaryFunction; +import org.apache.xmlbeans.XmlObject; +import org.apache.xmlbeans.XmlOptions; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; @@ -457,6 +460,49 @@ public class ProcessAndInstanceManagementImpl implements InstanceManagement, Pro return ret; } + public VariableInfoDocument setVariable(final String scopeId,final String varName, final XmlObject value) throws ManagementException { + VariableInfoDocument ret = VariableInfoDocument.Factory.newInstance(); + final TVariableInfo vinf = ret.addNewVariableInfo(); + final TVariableRef sref = vinf.addNewSelf(); + dbexec(new BpelDatabase.Callable<Object>() { + public Object run(BpelDAOConnection session) throws Exception { + ScopeDAO scope = session.getScope(new Long(scopeId)); + if (scope == null) { + throw new InvalidRequestException("ScopeNotFound:" + + scopeId); + } + + sref.setSiid(scopeId); + sref.setIid(scope.getProcessInstance().getInstanceId() + .toString()); + sref.setName(varName); + + XmlDataDAO var = scope.getVariable(varName); + if (var == null) { + throw new InvalidRequestException("VarNotFound:" + varName); + } + + { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + value.save(out, new XmlOptions().setSaveOuter()); + Node value2 = DOMUtils.getFirstChildElement(DOMUtils + .stringToDOM(out.toString())); + var.set(value2); + } + + Node nval = var.get(); + if (nval != null) { + TVariableInfo.Value val = vinf.addNewValue(); + val.getDomNode().appendChild( + val.getDomNode().getOwnerDocument() + .importNode(nval, true)); + } + return null; + } + }); + return ret; + } + // // INSTANCE ACTIONS // http://git-wip-us.apache.org/repos/asf/ode/blob/7f6f94c0/utils/src/main/java/org/apache/ode/utils/DOMUtils.java ---------------------------------------------------------------------- diff --git a/utils/src/main/java/org/apache/ode/utils/DOMUtils.java b/utils/src/main/java/org/apache/ode/utils/DOMUtils.java index a9d30de..d8714c3 100644 --- a/utils/src/main/java/org/apache/ode/utils/DOMUtils.java +++ b/utils/src/main/java/org/apache/ode/utils/DOMUtils.java @@ -135,6 +135,14 @@ public class DOMUtils { return out.toString(); } + public static Element getFirstChildElement(Node node) { + NodeList l = node.getChildNodes(); + for (int i = 0; i < l.getLength(); i++) { + if (l.item(i) instanceof Element) return (Element) l.item(i); + } + return null; + } + /** * Returns the value of an attribute of an element. Returns null if the * attribute is not found (whereas Element.getAttributeNS returns "" if an
