2013-02-13 83 views
1

我在axis2上有一個webservice,並且在這個類中有一個函數啓動一個線程,另一個函數檢查線程是否仍在運行,但是當我做一個請求時,線程檢查的函數仍在運行,我得到這個錯誤:nullpointerexception axis2 webservice

org.apache.axis2.AxisFault:試圖在組織在org.apache.axis2.util.Utils.getInboundFaultFromMessageContext(Utils.java:531) 來調用服務方法isTaskRunning 發生異常.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:375) at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:421) at org.apache。 axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:229) at org.apache.axis2.client.OperationClient.execute(OperationClient.java:165) at be.kdg.cosys.thesis.ExecutorStub.isTaskRunning(ExecutorStub。 java:487) at be.kdg.cosys.thesis.AllToPublicScheduler.executeTask(AllToPublicScheduler.java:158) at be.kdg.cosys.thesis.AllToPublicScheduler.incomingApplication(AllToPublicScheduler.java:106) at be.kdg。 cosys.thesis.ParserToScheduler.run(ParserToScheduler.java:111) 在java.lang.Thread.run(來源不明)

這裏是WebService類:

公共類執行人{

private Task task = null; 
private long startTime = 0; 
private long runTime = 0; 
private Thread taskThread=null; 

public void execute(byte[] object){ 
    ObjectInputStream in = null; 
    try { 
     in = new ObjectInputStream(new ByteArrayInputStream(object)); 
     task = (Task) in.readObject(); 
     in.close(); 
    } catch (IOException | ClassNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    runTime = task.getRunTime(); 
    startTime = System.currentTimeMillis(); 
    taskThread=new Thread(task); 
    taskThread.start(); 
} 
public long timeToFinish() 
{ 
    return runTime-(System.currentTimeMillis()-startTime); 
} 
public boolean isTaskRunning() 
{ 
    return taskThread.isAlive();   
} 
public byte[] getTask() 
{ 
    byte[] ser=null; 
    ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
    ObjectOutput out = null; 
    try { 
     out = new ObjectOutputStream(bos); 
     out.writeObject(task); 
     ser = bos.toByteArray(); 
     out.close(); 
     bos.close(); 
    } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
    } 
    return ser; 
} 

}

在Web服務的服務器,我收到了nullpointerexeception(日誌卡特琳娜的)

誰能幫助我?

約裏克

回答

0

是的,你會得到一個空指針異常 - 因爲Web服務的方法,不會對賴以起家的主題相同的類實例調用。由於變量taskThread將爲null,並且在方法isTaskRunning()調用空對象上的方法時,它會導致NullpointerException。理想情況下,如果需要使用Web服務輪詢Thread,則應該使用恐嚇介紹線程狀態的媒體。恐嚇可以是存儲線程狀態的數據庫表

+0

感謝您的回覆。如果我在同一個ExecutorStub上調用2個函數,它會不同嗎? Yorick – 2013-02-14 15:03:30

+0

@YorickDeBock - 編號服務器端Web服務類可以被視爲Servlets。每個調用都在一個單獨的線程上完成。請參閱鏈接:http://www.coderanch.com/t/568548/Web-Services/java/multiple-users-call-web-services – user1428716 2013-02-14 16:12:55

相關問題