在Soap Request中传递动态过滤器参数

时间:2011-12-06 05:41:40

标签: java soap filter

我有一个soap请求返回User对象数组。现在我想添加过滤器参数,就像user'd一样,'har'和/或numberOfLogins介于10到20之间。基于这些参数,我构建一个查询并获得结果。但问题是我无法在SOAP请求中传递此动态数量的过滤器参数。我怎样才能做到这一点?我已经尝试使用Map来获取过滤器名称和值,但它没有用。还试过Array然后我无法决定我必须做什么过滤。


我们在网站上展示了this kind of form。其中所有字段都是可选字段,因此用户可以在全部或部分字段中输入值。我想获取用户在表单中输入的值,仅用于那些填充了值并且不希望在请求中使用其他参数的字段。所以这里n * umber的参数不固定*。因此,在不知道参数数量的情况下,我无法确定针对这种情况采用的方法参数。我应该采取哪种论点。我不能在参数中获取字符串数组,因为我还需要知道字段的名称(用户已输入值)和它的值。我曾尝试将Map作为参数,但没有用。

1 个答案:

答案 0 :(得分:0)

我认为您需要的是一种描述查询来过滤用户对象的方法。

您必须为此创建自定义类型,并在其中定义规则:

<xs:complexType name="query">
  <xs:sequence>
    .... equals rule ....
    .... between rule ....
    ....
  </xs:sequence>
</xs:complexType>

您需要字段的名称,字段的值/值以及适用的操作(用户名<equals>,登录次数<between>某事等等)。

所以请求看起来像这样:

<query>
  <equals>
    <field>username</field>
    <value>John Doe</value>
  </equals>
  ....
  <between>
    <field>logins</field>
    <startValue>10</startValue>
    <endValue>20</endValue>
  </between>
</query>

根据您的描述,简单的情况是“和”所有这些条件以获得您的过滤器。但另外你可以有“OR”组合,“NOT”等。

棘手的部分是为这种类型定义XML模式(对输入进行适当的验证)。如果这很麻烦,你可以在其中加上any element or any type的查询标记,但我强烈反对。

看一下the Query schema of Collaborative Application Markup Language (CAML)的灵感。希望这有帮助!