2013-07-23 2 views
0

Polarion의 작업 기록 정보를 가져와 나중에 사용하기 위해 DAT 파일에 기록하는 Java 프로그램을 작성하려고합니다.null을 리턴하는 Polarion WorkItem 클래스 getter 메소드

내가 성공적으로 서버에 연결 한과 WorkItem 객체를 검색 한하지만 요구 사항을 충족하기 위해 WorkItem 클래스의 getWorkRecords() 방법을 사용할 필요가 있기 때문에 (getUri() 이외)를 취득 메소드의 어느 것도 문제를 야기하는, 제대로 작동하지 프로젝트의

나는 우리 주 Polarion 서버와 우리가 쓰려고하는 프로그램과 같은 것들을 테스트하기위한 일종의 테스트 영역으로 사용하는 '준비'서버 모두에서 클래스에 대한 getter 메소드를 모두 시도했다. 나는 전체 권한을 가지고있다.

권한에 관계없이 나는 자신 만의 작업 항목을보고자 시도하고 있으므로 사용 권한 문제가 있어서는 안되므로 내가 만든 더미 작업 항목을 쿼리하고 있습니다.

package test; 
//stg= 10.4.1.50 
//main= 10.4.1.10 


import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.ObjectInputStream; 
import java.io.ObjectOutputStream; 
import java.net.MalformedURLException; 
import java.rmi.RemoteException; 
import java.util.ArrayList; 

import javax.xml.rpc.ServiceException; 

import com.polarion.alm.ws.client.WebServiceFactory; 
import com.polarion.alm.ws.client.session.SessionWebService; 
import com.polarion.alm.ws.client.tracker.TrackerWebService; 
import com.polarion.alm.ws.client.types.tracker.WorkItem; 
import com.polarion.alm.ws.client.types.tracker.WorkRecord; 


public class WorkrecordImporter { 

private WebServiceFactory factory; 
private TrackerWebService trackerService; 
private SessionWebService sessionService; 
private WorkItem[] workItems; 
private ArrayList<WorkRecord> workRecords; 
private String password = //insertpasswordhere;//no peaking 

public WorkrecordImporter()throws ServiceException, IOException, ClassNotFoundException{ 

    initializeFields();//initializes all of the Web Services and arrays 
    //step one 
    getWorkItems(); 
    //readDATFile(); 
    //step two 
    getWorkRecords(); 
    //$$$ 
    printWorkRecords(); 
    //$$$$$ 
    writeDATFile(); 

} 
//you know what this does. 
public void printWorkRecords(){ 
    for(int temp = 0; temp < workItems.length; temp++){ 

     System.out.println(workItems[temp].getUri().toString()); 
    } 
} 
public void writeDATFile() throws IOException{ 
    ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("C:\\Users\\sweidenkopf\\workspace\\test\\filename.dat")); 
    try { 
     out.writeObject(workRecords); 
    } finally { 
     // Make sure to close the file when done 
     out.close(); 
    } 
} 
/** 
* This method sets up the WebServiceFactory at the specified URL. It then initializes the web services, logs in the 
* session service, and initializes the arrays. 
* @throws MalformedURLException 
* @throws ServiceException 
* @throws RemoteException 
*/ 
public void initializeFields() throws MalformedURLException, ServiceException, RemoteException{ 
    factory = new WebServiceFactory("//insert url here"); 
    trackerService = factory.getTrackerService(); 
    sessionService = factory.getSessionService(); 
    sessionService.logIn("sweidenkopf", password); 
    workRecords = new ArrayList<>(); 
} 
public void getWorkItems()throws MalformedURLException, ServiceException, RemoteException{ 
    sessionService.beginTransaction(); 
    workItems = trackerService.queryWorkItems("workRecords.user.id:sweidenkopf", null, null); 
    sessionService.endTransaction(false); 
} 
public void getWorkRecords()throws MalformedURLException, ServiceException, RemoteException{ 
    sessionService.beginTransaction(); 
    for(int k = 0; k < workItems.length; k++) 
    {System.out.println("This is working"); 
     try{//not every work item has work records 
      System.out.println(workItems[k].getWorkRecords()); 
      WorkRecord[] temp; 
      temp = workItems[k].getWorkRecords(); 
      for(int x = 0; x < temp.length; x++){ 
       System.out.println("This is working fine"); 
       workRecords.add(temp[x]);     
      } 
     }catch(NullPointerException e){ 
      System.out.println("I must regretfully inform you that I have grave news; your endeavors have not been successfull."); 
      continue; 
     } 
    } 
    System.out.println(workRecords.toString()); 
    sessionService.endTransaction(false); 
} 
public void readDATFile() throws FileNotFoundException, IOException, ClassNotFoundException{ 
    ObjectInputStream in = new ObjectInputStream(new FileInputStream("C:\\Users\\sweidenkopf\\workspace\\test\\filename.dat")); 

    try{ 
     Object temp = in.readObject(); 
     workRecords = (ArrayList) temp; 
    } 
    finally{ 
     in.close(); 
    } 
} 
} 

가장 중요한 부분은 물론 내 코드 내에서 getWorkRecords() 방법 : 여기

는 프로그램의 코드입니다. 보시다시피 디버깅 목적으로 사용하고있는 문 System.out.println(workItems[k].getWorkRecords());이 포함되어 있습니다. 이 문은 null을 반환하며 해당 문에서 대체 될 때 null을 반환하지 않는 메서드는 WorkItem이며 getUri()입니다. 또한 for 루프에 temp.length이 포함되어 있기 때문에 해당 메서드의 try-catch 블록은 항상 NullPointerException을 포착합니다. 임시 변수는 getWorkRecords() 메서드의 반환을 포함해야하는 변수입니다.

주요 문제는 여기에 내가 getWorkRecords() 또는 WorkItem 클래스의 다른 getter 메소드에서 아무것도 반환 할 수없는 생각이다을 요약합니다. 내 코드의 printWorkRecords() 메서드가 내 쿼리의 모든 WorkItem 개체의 URI를 성공적으로 인쇄하기 때문에 getUri() 메서드가 성공적으로 실행되기 때문에 문제가 해결되지 않습니다.

이전에이 문제가 발생한 Polarion 전문가가 있습니까? 아무도 내가 뭘 잘못하고 있는지 알아? 상황에 따라 버그라고 생각하는 경향이 있습니다.

답변

1

나는이 문제를 해결하기 위해 방금 문제를 해결했습니다.

queryWorkItems() 메서드를 호출 한 것을 보면 쿼리 매개 변수 다음에 두 개의 null 매개 변수가 있음을 알 수 있습니다. 첫 번째 매개 변수는 반환 된 작업 항목을 정렬하는 방법을 지정하는 매개 변수입니다 (현재로서는 중요하지 않음). 두 번째는 WorkItems과 함께 반환 할 WorkItem 필드를 지정하는 데 사용되는 fields이라는 String 배열입니다. 그들 자신. 분명히, 내가 그랬듯이 null으로 설정하면 기본적으로 URI 만 반환됩니다. author, workrecord 및 type과 같은 다른 것들은 배열을 String 배열에 배치하고 메서드를 호출 할 때 해당 배열을 전달해야합니다.

관련 문제