设计以减少代码冗余 - Java / Web服务

时间:2010-07-15 01:41:54

标签: java architecture rest web-services

方案:  我正在开发一个Web服务项目。它支持SOAP和REST。 SOAP请求和响应由XmlObjects处理。 REST架构使用普通的POJO进行请求和响应。我有一个通用控制器来处理来自SOAP和REST的请求。此控制器了解公共对象(请求对象)。并且,控制器发送回传输对象。在控制器前面,我有一个请求转换器将SOAP / POJO对象转换为公共请求对象。还有一个响应转换器,用于将传输对象转换为SOAP / REST视图对象。

问题: 我有2个请求和响应翻译。 SOAP / REST请求和响应转换器看起来相同。但是,他们将不同的对象作为输入。所以看起来我有两次相同的代码。

如何避免这种冗余?

我想到的解决方案:Bean映射。

还有什么比这更优雅吗?

2 个答案:

答案 0 :(得分:2)

我认为你的“REST”和“SOAP”API必须做同样的事情,因此非常平行。您应该(重新)阅读Roy Fielding对REST架构方法的描述,然后在Roy非常精确的术语定义中确定这些API是否真正具有REST。如果他们 都是RESTful,那么就放弃SOAP API:SOAP更难使用,不利用HTTP缓存,并且不会在REST API上添加任何东西。

如果它们都是 -RESTful(即,它们具有远程过程调用风格,并且“REST”API恰好使用HTTP和XML执行RPC操作),那么假设您可以'将它们转换为REST架构风格,您至少可以使用像XStream这样的库来分解POJO< ==> XML映射。

答案 1 :(得分:0)

你是对的,如果只有请求/响应XML在布局上有所不同且数据相同,那么你可以为它们制作XSLT,这将根据你的POJO将其转换为适当的XML。

那么你可以使用Castor映射XML到POJO对象吗?你将得到你需要的对象。但是你必须使代码对象通用吗?

我的意思是,为您的逻辑使用公共对象,并使用另一个逻辑从SOAP / REST的Request / Response对象中获取该对象。因为您发送的数据在两种方法中都是相同的,所以您只需要处理对象到对象的转换。这可以直接完成,也可以使用Object to XML和XML到您喜欢的object.depends。

希望这会有所帮助。

PARTH。