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; };
}