将动态XML / JSON内容与静态标记化的负载进行比较,并检索标记值

时间:2018-07-03 04:23:09

标签: java json xml parsing text-parsing

我正在实现模拟http响应服务器。服务器必须验证输入的请求URL和有效负载,然后将请求与配置的响应进行匹配,然后将其返回给调用方。

我需要帮助来验证带有静态标记化有效负载的http请求动态内容有效负载。 因此,当我收到请求有效载荷时说json时,将其与配置的标记化内容进行比较,如果不匹配则返回失败。

例如,我正在使用以下代码对请求网址进行同样的操作。

import java.util.HashMap;
import java.util.Map;
import org.springframework.web.util.UriComponentsBuilder;
import org.springframework.web.util.UriTemplate;


    public static void main(String[] args) {
        //template url
        String template = "/name/{name}/age/{age}";
        UriTemplate uriTemplate = new UriTemplate(template);

        //actual url
        String uri = "/name/Bob/age/47";
        Map<String, String> parameters = new HashMap<>();

        //returns Map
        System.out.println("Dynamic Content Map: " + uriTemplate.match(uri));
        System.out.println("URL Matched: " +uriTemplate.matches(uri));

        parameters.put("name", "Foo");
        parameters.put("age", "37");

        UriComponentsBuilder builder = UriComponentsBuilder.fromPath(template);
        System.out.println(builder.buildAndExpand(parameters).toUriString());

    }

输出:

Dynamic Content: {name=Bob, age=47}
URL Matched: true
/name/Foo/age/37

因此,如果您看一下这段代码,UriTemplate能够比较配置了动态值(Bob / 47)的静态内容(名称/年龄)。

我想在请求有效负载中执行相同的比较。现在的挑战是

  1. 内容可以是XML或JSON,后面还有其他内容。
  2. 内容可能在
  3. 之间包含空格
  4. 顺序将不同或XML名称空间不同
  5. 它将包含要与静态比较的动态变量值
  6. 如何从有效载荷中检索动态变量值

我知道我可以使用XML和JSON解析器进行比较,但是如何将静态变量与内容内部的动态变量进行比较并检索呢?

例如e)静态{"name" : "$name", "age" : "$age"}

例如e)动态{"name" : "Bob", "age" : 47}

有没有我可以传递静态和动态内容的工具,并且我将获得isMatched并在如上所示的uriTemplate示例的地图中检索动态常量?

在比较和提取动态字段方面给我一些提示/想法吗?

1 个答案:

答案 0 :(得分:3)

XML和JSON是结构的序列化表示。

您引用的动态内容实际上是该结构的一个实例。

我认为您正在寻找的是XML的XSD / DTD [1](定义结构的类型)和JSON的json-schema [3]。

这里有多种策略。取决于要验证的服务。您可以将json转换为xml,并使用相同的XSD来验证这两种序列化方法。有多种框架可以帮助您实现这一目标。但是,第一步是编写这些模式(对于XML为XSD / DTD,对于JSON为json-schema)。