Java 带有JAXB的JAX-webservice使用循环返回多个值

Java 带有JAXB的JAX-webservice使用循环返回多个值,java,jaxb,Java,Jaxb,我编写了一个返回5个值的web服务: String taskPresentationName_UWL = null; String taskActivationTime_UWL = null; String taskPriority_UWL = null; String taskStatus_UWL = null; String taskID_UWL = null; 我的情况是,我运行一个循环,希望返回一个包含这些值的列表或数组 因为现在是代码,我只得到一行作为答案。例如: t

我编写了一个返回5个值的web服务:

String taskPresentationName_UWL = null; 
String taskActivationTime_UWL = null;   
String taskPriority_UWL = null; 
String taskStatus_UWL = null;   
String taskID_UWL = null;
我的情况是,我运行一个循环,希望返回一个包含这些值的列表或数组

因为现在是代码,我只得到一行作为答案。例如:

taskPresentationName_test1、taskActivationTime_test1、taskPriority_test1、taskStatus_test1、taskID_test1

但我想返回的答案如下所示:

taskPresentationName_test1、taskActivationTime_test1、, taskPriority_test1、taskStatus_test1、taskID_test1

taskPresentationName_test2、taskActivationTime_test2、, 任务优先级测试2、任务状态测试2、任务ID测试2

如何将答案返回到列表或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();    
      }
   }
}
@WebService(name=“getUWLTasks”,portName=“getUWLTasksPort”,serviceName=“getUWLTasksService”,targetNamespace=”http://sap.com/tutorial/testAPI/")
@无国籍
公共类getUWLTasks
{
@WebMethod(operationName=“getTasks”,exclude=false)
公共任务(
@WebParam(name=“taskPresentationName”,mode=WebParam.mode.OUT)持有者taskPresentationName,
@WebParam(name=“taskActivationTime”,mode=WebParam.mode.OUT)持有者taskActivationTime,
@WebParam(name=“taskPriority”,mode=WebParam.mode.OUT)持有者taskPriority,
@WebParam(name=“taskStatus”,mode=WebParam.mode.OUT)持有者taskStatus,
@WebParam(name=“taskID”,mode=WebParam.mode.OUT)持有者taskID){
字符串taskPresentationName\u UWL=null;
字符串taskActivationTime_UWL=null;
字符串taskPriority_UWL=null;
字符串taskStatus_UWL=null;
字符串taskID_UWL=null;
尝试
{    
TaskInstanceManager TaskInstanceManager=BPMFactory.getTaskInstanceManager();
HashSet status=新HashSet();
Status.add(Status.READY);
状态.添加(状态.保留);
状态。添加(状态。进行中);
设置myTasks=taskInstanceManager.getMyTaskAbstracts(状态);
迭代器taskIter=myTasks.Iterator();
while(taskIter.hasNext())
{    
TaskAbstract ta=taskIter.next();
//获取显示的UWL
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\u UWL;
taskActivationTime.value=taskActivationTime\u UWL;
taskPriority.value=taskPriority\u UWL;
taskStatus.value=taskStatus\u UWL;
taskID.value=taskID\u UWL;
}
}
捕获(BPMEException e)
{    
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
}

我编写了简单的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"};
          }  
任务

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

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

我的问题是,由于我正在开发的环境的一些限制,我必须只使用一个类来实现所需的结果,使用String[]而不是HolderYes@WebParam不支持out模式,不支持非持有者类我对您的anwser完全感到困惑:(例如,我可以使用持有者返回5个变量,但webservice的anwser是一个包含5个变量的列表,如(var11、var12、var13、var14、var15)(var21、var22、var23、var24、var25)等等。我也可以用anwser返回5个不同的ArrayList,但我不能像返回复杂类型一样返回anwser。我不知道如何描述它。需求是有一个xml格式的anwser,比如Tasks[(var11,var12,var13,var14,var15),(var21,var22,var23,var24,var25)…]有什么简单的方法可以实现吗?谢谢你的复杂类型你需要不止一个类
@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() {  
//...  
}