将外部格式转换为内部格式

时间:2016-05-04 15:42:19

标签: java web-services rest soap converter

我需要一个解决这个问题的方法:

我是服务提供商,我与之合作过几个服务客户。 每个服务客户端都以自己的格式向我发送请求,例如:

service client 1 fields are --> f1 , f2 , f3
service client 2 fields are --> f2 , f3 , f4
service client 3 fields are --> f3 , f7 , f8

他们可以添加或删除新字段或更改其当前格式,例如“服务客户端1”组合:

 f1+f2 ==> f12 and adds f5

或客户3:

 decomposes f7 ---> f1,f2

我需要一个内部格式,例如:

  f1,f2,f3,f4,f5,f6,f7,f8,f9

这种格式应该可以通过我可以通过xml配置文件进行更改来配置,因此当客户端发生更改时,我通过更改xml而不更改源代码来修复它。

我该怎么做?

1 个答案:

答案 0 :(得分:0)

简而言之,您需要一个API来移交您的外部消息以及“如何”文件,并且它会对其进行一些魔术并为您提供内部消息。让我们关注API的主要职责,即消息转换。正如您所提到的,它应该可以通过XML配置文件进行配置。我们需要一个可以称为“Field”的元素,它至少有一个属性叫做“name”。我在父元素中包含这些Field元素的集合。每个“Field”元素都在目标内部消息中指定一个字段。在Field元素中,我想添加另一个元素,它负责收集我想要的字段并对它们执行一个函数。以下是XML配置的示例:

<fields>
    <field name="aLong">
        <function name="add">
            <arg>
                <function name="readExternalField">
                    <arg>
                        f1
                    </arg>
                </function>
            </arg>
            <arg>
                <function name="readExternalField">
                    <arg>
                        f2
                    </arg>
                </function>
            </arg>
        </function>
    </field>
    <field name="aStr">
        <function name="getFromArray" index="0">
            <arg>
                <function name="splitStr" character=" ">
                    <arg>
                        <function name="readExternalField">
                            <arg>
                                f3
                            </arg>
                        </function>
                    </arg>
                </function>
            <arg>
        </function>
    </field>
</fields>

想象一下,我们有一个内部对象,至少有两个字段叫做“aLong”和“aStr”,外部对象至少有三个字段:“f1”,“f2”和“f3”。关键是我必须确保使用其返回类型可分配给目标字段的函数。函数“add”添加字段“f1”和“f2”的值,结果必须分配给字段“aLong”,函数“splitStr”分割“f3”字段并返回一个函数“getFromArray”的数组“得到数组的第一项作为结果。
我更喜欢使用JAXB API解组我的XML文件并轻松解析它,所以我们需要一个XSD文档,可以通过XML文件生成在线工具。我建议使用基于地图的对象来消除做反射内容的需要。如果您开发REST服务,则可以将收到的JSON消息转换为映射对象。通过这种方式,您的API有一个接收基于地图的对象并返回相同的方法。因此,每个字段都是地图中的关键字而不是类中的字段。但是这些函数可以具有特定类型的特定参数。 API的主体必须在将它们传递给函数之前从外部映射中转换get对象,并将返回的值放入XML文件中具有指定字段名称的内部消息。
我希望这个简短的回答能够说明找到一个令人满意的解决方案的方法,并记住编写一个高效的API,你可以自豪地与同事分享,这是一种技能,只有实践才能给你。