snowstorm tech [
https://community.jboss.org/people/snowstormuser] created the discussion
"Re: How to call external web service in jbpm process."
To view the discussion, visit:
https://community.jboss.org/message/795330#795330
--------------------------------------------------------------
Thanks for relpy,
I have already used the above link example that you have provided.But i am facing an error
while execuation of the code.
here i'm proving the *bpmn file*, *java code* and *error*
The web service that i used is:-*
*
And i also used the class which are genrated for the webservice above specified in my
project class path.
*bpmn file:-*
*
*
<?xml version="1.0" encoding="UTF-8"?>
<definitions id="Definition"
targetNamespace="
http://www.example.org/MinimalExample
http://www.example.org/MinimalExample"
typeLanguage="
http://www.java.com/javaTypes
http://www.java.com/javaTypes"
expressionLanguage="
http://www.mvel.org/2.0
http://www.mvel.org/2.0"
xmlns="
http://www.omg.org/spec/BPMN/20100524/MODEL
http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance
http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.omg.org/spec/BPMN/20100524/MODEL
http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd"
xmlns:g="
http://www.jboss.org/drools/flow/gpd
http://www.jboss.org/drools/flow/gpd"
xmlns:bpmndi="
http://www.omg.org/spec/BPMN/20100524/DI
http://www.omg.org/spec/BPMN/20100524/DI"
xmlns:dc="
http://www.omg.org/spec/DD/20100524/DC
http://www.omg.org/spec/DD/20100524/DC"
xmlns:di="
http://www.omg.org/spec/DD/20100524/DI
http://www.omg.org/spec/DD/20100524/DI"
xmlns:tns="
http://www.jboss.org/drools
http://www.jboss.org/drools">
<import importType="
http://schemas.xmlsoap.org/wsdl/
http://schemas.xmlsoap.org/wsdl/" location="
http://wsf.cdyne.com/WeatherWS/Weather.asmx?WSDL
http://wsf.cdyne.com/WeatherWS/Weather.asmx?WSDL" namespace="
http://ws.cdyne.com/WeatherWS/ http://ws.cdyne.com/WeatherWS/"/>
<itemDefinition id="_sItem"/>
<itemDefinition id="_listItem"
structureRef="java.util.Collection"/>
<itemDefinition id="_listItemOut"
structureRef="java.util.Collection"/>
<itemDefinition id="_map" structureRef="java.util.Map"/>
<itemDefinition id="_2-2-4-itemItem" />
<itemDefinition id="_5-listItem" />
<itemDefinition id="_2_multiInstanceItemType" />
<itemDefinition id="_2_multiInstanceItemOutType"/>
<itemDefinition id="_2-2-4_InMessageType" />
<message id="_2-2-4_InMessage" itemRef="_2-2-4_InMessageType"
/>
<interface id="_2-2-4_ServiceInterface" name=""
implementationRef="WeatherSoap">
<operation id="_2-2-4_ServiceOperation"
implementationRef="GetCityWeatherByZIP" name="">
<inMessageRef>_2-2-4_InMessage</inMessageRef>
</operation>
</interface>
<process processType="Private" isExecutable="true"
id="WeatherWSServiceProcess" name="WeatherWSServiceProcess"
tns:packageName="defaultPackage">
<!-- process variables -->
<property id="list" itemSubjectRef="_listItem"/>
<property id="listOut" itemSubjectRef="_listItemOut"/>
<property id="mode" itemSubjectRef="_sItem"/>
<property id="map" itemSubjectRef="_map"/>
<!-- nodes -->
<startEvent id="_1" name="StartProcess" >
</startEvent>
<scriptTask id="_21" name="Prepare input" scriptFormat="
http://www.java.com/java http://www.java.com/java" >
<script>
System.out.println("Get zip code result is " + map);
list = new java.util.ArrayList(map.values());
list.remove("Complete");
listOut = new java.util.ArrayList();
kcontext.setVariable("list", list);
kcontext.setVariable("listOut", listOut);
</script>
</scriptTask>
<serviceTask id="_2" name="Get weather forecast"
operationRef="_2-2-4_ServiceOperation" implementation="##WebService"
>
<extensionElements>
<tns:onEntry-script scriptFormat="
http://www.java.com/java
http://www.java.com/java">
<script>System.out.println("WS1");</script>
</tns:onEntry-script>
<tns:onExit-script>
<script>System.out.println("WS2");</script>
</tns:onExit-script>
</extensionElements>
<ioSpecification>
<dataInput id="_2-2-4_param" name="Parameter" />
<dataInput id="DataInput_1" name="mode"/>
<dataInput id="_2_listInput" name="list"/>
<dataOutput id="_2_listOutOutput" name="listOut"/>
<dataOutput id="_2-2-4_result" name="Result" />
<inputSet>
<dataInputRefs>_2-2-4_param</dataInputRefs>
<dataInputRefs>DataInput_1</dataInputRefs>
</inputSet>
<outputSet>
<dataOutputRefs>_2_listOutOutput</dataOutputRefs>
</outputSet>
</ioSpecification>
<dataInputAssociation>
<targetRef>_2-2-4_param</targetRef>
<assignment>
<from xsi:type="tFormalExpression">#{item}</from>
<to xsi:type="tFormalExpression">_2-2-4_param</to>
</assignment>
</dataInputAssociation>
<dataInputAssociation>
<sourceRef>mode</sourceRef>
<targetRef>DataInput_1</targetRef>
</dataInputAssociation>
<dataInputAssociation id="DataInputAssociation_1">
<sourceRef>list</sourceRef>
<targetRef>_2_listInput</targetRef>
</dataInputAssociation>
<dataOutputAssociation>
<sourceRef>_2-2-4_result</sourceRef>
<targetRef>itemOut</targetRef>
</dataOutputAssociation>
<multiInstanceLoopCharacteristics>
<loopDataInputRef>_2_input</loopDataInputRef>
<loopDataOutputRef>_2_listOutOutput</loopDataOutputRef>
<inputDataItem id="item"
itemSubjectRef="_2_multiInstanceItemType"/>
<outputDataItem id="itemOut"
itemSubjectRef="_2_multiInstanceItemOutType"/>
</multiInstanceLoopCharacteristics>
</serviceTask>
<scriptTask id="_3" name="Log result" >
<script>System.out.println("Service result " +
listOut);</script>
</scriptTask>
<endEvent id="_4" name="EndProcess" >
<terminateEventDefinition/>
</endEvent>
<userTask id="_5" name="Get zip codes" >
<ioSpecification>
<dataInput id="_2_CommentInput" name="Comment" />
<dataInput id="_2_SkippableInput" name="Skippable" />
<dataInput id="_2_TaskNameInput" name="TaskName" />
<dataInput id="_2_GroupIdInput" name="GroupId" />
<dataInput id="_2_PriorityInput" name="Priority" />
<dataOutput id="_2_ResultOutput" name="Result" />
<inputSet>
<dataInputRefs>_2_CommentInput</dataInputRefs>
<dataInputRefs>_2_SkippableInput</dataInputRefs>
<dataInputRefs>_2_TaskNameInput</dataInputRefs>
<dataInputRefs>_2_GroupIdInput</dataInputRefs>
<dataInputRefs>_2_PriorityInput</dataInputRefs>
</inputSet>
<outputSet>
<dataOutputRefs>_2_ResultOutput</dataOutputRefs>
</outputSet>
</ioSpecification>
<dataInputAssociation>
<targetRef>_2_CommentInput</targetRef>
<assignment>
<from xsi:type="tFormalExpression"></from>
<to xsi:type="tFormalExpression">_2_CommentInput</to>
</assignment>
</dataInputAssociation>
<dataInputAssociation>
<targetRef>_2_SkippableInput</targetRef>
<assignment>
<from xsi:type="tFormalExpression">false</from>
<to xsi:type="tFormalExpression">_2_SkippableInput</to>
</assignment>
</dataInputAssociation>
<dataInputAssociation>
<targetRef>_2_TaskNameInput</targetRef>
<assignment>
<from xsi:type="tFormalExpression">firstTask</from>
<to xsi:type="tFormalExpression">_2_TaskNameInput</to>
</assignment>
</dataInputAssociation>
<dataInputAssociation>
<targetRef>_2_GroupIdInput</targetRef>
<assignment>
<from xsi:type="tFormalExpression"></from>
<to xsi:type="tFormalExpression">_2_GroupIdInput</to>
</assignment>
</dataInputAssociation>
<dataInputAssociation>
<targetRef>_2_PriorityInput</targetRef>
<assignment>
<from xsi:type="tFormalExpression"></from>
<to xsi:type="tFormalExpression">_2_PriorityInput</to>
</assignment>
</dataInputAssociation>
<dataOutputAssociation>
<sourceRef>_2_ResultOutput</sourceRef>
<targetRef>map</targetRef>
</dataOutputAssociation>
<potentialOwner>
<resourceAssignmentExpression>
<formalExpression>john</formalExpression>
</resourceAssignmentExpression>
</potentialOwner>
</userTask>
<userTask id="_6" name="Show forecast" >
<ioSpecification>
<dataInput id="_4_outputInput" name="output" />
<dataInput id="_4_CommentInput" name="Comment" />
<dataInput id="_4_SkippableInput" name="Skippable" />
<dataInput id="_4_TaskNameInput" name="TaskName" />
<dataInput id="_4_GroupIdInput" name="GroupId" />
<dataInput id="_4_PriorityInput" name="Priority" />
<inputSet>
<dataInputRefs>_4_outputInput</dataInputRefs>
<dataInputRefs>_4_CommentInput</dataInputRefs>
<dataInputRefs>_4_SkippableInput</dataInputRefs>
<dataInputRefs>_4_TaskNameInput</dataInputRefs>
<dataInputRefs>_4_GroupIdInput</dataInputRefs>
<dataInputRefs>_4_PriorityInput</dataInputRefs>
</inputSet>
<outputSet>
</outputSet>
</ioSpecification>
<dataInputAssociation>
<sourceRef>listOut</sourceRef>
<targetRef>_4_outputInput</targetRef>
</dataInputAssociation>
<dataInputAssociation>
<targetRef>_4_CommentInput</targetRef>
<assignment>
<from xsi:type="tFormalExpression"></from>
<to xsi:type="tFormalExpression">_4_CommentInput</to>
</assignment>
</dataInputAssociation>
<dataInputAssociation>
<targetRef>_4_SkippableInput</targetRef>
<assignment>
<from xsi:type="tFormalExpression">false</from>
<to xsi:type="tFormalExpression">_4_SkippableInput</to>
</assignment>
</dataInputAssociation>
<dataInputAssociation>
<targetRef>_4_TaskNameInput</targetRef>
<assignment>
<from xsi:type="tFormalExpression">secondTask</from>
<to xsi:type="tFormalExpression">_4_TaskNameInput</to>
</assignment>
</dataInputAssociation>
<dataInputAssociation>
<targetRef>_4_GroupIdInput</targetRef>
<assignment>
<from xsi:type="tFormalExpression"></from>
<to xsi:type="tFormalExpression">_4_GroupIdInput</to>
</assignment>
</dataInputAssociation>
<dataInputAssociation>
<targetRef>_4_PriorityInput</targetRef>
<assignment>
<from xsi:type="tFormalExpression"></from>
<to xsi:type="tFormalExpression">_4_PriorityInput</to>
</assignment>
</dataInputAssociation>
<potentialOwner>
<resourceAssignmentExpression>
<formalExpression>john</formalExpression>
</resourceAssignmentExpression>
</potentialOwner>
</userTask>
<!-- connections -->
<sequenceFlow id="_21-_2" sourceRef="_21"
targetRef="_2" />
<sequenceFlow id="_2-_3" sourceRef="_2"
targetRef="_3" />
<sequenceFlow id="_3-_6" sourceRef="_3"
targetRef="_6" />
<sequenceFlow id="_1-_5" sourceRef="_1"
targetRef="_5" />
<sequenceFlow id="_5-_21" sourceRef="_5"
targetRef="_21" />
<sequenceFlow id="_6-_4" sourceRef="_6"
targetRef="_4" />
</process>
<bpmndi:BPMNDiagram>
<bpmndi:BPMNPlane bpmnElement="WeatherWSServiceProcess" >
<bpmndi:BPMNShape bpmnElement="_1" >
<dc:Bounds x="16" y="67" width="48"
height="48" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="_2" >
<dc:Bounds x="228" y="16" width="200"
height="150" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="_21" >
<dc:Bounds x="128" y="26" width="200"
height="150" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="_3" >
<dc:Bounds x="460" y="67" width="92"
height="48" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="_4" >
<dc:Bounds x="584" y="67" width="48"
height="48" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="_5" >
<dc:Bounds x="96" y="67" width="100"
height="48" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="_6" >
<dc:Bounds x="96" y="67" width="140"
height="148" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="_21-_2" >
<di:waypoint x="140" y="50" />
<di:waypoint x="144" y="117" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="_2-_3" >
<di:waypoint x="42" y="49" />
<di:waypoint x="140" y="50" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="_3-_6" >
<di:waypoint x="146" y="91" />
<di:waypoint x="328" y="91" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="_1-_5" >
<di:waypoint x="328" y="91" />
<di:waypoint x="506" y="91" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="_5-_21" >
<di:waypoint x="506" y="91" />
<di:waypoint x="608" y="91" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="_6-_4" >
<di:waypoint x="40" y="91" />
<di:waypoint x="146" y="91" />
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</definitions>
*Java code:-*
*
*
import java.util.*;
import javax.xml.ws.Endpoint;
import org.drools.KnowledgeBase;
import org.drools.builder.KnowledgeBuilder;
import org.drools.builder.KnowledgeBuilderFactory;
import org.drools.builder.ResourceType;
import org.drools.definition.process.Connection;
import org.drools.definition.process.Node;
import org.drools.io.ResourceFactory;
import org.drools.runtime.StatefulKnowledgeSession;
import org.drools.runtime.process.NodeInstance;
import org.drools.runtime.process.WorkItem;
import org.drools.runtime.process.WorkItemHandler;
import org.drools.runtime.process.WorkItemManager;
import org.jbpm.bpmn2.handler.ServiceTaskHandler;
import org.jbpm.process.instance.ProcessInstance;
import org.jbpm.process.workitem.wsht.CommandBasedWSHumanTaskHandler;
import org.jbpm.task.service.TaskClientHandler;
import org.jbpm.workflow.core.node.HumanTaskNode;
import org.jbpm.workflow.instance.WorkflowProcessInstance;
import org.jbpm.workflow.instance.impl.WorkflowProcessInstanceImpl;
public class ProcessMain {
public static void main(String[] args) throws Exception {
KnowledgeBase kbase = readKnowledgeBase();
StatefulKnowledgeSession ksession =
kbase.newStatefulKnowledgeSession();
TestWorkItemHandler htHandler = new TestWorkItemHandler();
ksession.getWorkItemManager().registerWorkItemHandler("Service
Task", new ServiceTaskHandler());
ksession.getWorkItemManager().registerWorkItemHandler("Human
Task", htHandler);
Map<String, Object> params = new HashMap<String,
Object>();
params.put("mode", "async");
WorkflowProcessInstance processInstance = (WorkflowProcessInstance)
ksession.startProcess("WeatherWSServiceProcess", params);
params = new HashMap<String, Object>();
params.put("r1", "14025");
HashMap<String, Object> results = new HashMap<String,
Object>();
results.put("Result", params);
ksession.getWorkItemManager().completeWorkItem(htHandler.getWorkItem().getId(), results);
Thread.sleep(5000);
ksession.getWorkItemManager().completeWorkItem(htHandler.getWorkItem().getId(),
null);
}
static class TestWorkItemHandler implements WorkItemHandler {
private static TestWorkItemHandler INSTANCE = new
TestWorkItemHandler();
private WorkItem workItem;
private WorkItem aborted;
public static TestWorkItemHandler getInstance() {
return INSTANCE;
}
public void executeWorkItem(WorkItem workItem,
WorkItemManager manager) {
this.workItem = workItem;
}
public void abortWorkItem(WorkItem workItem,
WorkItemManager manager) {
this.aborted = workItem;
}
public WorkItem getWorkItem() {
WorkItem result = workItem;
workItem = null;
return result;
}
public WorkItem getAbortedWorkItem() {
WorkItem result = aborted;
aborted = null;
return result;
}
}
}
*Error:-*
*
*> Get zip code result is {r1=14025}
java.lang.ClassNotFoundException:
--------------------------------------------------------------
Reply to this message by going to Community
[
https://community.jboss.org/message/795330#795330]
Start a new discussion in jBPM at Community
[
https://community.jboss.org/choose-container!input.jspa?contentType=1&...]