Activiti webService task演示实例

来源:互联网 发布:闻牛创富软件怎么样 编辑:程序博客网 时间:2024/06/14 00:48


一、webservice的服务端简单实现

@WebServicepublic interface Calculator {@WebMethod@WebResult(name = "num3")public int plus(@WebParam(name = "num1") int num1,@WebParam(name = "num2") int num2);}@WebService(endpointInterface = "com.first.service.Calculator",serviceName = "calculator")public class CalculatorImpl implements Calculator{@Overridepublic int plus(int num1, int num2) {return num1+num2;}}public static void main(String[] args) {Calculator calculator;Server server;calculator = new CalculatorImpl();        JaxWsServerFactoryBean svrFactory = new JaxWsServerFactoryBean();        svrFactory.setServiceClass(Calculator.class);        svrFactory.setAddress("http://localhost:63081/calculator");        svrFactory.setServiceBean(calculator);        svrFactory.getInInterceptors().add(new LoggingInInterceptor());        svrFactory.getOutInterceptors().add(new LoggingOutInterceptor());        server = svrFactory.create();        server.start();}


java实现一个简单的webservice服务端,并且为调用方法的传入传出参数指定名称,方便activiti中引用

 


二、activiti 流程定义文件

<?xml version="1.0" encoding="UTF-8"?><definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns:activiti="http://activiti.org/bpmn"  xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"  xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC"  xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI"  typeLanguage="http://www.w3.org/2001/XMLSchema"  expressionLanguage="http://www.w3.org/1999/XPath"  targetNamespace="com.first.service" xmlns:tns="com.first.service"                         xmlns:calculator="http://webservice.activiti.org/">              <import importType="http://schemas.xmlsoap.org/wsdl/"          location="http://localhost:63081/calculator?wsdl"          namespace="http://webservice.activiti.org/" />    <process id="process1" name="process1">    <startEvent id="startevent1" name="Start"></startEvent>    <endEvent id="endevent1" name="End"></endEvent>    <userTask id="usertask1" name="hello"></userTask>    <serviceTask id="servicetask1" name="calculator" implementation="##WebService"                 operationRef="tns:plusOperation">      <!-- activiti流程变量和webservice的输入输出参数的转换 -->                  <dataInputAssociation>        <sourceRef>input1</sourceRef><!-- name of an Activiti variable -->        <targetRef>num1</targetRef><!-- name of an element of the input message -->      </dataInputAssociation>      <dataInputAssociation>        <sourceRef>input2</sourceRef><!-- name of an Activiti variable -->        <targetRef>num2</targetRef><!-- name of an element of the input message -->      </dataInputAssociation>      <dataOutputAssociation>      <sourceRef>num3</sourceRef><!-- name of an element of the output message -->      <targetRef>output3</targetRef><!-- name of an Activiti variable -->      </dataOutputAssociation>    </serviceTask>        <sequenceFlow id="flow1" name="" sourceRef="startevent1" targetRef="usertask1"></sequenceFlow>    <sequenceFlow id="flow2" name="" sourceRef="usertask1" targetRef="servicetask1"></sequenceFlow>    <sequenceFlow id="flow3" name="" sourceRef="servicetask1" targetRef="endevent1"></sequenceFlow>  </process>    <!-- webservice的传入传出参数(webservice服务端明确指出),以及activiti执行代码中传入的参数引用 -->  <itemDefinition id="num1" structureRef="int" />  <itemDefinition id="num2" structureRef="int" />  <itemDefinition id="num3" structureRef="int" />  <itemDefinition id="input1" structureRef="int" />  <itemDefinition id="input2" structureRef="int" />  <itemDefinition id="output3" structureRef="int" />    <!-- 一个webservice方法操作调用的定义  implementationRef="calculator:Calculator" 中 Calculator 即 portType的引用 -->  <interface name="Calculator Interface" implementationRef="calculator:Calculator">    <!-- Operation: implementationRef = QName of WSDL Operation -->    <operation id="plusOperation" name="plusOperation Operation" implementationRef="calculator:plus">      <inMessageRef>tns:plusRequestMessage</inMessageRef>      <outMessageRef>tns:plusResponseMessage</outMessageRef>    </operation>  </interface>    <message id="plusRequestMessage" itemRef="tns:plusRequestItem" />  <message id="plusResponseMessage" itemRef="tns:plusResponseItem" />    <itemDefinition id="plusRequestItem" structureRef="calculator:plus" />  <itemDefinition id="plusResponseItem" structureRef="calculator:plusResponse" />    <bpmndi:BPMNDiagram id="BPMNDiagram_process1">    <bpmndi:BPMNPlane bpmnElement="process1" id="BPMNPlane_process1">      <bpmndi:BPMNShape bpmnElement="startevent1" id="BPMNShape_startevent1">        <omgdc:Bounds height="35" width="35" x="60" y="160"></omgdc:Bounds>      </bpmndi:BPMNShape>      <bpmndi:BPMNShape bpmnElement="endevent1" id="BPMNShape_endevent1">        <omgdc:Bounds height="35" width="35" x="590" y="160"></omgdc:Bounds>      </bpmndi:BPMNShape>      <bpmndi:BPMNShape bpmnElement="usertask1" id="BPMNShape_usertask1">        <omgdc:Bounds height="55" width="105" x="170" y="150"></omgdc:Bounds>      </bpmndi:BPMNShape>      <bpmndi:BPMNShape bpmnElement="servicetask1" id="BPMNShape_servicetask1">        <omgdc:Bounds height="55" width="105" x="370" y="150"></omgdc:Bounds>      </bpmndi:BPMNShape>      <bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1">        <omgdi:waypoint x="95" y="177"></omgdi:waypoint>        <omgdi:waypoint x="170" y="177"></omgdi:waypoint>      </bpmndi:BPMNEdge>      <bpmndi:BPMNEdge bpmnElement="flow2" id="BPMNEdge_flow2">        <omgdi:waypoint x="275" y="177"></omgdi:waypoint>        <omgdi:waypoint x="370" y="177"></omgdi:waypoint>      </bpmndi:BPMNEdge>      <bpmndi:BPMNEdge bpmnElement="flow3" id="BPMNEdge_flow3">        <omgdi:waypoint x="475" y="177"></omgdi:waypoint>        <omgdi:waypoint x="590" y="177"></omgdi:waypoint>      </bpmndi:BPMNEdge>    </bpmndi:BPMNPlane>  </bpmndi:BPMNDiagram></definitions>

 

流程执行代码

                  ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("acitiviti.cfg.xml");RepositoryService repositoryService=(RepositoryService) applicationContext.getBean("repositoryService");RuntimeService runtimeService  = (RuntimeService) applicationContext.getBean("runtimeService");IdentityService identityService=(IdentityService) applicationContext.getBean("identityService");repositoryService.createDeployment().addClasspathResource("calculator.bpmn20.xml").deploy();Map<String,Object> map=new HashMap<String,Object>();map.put("input1", 2); map.put("input2", 3);ProcessInstance pi=runtimeService.startProcessInstanceByKey("process1", map);System.out.println(pi.getId());TaskService taskService = (TaskService) applicationContext.getBean("taskService");taskService.claim("12", "yuyong");taskService.complete("12");int output = (Integer) runtimeService.getVariable("5", "output3");System.out.println(output);


 

原创粉丝点击