2013-02-13 4 views
1

У меня есть веб-сервис на оси2, и в этом классе функция запускает поток, другая функция проверяет, продолжает ли поток, но когда я делаю запрос для функции, которая проверяет поток, все еще выполняется , я получаю эту ошибку:nullpointerexception axis2 webservice

org.apache.axis2.AxisFault: произошло исключение при попытке вызова метода службы isTaskRunning в org.apache.axis2.util.Utils.getInboundFaultFromMessageContext (Utils.java:531) в орг .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) на be.kdg.cosys.thesis.AllToPublicScheduler.executeTask (AllToPublicScheduler.java:158) на be.kdg.cosys.thesis.AllToPublicScheduler.incomingApplication (AllToPublicScheduler.java:106) на be.kdg. cosys.thesis.ParserToScheduler.run (ParserToScheduler.java:111) на java.lang.Thread.run (Unknown Source)

Вот это класс вебсервис:

класс Executor общественности {

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

}

На сервере веб-сервиса я получаю nullpointerexeception (журнал Catalina)

Может кто-нибудь мне помочь?

Йорик

ответ

0

Да, вы получите исключения нулевого указателя - Поскольку метод Web-сервис не будет называться на экземпляре класса Same который начал тему. Поскольку переменная taskThread будет пустой, а в методе isTaskRunning() вызывает метод на нулевом объекте, это вызывает NullpointerException

В идеале, если вам необходимо опросить Thread с помощью веб-сервиса, вы должны использовать запугивающий медиа, в котором указывается состояние потока. устрашающей может быть таблица базы данных, в которой хранится статус нити

+0

Спасибо за ваш ответ. Разве это не так, если я назову 2 функции на том же ExecutorStub? Yorick –

+0

@YorickDeBock - № Класс веб-служб на стороне сервера можно рассматривать как сервлеты. Каждый вызов выполняется в отдельном потоке. См. Ссылку: http://www.coderanch.com/t/568548/Web-Services/java/multiple-users-call-web-services – user1428716

Смежные вопросы