1

我在axis2上有一个webservice,在这个类中,一个函数启动一个线程,另一个函数检查线程是否仍在运行,但是当我请求检查线程是否仍在运行的函数时,我收到此错误:

org.apache.axis2.AxisFault:尝试在 org.apache.axis2.util.Utils.getInboundFaultFromMessageContext(Utils.java:531) 在 org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation) 调用服务方法 isTaskRunning 时发生异常.java:375) 在 org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:421) 在 org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:229) 在 org.apache.axis2。 client.OperationClient.execute(OperationClient.java:165) 在 be.kdg.cosys.thesis.ExecutorStub.isTaskRunning(ExecutorStub.java:487) 在 be.kdg.cosys.thesis.AllToPublicScheduler.executeTask(AllToPublicScheduler.java:158)在 be.kdg.cosys 的 be.kdg.cosys.thesis.AllToPublicScheduler.incomingApplication(AllToPublicScheduler.java:106)。论文.ParserToScheduler.run(ParserToScheduler.java:111) at java.lang.Thread.run(Unknown Source)

这是网络服务类:

公共类执行器{

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 的日志)

谁能帮我?

约里克

4

1 回答 1

0

是的,你会得到一个空指针异常——因为不会在启动线程的同一个类实例上调用 Web 服务方法。由于变量 taskThread 将为 null ,并且在方法 isTaskRunning() 中调用了 null 对象上的方法,因此会导致 NullpointerException

理想情况下,如果您需要使用 web 服务轮询线程,您应该使用说明线程状态的恐吓媒体。恐吓可以是存储线程状态的数据库表

于 2013-02-13T20:04:43.920 回答