2012-08-28 47 views
0

我寫了返回5個值webservice的多個值:JAX web服務與JAXB返回使用循環

String taskPresentationName_UWL = null; 
String taskActivationTime_UWL = null; 
String taskPriority_UWL = null; 
String taskStatus_UWL = null; 
String taskID_UWL = null; 

我的情況是,我運行一個循環,我想返回一個列表或數組與這些值。

因爲它是現在的代碼,我只得到1行作爲答案。例如:

taskPresentationName_test1,taskActivationTime_test1,taskPriority_test1,taskStatus_test1,taskID_test1

但我要回應該如下答案:

taskPresentationName_test1,taskActivationTime_test1, taskPriority_test1,taskStatus_test1 ,taskID_test1

taskPresentationName_test2,t askActivationTime_test2, taskPriority_test2,taskStatus_test2,taskID_test2

....

我如何回答返回到列表或XML ???

我的代碼是下面

@WebService(name = "getUWLTasks", portName = "getUWLTasksPort", serviceName = "getUWLTasksService", targetNamespace = "http://sap.com/tutorial/testAPI/") 
@Stateless 
public class getUWLTasks 
{ 
    @WebMethod(operationName = "getTasks", exclude = false) 
    public void getTasks(
     @WebParam(name = "taskPresentationName", mode = WebParam.Mode.OUT) Holder<String> taskPresentationName, 
     @WebParam(name = "taskActivationTime", mode = WebParam.Mode.OUT) Holder<String> taskActivationTime, 
     @WebParam(name = "taskPriority", mode = WebParam.Mode.OUT) Holder<String> taskPriority, 
     @WebParam(name = "taskStatus", mode = WebParam.Mode.OUT) Holder<String> taskStatus, 
     @WebParam(name = "taskID", mode = WebParam.Mode.OUT) Holder<String> taskID) { 

     String taskPresentationName_UWL = null; 
     String taskActivationTime_UWL = null; 
     String taskPriority_UWL = null; 
     String taskStatus_UWL = null; 

     String taskID_UWL = null; 

     try 
     {  
     TaskInstanceManager taskInstanceManager = BPMFactory.getTaskInstanceManager(); 
     HashSet<Status> statuses = new HashSet<Status>(); 
     statuses.add(Status.READY); 
     statuses.add(Status.RESERVED); 
     statuses.add(Status.IN_PROGRESS); 

     Set<TaskAbstract> myTasks = taskInstanceManager.getMyTaskAbstracts(statuses); 
     Iterator<TaskAbstract> taskIter = myTasks.iterator(); 

     while (taskIter.hasNext()) 
     {  
      TaskAbstract ta = taskIter.next(); 

      //Get the UWL as it appears   

      java.net.URI taskInstanceId = ta.getId(); 

      URL taskExecutionURL = taskInstanceManager.generateTaskExecutionUrl(taskInstanceId); 
      TaskDetail taskDetail = taskInstanceManager.getTaskDetail(taskInstanceId); 

      taskPresentationName_UWL = ta.getPresentationName(); 
      taskActivationTime_UWL = ta.getCreatedTime().toString(); 
      taskPriority_UWL = ta.getPriority().toString(); 
      taskStatus_UWL = ta.getStatus().toString(); 

      taskID_UWL = ta.getId().toString(); 

      taskPresentationName.value = taskPresentationName_UWL; 
      taskActivationTime.value = taskActivationTime_UWL; 
      taskPriority.value = taskPriority_UWL; 
      taskStatus.value = taskStatus_UWL; 

      taskID.value = taskID_UWL;  
     } 
     } 
     catch (BPMException e) 
     {  
     // TODO Auto-generated catch block 
     e.printStackTrace();  
     } 
    } 
} 

回答

0

我寫簡單的WS,像你所有的作品要

@WebMethod(operationName = "getTasks", exclude = false) 
    public void getTasks(
     @WebParam(name = "taskPresentationName", mode = WebParam.Mode.OUT) Holder<String[]> taskPresentationName, 
     @WebParam(name = "taskActivationTime", mode = WebParam.Mode.OUT) Holder<String[]> taskActivationTime, 
     @WebParam(name = "taskPriority", mode = WebParam.Mode.OUT) Holder<String[]> taskPriority, 
     @WebParam(name = "taskStatus", mode = WebParam.Mode.OUT) Holder<String[]> taskStatus, 
     @WebParam(name = "taskID", mode = WebParam.Mode.OUT) Holder<String[]> taskID) 
      { 
      taskPresentationName.value = new String[]{"a1", "a2"}; 
      taskActivationTime.value = new String[]{"b1", "b2"}; 
      taskPriority.value = new String[]{"c1", "c2"}; 
      } 

響應包含

<taskPresentationName>a1</taskPresentationName> 
<taskPresentationName>a2</taskPresentationName> 
    <taskActivationTime>b1</taskActivationTime> 
<taskActivationTime>b2</taskActivationTime> 
    <taskPriority>c1</taskPriority> 
<taskPriority>c2</taskPriority> 

編輯

@XmlRootElement 
@XmlAccessorType(XmlAccessType.FIELD) 
public class Task 
{ 
    String taskPresentationName_UWL; 
    //... 
    String taskID_UWL; 

    // getters, setters 
} 

任務

@XmlRootElement 
@XmlAccessorType(XmlAccessType.FIELD) 
public class Tasks 
{ 
    @XmlElement 
    private List<Task> tasks = new ArrayList<Task>(); 

    public List<Task> getTasks() 
    { 
     return tasks; 
    } 
} 

網絡的方法

@WebMethod(operationName = "getTasks", exclude = false) 
@WebResult(name = "tasks") 
public Tasks getTasks() { 
//... 
} 
+0

答案被更新 – Ilya

+0

我的問題是,我一直在使用,因爲我的某些環境限制的只有一個類,以達到預期的效果開發 – user1630426

+0

使用字符串[]代替持有人 Ilya