java.lang.IllegalStateException:このリクエストに対してgetReader()がすでに呼び出されています

ロック:

サーブレットにロギングを追加したいので、リクエストを表示してサーブレットに移動するフィルターを作成しました。しかし、残念ながら例外を発見しました:

java.lang.IllegalStateException: getReader() has already been called for this request
    at org.apache.catalina.connector.Request.getInputStream(Request.java:948)
    at org.apache.catalina.connector.RequestFacade.getInputStream(RequestFacade.java:338)
    at com.noelios.restlet.ext.servlet.ServletCall.getRequestEntityStream(ServletCall.java:190)

したがって、この問題を解決するためにWrapperで解決策を見つけましたが、機能しません。コードで他に何を使用/変更できますか?何か案は?

[MyHttpServletRequestWrapper]

public class MyHttpServletRequestWrapper extends HttpServletRequestWrapper
{
    public MyHttpServletRequestWrapper(HttpServletRequest request)
    {
        super(request);
    }

    private String getBodyAsString()
    {
        StringBuffer buff = new StringBuffer();
        buff.append(" BODY_DATA START [ ");
        char[] charArr = new char[getContentLength()];
        try
        {
            BufferedReader reader = new BufferedReader(getReader());
            reader.read(charArr, 0, charArr.length);
            reader.close();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        buff.append(charArr);
        buff.append(" ] BODY_DATA END ");
        return buff.toString();
    }

    public String toString()
    {
        return getBodyAsString();
    }
}

[MyFilter]

public class MyFilterimplements Filter
{
    @Override
    public void init(FilterConfig filterConfig) throws ServletException
    {
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
    {
        final HttpServletRequest httpServletRequest = (HttpServletRequest) request;
        final HttpServletResponse httpServletResponse = (HttpServletResponse) response;

        final HttpServletRequestWrapper requestWrapper = new MyHttpServletRequestWrapper(httpServletRequest);
        final String requestBody = requestWrapper.toString();

        chain.doFilter(request, response);
    }
}
Suresh Kumar:

RestletフレームワークがgetRequestEntityStream()Requestオブジェクトを呼び出したように見えます。このオブジェクトは次に呼び出されるgetInputStream()ためgetReader()、要求を呼び出すとスローされIllegalStateExceptionます。getReader()およびgetInputStream()のサーブレットAPIドキュメントには、次のように記載されています。

 public java.io.BufferedReader getReader()
    ...
    ...
Throws:
    java.lang.IllegalStateException - if getInputStream() method has been called on this request

 public ServletInputStream getInputStream()
    ...
    ...
    Throws:
    java.lang.IllegalStateException - if the getReader() method has already been called for this request

ドキュメントから、RequestオブジェクトでgetReader()とgetInputStream()の両方を呼び出すことはできないようです。ラッパーgetInputStream()ではなく使用することをお勧めしますgetReader()

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

java.lang.IllegalStateException:現在のリクエストに対してgetReader()がすでに呼び出された後は、getInputStream()を呼び出せません

分類Dev

例外が発生します:java.lang.IllegalStateException:getOutputStream()はすでにこの応答に対して呼び出されています

分類Dev

REST - java.lang.IllegalStateException: getOutputStream() はこの応答に対して既に呼び出されています

分類Dev

java.lang.IllegalStateException:BeanFactoryが初期化されていないか、すでに閉じられています-ApplicationContextを介してBeanにアクセスする前に 'refresh'を呼び出してください

分類Dev

フィルターチェーンに関するGlassFishの問題:java.lang.IllegalStateException:PWC3990:getWriter()はこの応答に対してすでに呼び出されています

分類Dev

java.lang.IllegalStateException: RecyclerView がレイアウトを計算している間、または notifydatasetChanged() 時にスクロールしている間は、このメソッドを呼び出すことはできません

分類Dev

Android sdk26以降-カスタム配列オブジェクトに対して保留中の例外java.lang.NoSuchFieldErrorでJNIGetObjectFieldが呼び出されました

分類Dev

java.lang.IllegalStateException:RecyclerViewがレイアウトを計算している間、またはスクロールしている間は、このメソッドを呼び出すことはできません

分類Dev

java.lang.Runtime.getRuntimeを使用してMatlabでPythonスクリプトの複数のインスタンスを呼び出すことが機能しない

分類Dev

「java.lang.UnsupportedOperationException:サーブレット3.0仕様のセクション4.4では、このメソッドの呼び出しが許可されていません」のようなエラーが発生する

分類Dev

mvnテストのエラー:java.lang.IllegalStateException:停止したSparkContextでメソッドを呼び出すことができません

分類Dev

java.lang.IllegalStateException:指定された子にはすでに親があります。最初に子の親でremoveView()を呼び出す必要があります

分類Dev

スレッド「main」の例外java.lang.IllegalStateException:ストリームはすでに操作されているか閉じられています

分類Dev

このjava.lang.IllegalStateExceptionに直面しています:Parcelableを実装するModelクラスでは、バンドルの長さが4:9で整列されていません

分類Dev

cglibが、Intuit Partner Platform JavaSDKでのクエリ生成中にjava.lang.VerifyErrorを引き起こしています

分類Dev

トランザクション用にJPAEntityManagerを開くことができませんでした。ネストされた例外はjava.lang.IllegalStateExceptionです:EntityManagerFactoryは閉じられています

分類Dev

java.lang.IllegalStateException:方向の変更時にすでに閉じられているオブジェクトを再度開こうとします

分類Dev

init メソッドの呼び出しに失敗しました。ネストされた例外は java.lang.IllegalArgumentException です: 'sessionFactory' または 'hibernateTemplate' が必要です

分類Dev

initメソッドの呼び出しに失敗しました。ネストされた例外はjava.lang.IllegalArgumentExceptionです:メソッドpublicabstractのクエリの検証に失敗しました

分類Dev

java.lang.IllegalStateException:リクエストデータはすでに読み取られていますCQ5、AEM

分類Dev

RxAndroid-java.lang.IllegalStateException:別の戦略がすでに登録されています

分類Dev

java.lang.IllegalStateException:setDoOutputですでに接続されています

分類Dev

java.lang.IllegalStateException:setDoOutputですでに接続されています

分類Dev

java.lang.IllegalStateException:FragmentManagerがホストに接続されていません

分類Dev

ブラウザの呼び出し時に、java.lang.NullPointerExceptionがmavenプロジェクトで発生しているのはなぜですか?

分類Dev

リストにヌルロンボク:java.lang.UnsupportedOperationExceptionが:によって引き起こされます

分類Dev

\エラーが表示されます。java.lang.NullPointerExceptionが:NULLオブジェクト参照に呼び出しインターフェース方法「java.lang.Objectのjava.util.List.get(INT)」への試み

分類Dev

原因:java.lang.IllegalStateException:ParsePluginsはすでに初期化されています

分類Dev

java.lang.IllegalStateException:すでに接続されています(Discord JDA)

Related 関連記事

