4.2 Webリソースクライアントの実装例
販売業務ビジネスプロセスを実行するWebリソースクライアントの実装例を示します。
案件を投入したあと,その案件の作業一覧を取得し,作業を完了させる例です。
SampleRESTClient.java
package rest.sample; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import javax.ws.rs.client.Client; import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.client.Entity; import javax.ws.rs.client.WebTarget; public class SampleRESTClient { public static void main(final String[] args) { try { SampleRESTClient sampleClient = new SampleRESTClient(); sampleClient.demonstration("restserver", "80", "csciwws"); } catch (Exception e) { System.out.println(e.getMessage()); } } private void demonstration(final String host, final String port, final String contextroot) { System.out.println("Demonstration started."); String targetURL = "http://" + host + ":" + port + "/" + contextroot; // Invoke resource Client client = ClientBuilder.newClient(); // Set the target resource's URL String postURL = new String(targetURL + "/v1/process-instance/create-and-start"); System.out.println("The target URL is \"POST " + postURL + "\"."); // ProcessInstance RequestBody CreateAndStartProcessInstance parameter = new CreateAndStartProcessInstance(); parameter.setName("process1"); parameter.setDeadline("2020-12-31T12:00:00+09:00"); parameter.setPriority("10"); parameter.setProcessDataList(null); parameter.setDefinitionName("APCS3process"); parameter.setDefinitionVersion("1"); // ProcessData List<ProcessData> processData = new ArrayList<ProcessData>(); ProcessData data1 = new ProcessData(); data1.setKey("$SAPP"); data1.setValue("Y"); processData.add(data1); ProcessData data2 = new ProcessData(); data2.setKey("$NID"); data2.setValue("1"); processData.add(data2); parameter.setProcessDataList(processData); Entity<?> entity = Entity.entity(parameter, MediaType.APPLICATION_XML); WebTarget targetPost = client.target(postURL); Response postResponse = targetPost .request() .accept(MediaType.APPLICATION_XML) .post(entity); ProcessInstance processInstance = null; int statusCode = postResponse.getStatus(); if (statusCode == 201) { processInstance = postResponse.readEntity(ProcessInstance.class); } else { String error = postResponse.readEntity(String.class); System.out.println("Status Code=" + statusCode); client.close(); throw new RuntimeException(error); } System.out.println("Response of ProcessInstance is" + "\r\n Name:" + processInstance.getProcessDefinitionName() + "\r\n PIID:" + processInstance.getID() + "\r\n StateCode:" + processInstance.getStateCode()); // Set the target resource's URL String piid = processInstance.getID(); String getURL = new String(targetURL + "/v1/work-item" + "?filter=ProcessInstanceID%3D" + piid); System.out.println("The target URL is \"GET " + getURL + "\"."); WebTarget targetGet = client.target(getURL); Response getResponse = targetGet .request() .accept(MediaType.APPLICATION_XML) .get(); statusCode = getResponse.getStatus(); if (statusCode != 200) { String error = getResponse.readEntity(String.class); System.out.println("Status Code=" + statusCode); client.close(); throw new RuntimeException(error); } WorkItemList workItemList = getResponse.readEntity(WorkItemList.class); System.out.println("The number of WorkItems is " + workItemList.getWorkItems().size()); List<WorkItem> workItems = workItemList.getWorkItems(); if (workItems != null) { Iterator<WorkItem> it = workItems.iterator(); while (it.hasNext()) { WorkItem wi = it.next(); // Set the target resource's URL String putURL = new String(targetURL + "/v1/work-item/" + piid + "/" + wi.getID() + "/perform-and-complete"); System.out.println("The target URL is \"PUT " + putURL + "\"."); entity = Entity.entity( "<Parameter />", MediaType.APPLICATION_XML); WebTarget targetPut = client.target(putURL); Response putResponse = targetPut .request() .accept(MediaType.APPLICATION_XML) .put(entity); WorkItem workItem = null; statusCode = putResponse.getStatus(); if (statusCode == 200) { workItem = putResponse.readEntity(WorkItem.class); } else { String error = putResponse.readEntity(String.class); System.out.println("Status Code=" + statusCode); client.close(); throw new RuntimeException(error); } System.out.println("WorkItem is" + "\r\n Name:" + workItem.getWorkDefinitionName() + "\r\n WIID:" + workItem.getID() + "\r\n State:" + workItem.getStateCode()); } } client.close(); System.out.println("Demonstration ended."); } }
ProcessInstance.java
package rest.sample; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement(name="ProcessInstance") class ProcessInstance { private String closedDate; private String creator; private String deadline; private String ID; private String movedDate; private String name; private String priority; private String processDefinitionID; private String processDefinitionName; private String startDate; private String stateCode; public ProcessInstance() {} @XmlElement(name="ClosedDate") public String getClosedDate() { return closedDate; } public void setClosedDate(String closedDate) { this.closedDate = closedDate; } @XmlElement(name="Creator") public String getCreator() { return creator; } public void setCreator(String creator) { this.creator = creator; } @XmlElement(name="Deadline") public String getDeadline() { return deadline; } public void setDeadline(String deadline) { this.deadline = deadline; } @XmlElement(name="ID") public String getID() { return ID; } public void setID(String iD) { ID = iD; } @XmlElement(name="MovedDate") public String getMovedDate() { return movedDate; } public void setMovedDate(String movedDate) { this.movedDate = movedDate; } @XmlElement(name="Name") public String getName() { return name; } public void setName(String name) { this.name = name; } @XmlElement(name="Priority") public String getPriority() { return priority; } public void setPriority(String priority) { this.priority = priority; } @XmlElement(name="ProcessDefinitionID") public String getProcessDefinitionID() { return processDefinitionID; } public void setProcessDefinitionID(String processDefinitionID) { this.processDefinitionID = processDefinitionID; } @XmlElement(name="ProcessDefinitionName") public String getProcessDefinitionName() { return processDefinitionName; } public void setProcessDefinitionName(String processDefinitionName) { this.processDefinitionName = processDefinitionName; } @XmlElement(name="StartDate") public String getStartDate() { return startDate; } public void setStartDate(String startDate) { this.startDate = startDate; } @XmlElement(name="StateCode") public String getStateCode() { return stateCode; } public void setStateCode(String stateCode) { this.stateCode = stateCode; } }
ProcessData.java
package rest.sample; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement(name = "ProcessData") public class ProcessData { private String key; private String value; public ProcessData() {} @XmlElement(name = "Key") public String getKey() { return key; } public void setKey(String aKey) { key = aKey; } @XmlElement(name = "Value") public String getValue() { return value; } public void setValue(String aValue) { value = aValue; } }
CreateAndStartProcessInstance.java
package rest.sample; import java.util.List; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlRootElement; @XmlAccessorType(XmlAccessType.FIELD) @XmlRootElement(name = "Parameter") public class CreateAndStartProcessInstance { @XmlElement(name = "Name") private String name; @XmlElement(name = "Deadline") private String deadline; @XmlElement(name = "Priority") private String priority; @XmlElementWrapper(name = "ProcessDataList") @XmlElement(name = "ProcessData") private List<ProcessData> processDataList; @XmlElement(name = "DefinitionName") private String definitionName; @XmlElement(name = "DefinitionVersion") private String definitionVersion; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDeadline() { return deadline; } public void setDeadline(String deadline) { this.deadline = deadline; } public String getPriority() { return priority; } public void setPriority(String priority) { this.priority = priority; } public List<ProcessData> getProcessDataList() { return processDataList; } public void setProcessDataList(List<ProcessData> processes) { this.processDataList = processes; } public String getDefinitionName() { return definitionName; } public void setDefinitionName(String definitionName) { this.definitionName = definitionName; } public String getDefinitionVersion() { return definitionVersion; } public void setDefinitionVersion(String definitionVersion) { this.definitionVersion = definitionVersion; } }
WorkItemList.java
package rest.sample; import java.util.List; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement(name="WorkItems") class WorkItemList { private List<WorkItem> workItems; @XmlElement(name="WorkItem") public List<WorkItem> getWorkItems() { return workItems; } public void setWorkItems(List<WorkItem> workItems) { this.workItems = workItems; } }
WorkItem.java
package rest.sample; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement(name="WorkItem") class WorkItem { private String activityInstanceID; private String closedDate; private String creationDate; private String deadline; private String ID; private String name; private String participant; private String priority; private String processDefinitionID; private String processInstanceID; private String processInstanceName; private String startDate; private String stateCode; private String workTypeCode; private String workDefinitionID; private String workDefinitionName; public WorkItem() {} @XmlElement(name="ActivityInstanceID") public String getActivityInstanceID() { return activityInstanceID; } public void setActivityInstanceID(String activityInstanceID) { this.activityInstanceID = activityInstanceID; } @XmlElement(name="ClosedDate") public String getClosedDate() { return closedDate; } public void setClosedDate(String closedDate) { this.closedDate = closedDate; } @XmlElement(name="CreationDate") public String getCreationDate() { return creationDate; } public void setCreationDate(String creationDate) { this.creationDate = creationDate; } @XmlElement(name="Deadline") public String getDeadline() { return deadline; } public void setDeadline(String deadline) { this.deadline = deadline; } @XmlElement(name="ID") public String getID() { return ID; } public void setID(String iD) { ID = iD; } @XmlElement(name="Name") public String getName() { return name; } public void setName(String name) { this.name = name; } @XmlElement(name="Paticipant") public String getParticipant() { return participant; } public void setParticipant(String participant) { this.participant = participant; } @XmlElement(name="Priority") public String getPriority() { return priority; } public void setPriority(String priority) { this.priority = priority; } @XmlElement(name="ProcessDefinitionID") public String getProcessDefinitionID() { return processDefinitionID; } public void setProcessDefinitionID(String processDefinitionID) { this.processDefinitionID = processDefinitionID; } @XmlElement(name="ProcessInstanceID") public String getProcessInstanceID() { return processInstanceID; } public void setProcessInstanceID(String processInstanceID) { this.processInstanceID = processInstanceID; } @XmlElement(name="ProcessInstanceName") public String getProcessInstanceName() { return processInstanceName; } public void setProcessInstanceName(String processInstanceName) { this.processInstanceName = processInstanceName; } @XmlElement(name="StartDate") public String getStartDate() { return startDate; } public void setStartDate(String startDate) { this.startDate = startDate; } @XmlElement(name="StateCode") public String getStateCode() { return stateCode; } public void setStateCode(String stateCode) { this.stateCode = stateCode; } @XmlElement(name="WorkTypeCode") public String getWorkTypeCode() { return workTypeCode; } public void setWorkTypeCode(String workTypeCode) { this.workTypeCode = workTypeCode; } @XmlElement(name="WorkDefinitionID") public String getWorkDefinitionID() { return workDefinitionID; } public void setWorkDefinitionID(String workDefinitionID) { this.workDefinitionID = workDefinitionID; } @XmlElement(name="WorkDefinitionName") public String getWorkDefinitionName() { return workDefinitionName; } public void setWorkDefinitionName(String workDefinitionName) { this.workDefinitionName = workDefinitionName; }; }