我正在开发一个程序,用于查询和打印来自本地传输机构的开放数据,该数据以XML响应的形式返回。
通常情况下,当计划在接下来的几个小时(以及其他典型情况下)运行总线时,页面生成的XML响应由java.net.URLConnection.getInputStream()
功能正确处理,我可以打印之后的个人结果。
问题是当总线未运行时,或者在将查询发送到传输机构的Web服务器后,我的查询出现了一些其他问题。当权威机构开发他们的服务时,他们提出了自己独特的错误响应代码,这些代码也作为XML发送。例如,其中一条错误消息可能如下所示:
<Error xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Code>3005</Code>
<Message>Sorry, no stop estimates found for given values.</Message>
</Error>
(在这种情况下,我从运输当局收到的所有代码和类似内容。)
但是,似乎URLConnection.getInputStream()
及其某些兄弟姐妹无法将此自定义代码解释为我可以处理并打印为错误消息的“有效”响应。相反,他们给我一个更通用的HTTP/1.1 404 Not Found
错误。此问题级联到我的程序中,然后打印出指向违规输入流的java.io.FileNotFoundException
错误。
因此我的问题是双重的:
1。有没有办法使用Java中提供的插件检索,解析和打印Web服务发送的自定义XML格式的错误代码?
2。如果上述情况不可行,我应该使用或开发哪些其他工具来处理所述的自定义代码?
答案 0 :(得分:0)
URLConnection
不能胜任REST的工作,如果您使用getInputStream
,我几乎可以肯定您没有正确处理字符编码。
查看Spring的RestTemplate - 它非常易于使用(就像URLConnection
一样简单),功能强大且灵活。您需要更改ResponseErrorHandler
,因为默认值会在404上引发异常,但看起来您希望它继续并在响应中解析XML。