2011-12-20 18 views
0

私はJBoss GuvnorパッケージをREST APIを使用して移行するアプリケーションを作成しています。基本的には、REST GETリクエストを通じてすべてのアセットを読み取り、PUT/POSTリクエストを使用して別のGuvnorに書き込みます。ここでPOSTメソッドでJava HttpURLConnectionsがHttp 500エラーを返すのはなぜですか?

は、投稿を行い、私の方法の少し抜粋です:それは作品

HttpURLConnection conn = (HttpURLConnection) path.getURL() 
    .openConnection(); 
conn.setRequestMethod("POST"); 
conn.setRequestProperty("Content-type", path.getType().getAcceptMIME()); 
conn.setDoOutput(true); 
conn.setDoInput(true); 

conn.setRequestProperty("Authorization", "Basic " + authString); 

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
     conn.getOutputStream())); 
bw.write(content); 
bw.flush(); 

conn.connect(); 

、すべての資産が移行されているが、毎回conn.getResponseCode()は500とconn.getResponseMessage()戻り内部サーバーエラーを返します。

私はJavaでHTTP要求を処理するのが新しく、これが起こっている必要があるのか​​どうか、なぜそれが起こっているのか、それが私のスニペットの何らかの障害に起因するのか、それともサーバー側(Guvnors )バグ?

+0

すでに 'conn.getOutputStream()'を呼び出した後に 'conn.connect()'を呼び出す必要はありません。いつ、どこで、レスポンスコードとレスポンスメッセージをテストしていますか?私はあなたの質問の例を見ることができません。 –

+0

レスポンスコード/メッセージは後で呼ばれますが、それは実際には問題ありません.Wiresharkを聞いていてもHTTP 500を参照してください。 – r3mbol

答えて

1

コードに間違いはありません。 500応答とは、サーバーが内部問題に遭遇したことを意味します。あなたの要求に珍しい何かが問題を引き起こしている可能性もありますが、それはまったく無関係なものかもしれません。

私はあなたが次のようにしますことを示唆している:

  • 失敗した要求と一致するエラー/例外のサーバー側のログを確認してください。

  • HttpUrlConnectionのエラーストリームを開いて読み取り、ログに記録します。それはより有益なエラーメッセージを持っている可能性があります。

+0

あなたは正しいです。サーバー側のログを確認した後、GuvnorがPOSTされた後、資産が例外を投げていた(このGuvnorに存在しない資産に割り当てられたカテゴリ名のため)。 ありがとうございます。 – r3mbol

1

お客様のクライアント側のコードはOKです。標準のHttpUrlConnectionは、レスポンスコードが2xxシリーズでないときは、入力ストリームからの読み取りを試みるときに常に例外をスローします。応答コード500は、サーバー側で予期しないエラーが発生したことを意味します。サーバーログを参照してください。あなたはそこに原因を見つけるでしょう。

幸運。

+0

サーバーログで問題が明らかになりました。 – r3mbol

関連する問題