2011-12-20 91 views
0

我正在编写一个应用程序,它将使用其REST API来迁移JBoss Guvnor软件包。基本上它通过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()'。何时何地测试响应代码和响应消息?我在你的问题中看不到一个例子。 – 2011-12-20 13:13:25

+0

响应代码/消息后被调用,但这并不重要,即使没有这些,并与wireshark听我看到HTTP 500 – r3mbol 2011-12-20 13:21:13

回答

1

你的代码没有任何明显的错误。 500响应意味着(应该表示)服务器遇到内部问题。有关您的请求的异常情况可能会引发问题,但也可能是完全不相关的。

我建议你做到以下几点:错误/与失效的要求相一致的例外

  • 检查服务器端的日志。

  • 打开,读取并记录HttpUrlConnection的错误流。它可能有更多的信息错误信息。

+0

你是对的。在检查服务器端日志后,事实证明,Guvnor在发布资产后抛出异常(由于分类名称分配给此Guvnor中不存在的资产)。 谢谢。 – r3mbol 2011-12-20 13:38:55

1

您的客户端代码看起来不错。当响应代码不是2xx系列时,标准HttpUrlConnection在尝试从输入流读取时总是抛出异常。响应代码500意味着服务器端发生意外错误。请参阅服务器日志。你会在那里找到原因。

祝你好运。

+0

是的,服务器日志显示问题:) – r3mbol 2011-12-20 13:39:41

相关问题