  1. 1

    java.lang.IllegalStateException:現在のリクエストに対してgetReader()がすでに呼び出された後は、getInputStream()を呼び出せません

  2. 2

    例外が発生します:java.lang.IllegalStateException:getOutputStream()はすでにこの応答に対して呼び出されています

  3. 3

    REST - java.lang.IllegalStateException: getOutputStream() はこの応答に対して既に呼び出されています

  4. 4

    java.lang.IllegalStateException:BeanFactoryが初期化されていないか、すでに閉じられています-ApplicationContextを介してBeanにアクセスする前に 'refresh'を呼び出してください

  5. 5

    フィルターチェーンに関するGlassFishの問題:java.lang.IllegalStateException:PWC3990:getWriter()はこの応答に対してすでに呼び出されています

  6. 6

    java.lang.IllegalStateException: RecyclerView がレイアウトを計算している間、または notifydatasetChanged() 時にスクロールしている間は、このメソッドを呼び出すことはできません

  7. 7

    Android sdk26以降-カスタム配列オブジェクトに対して保留中の例外java.lang.NoSuchFieldErrorでJNIGetObjectFieldが呼び出されました

  8. 8

    java.lang.IllegalStateException:RecyclerViewがレイアウトを計算している間、またはスクロールしている間は、このメソッドを呼び出すことはできません

  9. 9

    java.lang.Runtime.getRuntimeを使用してMatlabでPythonスクリプトの複数のインスタンスを呼び出すことが機能しない

  10. 10

    「java.lang.UnsupportedOperationException:サーブレット3.0仕様のセクション4.4では、このメソッドの呼び出しが許可されていません」のようなエラーが発生する

  11. 11

    mvnテストのエラー:java.lang.IllegalStateException:停止したSparkContextでメソッドを呼び出すことができません

  12. 12

    java.lang.IllegalStateException:指定された子にはすでに親があります。最初に子の親でremoveView()を呼び出す必要があります

  13. 13

    スレッド「main」の例外java.lang.IllegalStateException:ストリームはすでに操作されているか閉じられています

  14. 14

    このjava.lang.IllegalStateExceptionに直面しています:Parcelableを実装するModelクラスでは、バンドルの長さが4:9で整列されていません

  15. 15

    cglibが、Intuit Partner Platform JavaSDKでのクエリ生成中にjava.lang.VerifyErrorを引き起こしています

  16. 16

    トランザクション用にJPAEntityManagerを開くことができませんでした。ネストされた例外はjava.lang.IllegalStateExceptionです:EntityManagerFactoryは閉じられています

  17. 17

    java.lang.IllegalStateException:方向の変更時にすでに閉じられているオブジェクトを再度開こうとします

  18. 18

    init メソッドの呼び出しに失敗しました。ネストされた例外は java.lang.IllegalArgumentException です: 'sessionFactory' または 'hibernateTemplate' が必要です

  19. 19

    initメソッドの呼び出しに失敗しました。ネストされた例外はjava.lang.IllegalArgumentExceptionです:メソッドpublicabstractのクエリの検証に失敗しました

  20. 20

    java.lang.IllegalStateException:リクエストデータはすでに読み取られていますCQ5、AEM

  21. 21

    RxAndroid-java.lang.IllegalStateException:別の戦略がすでに登録されています

  22. 22

    java.lang.IllegalStateException:setDoOutputですでに接続されています

  23. 23

    java.lang.IllegalStateException:setDoOutputですでに接続されています

  24. 24

    java.lang.IllegalStateException:FragmentManagerがホストに接続されていません

  25. 25

    ブラウザの呼び出し時に、java.lang.NullPointerExceptionがmavenプロジェクトで発生しているのはなぜですか?

  26. 26

    リストにヌルロンボク:java.lang.UnsupportedOperationExceptionが:によって引き起こされます

  27. 27

    \エラーが表示されます。java.lang.NullPointerExceptionが:NULLオブジェクト参照に呼び出しインターフェース方法「java.lang.Objectのjava.util.List.get(INT)」への試み

  28. 28

    原因:java.lang.IllegalStateException:ParsePluginsはすでに初期化されています

  29. 29

    java.lang.IllegalStateException:すでに接続されています(Discord JDA)

ホットタグ

アーカイブ