【发布时间】:2013-08-19 16:23:49
【问题描述】:
我已经在工作中运行了 3 年的应用程序,但突然之间它决定失败。我无法确定是否涉及网络问题或完全不同的问题。
堆栈跟踪:
java.lang.NullPointerException
at sun.net.www.protocol.http.NegotiateAuthentication.isSupported(NegotiateAuthentication.java:99)
at sun.net.www.protocol.http.AuthenticationHeader.parse(AuthenticationHeader.java:180)
at sun.net.www.protocol.http.AuthenticationHeader.<init>(AuthenticationHeader.java:126)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1374)
at domain.ActivationSMSReceiverMain.processLogFromUrl(SMSSys.java:327)
at domain.ActivationSMSReceiverMain.<init>(SMSSys.java:45)
at domain.ActivationSMSReceiverMain.main(SMSSys.java:477)
代码示例:
URL url = new URL(uri);
HttpURLConnection uc = (HttpURLConnection) url.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(uc.getInputStream()));
我已确保 uri 格式正确 (http://www.blah/?something)。
响应头:
HTTP 200 No Error
Content-Type: text/html
Cache-Control: private
Content-Length: 127364
X-Powered-By: ASP.NET
Server: Microsoft-IIS/6.0
Date: Sat, 17 Aug 2013 10:31:25 GMT
【问题讨论】:
-
看起来有些事情发生了变化。基本上有 3 件事可以改变: 1. 引发异常的代码。 2. 调用引发异常的代码的代码。 3. 或者某些情况导致数据不同导致异常。案例 3 将是一个直到现在才被发现的错误。堆栈跟踪中的哪些代码是您或您的组织编写的?最近有变化吗?能否调试并详细检查分析情况(尤其是传给HTTP API的参数)?
-
您是否直接从您的代码中调用包“sun.net.*”中的代码?
-
好吧。 6个月前JDK已更新到最新,但从那个时期到现在都没有问题。我已经联系了我们从中获取这些资源的第二方,他们没有改变任何东西,甚至没有在他们的服务器上进行更新,在 1000 个客户中,我们是唯一一个就问题与他们联系过的客户,所以我假设他们在告诉真相。最后三行是我写的。我可以毫无问题地从同一服务器的任何浏览器浏览数据。
-
我没有:
import java.net.HttpURLConnection; import java.net.URL; -
如果您没有任何其他嫌疑人,我真的会尝试调试它。让我们假设
java.net和sun.net代码没有错误。如果这是真的并且您正在联系的服务器也正常工作,那么对java.net代码的调用一定是错误的。NullPointerException对我来说似乎传递给该 API 的数据/参数有问题。我会通过使用调试器或日志输出来详细查看。即使问题的根源在其他地方,这也可能会让您走上正轨。
标签: java http inputstream