1

axis2にWebサービスがあり、このクラスで関数がスレッドを開始し、別の関数がスレッドがまだ実行されているかどうかを確認しますが、スレッドをチェックする関数のリクエストを実行すると、次のエラーが発生します。

org.apache.axis2.AxisFault:サービスメソッドisTaskRunning at org.apache.axis2.util.Utils.getInboundFaultFromMessageContext(Utils.java:531)at org.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)atorg.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) be.kdg.cosys.thesis.AllToPublicScheduler.incomingApplication(AllToPublicScheduler.java:106)atbe.kdg.cosys。thesis.ParserToScheduler.run(ParserToScheduler.java:111)at java.lang.Thread.run(Unknown Source)

Webサービスクラスは次のとおりです。

パブリッククラスエグゼキュータ{

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(catalinaのログ)を取得します

誰か助けてもらえますか?

ヨリック

4

1 に答える 1

0

はい、Null ポインター例外が発生します。これは、スレッドを開始した同じクラス インスタンスで Web サービス メソッドが呼び出されないためです。変数 taskThread は null になり、メソッド isTaskRunning() で null オブジェクトのメソッドを呼び出すため、NullpointerException が発生します。

理想的には、web-service を使用してスレッドをポーリングする必要がある場合は、スレッドのステータスを示す脅迫的なメディアを使用する必要があります。intimidatory は、スレッド ステータスを格納するデータベース テーブルにすることができます

于 2013-02-13T20:04:43.920 に答える