2011-01-07 16 views
3

は、我々はしても応答で威厳したくないWebサービス要求があるとします。Java Webサービスでリクエストに応答しないようにする方法を教えてください。

@WebMethod(operationName = "doSomethingForNicePeopleOnly") 
public String doSomethingForNicePeopleOnly(@WebParam(name="username") String user) { 
    if (userIsNice(user)) { 
     return "something nice"; 
    } else { 
     // I'd prefer not to return anything at all, not even a 404... 
    } 
} 

指定されたJava Webサービス要求に応答しないための最高の技術とは何ですか?

答えて

3

何も返さない理由は何ですか?これは、サーバーの時間とユーザーの両方を無駄にするだけで、接続がタイムアウトするまで開いたままにしておくだけです。

Java Webサービスでこれがどれほど簡単かはわかりませんが、202(「受け入れられましたが処理が完了しておらず、後で拒否される可能性があります)または204(「応答なし」) ?

+0

ありがとうございます。基本的な考え方は、プログラムで断線をシミュレートすることです。私にとって最もきれいな204の音が、これが要件を満たしているかどうかを確認します。 –

+0

ああ、切断しようとしているのであれば、ソケットを閉じてみてください。 (私はJava Webサービスについては何も知らないが、基本的な 'Socket'クラスへのアクセス権があれば、あなた自身で閉じることができますか?) –

+0

ええ、それがポイントです。 Java Webサービスを扱う際には、私から抽象化されていると思います。私はここにいくつかのショートカットがあることを望んでいます。私が望むのは、正確にそれを行い、下にあるソケットに電話を切るよう伝えることです。 –

1

私はここにいくつかの選択肢を考えることができると思います。

戻り役に立たない応答(例えば、空の文字列):

} else { 
    return ""; 
} 

または例外をスロー:

} else { 
    throw new Exception("whatevah...."); 
} 

またはいくつかの遅延を試してみてください#1または#2に続く戦術:

} else { 
    Thread.sleep(90000); // 90 seconds! 
    return ""; 
} 

また、ここでは4番目のオプションとして、HTTPコード403-Forbiddenが適切かもしれません。

+0

+1、私は実際には現時点で遅延を使用しています。欠点は、クライアントが既知のタイムアウトを持たなければならないことです。 –

関連する問題