3

我正在开发一个程序,该程序查询并打印出来自当地交通当局的开放数据,这些数据以 XML 响应的形式返回。

通常,当有巴士计划在接下来的几个小时内运行(以及其他典型情况)时,页面生成的 XML 响应会被java.net.URLConnection.getInputStream()函数正确处理,之后我可以打印单独的结果。

问题是当公共汽车没有运行时,或者当我的查询被发送到交通当局的网络服务器后出现其他问题时。当当局开发他们的服务时,他们想出了自己独特的错误响应代码,这些代码也以 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. 如果上述方法不可行,我应该使用或开发哪些其他工具来处理所描述的此类自定义代码?

4

1 回答 1

0

URLConnection isn't up to the job of REST, in my opinion, and if you're using getInputStream, I'm almost certain you're not handling character encoding correctly.

Check out Spring's RestTemplate - it's really easy to use (just as easy as URLConnection), powerful and flexible. You will need to change the ResponseErrorHandler, because the default one will throw an exception on 404, but it looks like you want it to carry on and parse the XML in the response.

于 2012-12-02T18:06:40.357 回答