【问题标题】:How do I see the message for a http-response-code 406 exception如何查看 http-response-code 406 异常的消息
【发布时间】:2013-08-09 18:25:46
【问题描述】:

我正在使用 ColdFusion,但我认为这更像是一个 java 问题。我正在向 Web 服务发布 xml 帖子。当我尝试读取响应时,我从以下行收到带有 http 响应代码 406 的异常:

var inputStreamReader = CreateObject("java","java.io.InputStreamReader").init(variables.connection.getInputStream());

Web 服务文档对 406 说明如下:“如果请求已处理但包含无效或不充分的信息以完成 API 方法,则将返回 406。将返回一条描述错误的消息。”

我的问题是,我如何检索或以其他方式查看邮件内容包含的内容?

【问题讨论】:

  • 您如何发送 xml 帖子?我们能看到那个代码吗?你用的是cfhttp吗?如果是这样,cfhttp.fileContent 会得到响应。
  • 同上。这将有助于查看代码。具体来说,variables.connection 是什么类型的对象?另外,您可以发布完整的异常消息/堆栈跟踪吗?

标签: java coldfusion


【解决方案1】:

我们需要查看更多代码以及异常。但是,基于您使用getInputStream 的事实,我猜您使用的是HTTPURLConnection,而不是cfhttp。如果是这样,您需要在处理响应之前检查返回的状态码。原因如下:

如果请求成功,则将响应写入input stream。否则,它将被写入error stream(这可能是您的错误“消息”结束的地方)。所以你需要添加一些逻辑,根据返回的 HTTP 状态码读取相应的流。

从您的 cmets 中,我假设您已经知道如何读取 InputStream 并返回一个字符串。只需将该逻辑包装在一个名为 streamToString 的自定义函数中,然后您就可以像这样重复使用它:

  // extract status code and message
  variables.result.code = variables.connection.getResponseCode();
  variables.result.message = variables.connection.getResponseMessage();

  // Simplified example, adjust as needed
  if (variables.result.code == variables.connection.HTTP_OK) {
      variables.result.text = streamToString(variables.connection.getInputStream());
  }
  else {
      variables.result.error = streamToString(variables.connection.getErrorStream());
  }

  // show results
  WriteDump(variables.result);

【讨论】:

  • 完美,这正是我所需要的。我正在使用路标 oauth 库,它适用于 HTTPURLConnection。如果有人想看,我可以多发一点,但这回答了我的问题。谢谢!
  • 啊,好吧。我怀疑有类似的事情,但不是肯定的。 (因此“猜测”免责声明 ;-) 无论如何,很高兴它有所帮助。
猜你喜欢
  • 2017-01-04
  • 2013-10-10
  • 1970-01-01
  • 1970-01-01
  • 2018-11-06
  • 2011-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多