---
title: "处理自动化数据集成过程中的HTTP错误"
date: "2019-07-29"
categories: 
  - "data-integration"
  - "json"
  - "tools"
tags: 
  - "data-mapping"
  - "flowforce-server"
  - "http-testing"
  - "mapforce"
  - "mapforce-server"
  - "web-services"
description: 本文探讨了使用 MapForce 进行自动化数据集成时，处理 HTTP 错误的策略，旨在确保平稳的响应处理和有效的映射。
---
Status: #blog

Tags:  #data-mapping #flowforce-server #http-testing #mapforce #mapforce-server #web-services

Categories: [data-integration](/blog/zh/category/data-integration.md) 
# 处理自动化数据集成过程中的HTTP错误

数据分析师和其他专业人士经常需要通过自动执行数据映射来生成实时数据，这些映射会调用Web服务并保存结果。在自动执行过程中，重要的是要妥善处理任何意外的HTTP错误，而不是直接终止集成任务。

在之前的文章中，我们讨论了[如何对 REST Web 服务的响应进行条件处理](https://www.altova.com/blog/handling-http-errors/)，以处理 HTTP 错误，当时我们为正常响应和错误分别生成了不同的输出文件。现在，让我们来看一个针对机场状态示例的改进方案，该方案旨在生成一个单一的映射结果文件，其中包含请求的机场状态，或者包含错误描述。

![](/blog/images/airport_flip_700x335.jpg)

<!--more-->

一种生成单一结果的策略是，将我们在之前的 MapForce 映射中创建的每个输出文件视为一个中间组件，然后将这些组件映射到一个最终结果，该结果能够同时包含两种可能的结果。

然而，一个更简单的解决方案是将正常的响应结果和错误结果直接映射到一个输出组件中。

在发布之前的文章后，我们发现 FAA（美国联邦航空管理局）的机场状态 Web 服务在请求中如果机场代码字段为空，会返回一个错误。这会导致 HTTP 404 错误。不幸的是，即使在请求头中明确指定了 JSON 格式，该 Web 服务在出现错误时，仍然以 HTML 格式返回结果

![在数据映射中，指定 Web 服务 GET 请求的参数。](/blog/images/web-service-parameters.png)

我们可以通过直接解析响应中返回的状态码，从而避免处理 HTML 错误

![通过将响应中的状态码进行映射，来处理 HTTP 错误](/blog/images/status-code.png)

首先，我们需要在目标组件的 JSON 模式中添加一个字段，用于在出现任何错误时存储错误信息。这可以通过使用 XMLSpy 的 [图形化 JSON 模式编辑器](https://www.altova.com/zh/xmlspy-xml-editor#json_schema) 轻松实现：

[![图形化 JSON 模式编辑器](/blog/images/enhanced-json-schema.png)](enhanced-json-schema.png)

在“详细信息”辅助窗口中，"发生情况"被设置为“可选”，因为我们只会在此情况下生成此条目，即当发生HTTP错误时。

现在，我们可以根据任何大于 200 的 HTTP 状态码，构建自定义的错误消息

[![通过将自定义错误消息映射到结果中，来处理 HTTP 错误](/blog/images/error-msg-mapping.png)](error-msg-mapping.png)

上述的 `concat` 函数包含了状态码和机场代码，从而可以提供对任何错误的完整解释。

以下是经过修订的流程图，它清晰地展示了状态码如何与输出组件之间的对应关系：

[![处理 HTTP 错误，并为正常结果和错误结果提供不同的处理路径](/blog/images/revised-mapping-1030x576.png)](revised-mapping.png)

我们可以在地图的左上角编辑机场代码常量，然后点击主地图窗口下方的“输出”按钮，以测试不同的输入值。当有效的机场代码包含在发送给Web服务的GET请求中时，结果将是预期的JSON文件：

![处理 HTTP 错误——查看正常映射结果](/blog/images/normal-result.png)

我们可以通过在机场代码常量中发送一个空字符串来触发一个HTTP错误。这会生成一个JSON格式的错误响应文件：

![处理 HTTP 错误，并在结果中包含相应的消息](/blog/images/error-result.png)

请注意，我们的映射机制仍然为 HTTP 状态码 200-299 和 300-599 分别设置了不同的响应体。这确保了只有有效的 JSON 结果才会被映射并输出。以 HTML 格式接收到的错误结果不会被映射，而是直接被忽略。

![处理 HTTP 错误——以下是一个示例，展示了 Web 服务以 HTML 格式返回的错误结果](/blog/images/error-message-2.png)

### 自动化数据映射，并处理HTTP错误

在之前的文章中，我们描述了一个自动化场景，即我们需要定期检查并记录50个机场的状态。为了实现这个目标，我们需要调用Web服务，并将每个机场代码对应的结果进行关联。

最初的示例映射已经设计为便于自动化。MapForce Server 是一款跨平台的服务器工具，它可以[自动执行在 MapForce 中设计的各种数据映射](https://www.altova.com/zh/mapforce-server)。在映射的左上角，紧跟在字符串常量之后，有一个输入参数，可以在运行时提供给 MapForce Server 以进行执行。

![用于自动化地图生成过程的输入参数组件](/blog/images/automating-input.png)

在屏幕截图中的字符串“PHX”仅在MapForce中进行直接执行时才会使用。

FlowForce Server是一款高度可定制的服务器软件 [用于高效自动化企业级数据集成任务的工作流引擎](https://www.altova.com/zh/flowforceserver). FlowForce Server 的一个任务可以利用 MapForce Server 对每个所需的机场代码执行一次数据映射，并且可以按照预定的时间表重复执行。这个自动化任务会处理 HTTP 错误，通过生成结果文件来处理，这些文件会包含每个机场代码的最新状态，或者包含错误描述。

如果您是 MapForce 的新用户，请观看这个[视频介绍](https://youtu.be/a83na6G9FjI)，了解其强大的数据转换和集成功能。 您可以免费试用 MapForce、MapForce Server 和 FlowForce Server，试用期为[30天](https://www.altova.com/zh/download)。
