一、webservice的服务端简单实现
@WebService public 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{ @Override public 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);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。