han_zw 2010-12-07 23:00
浏览 203
已采纳

请教关于Web Service返回值多态情况的处理

现在用CXF开发Web service中一直有个疑惑,那就是Web service的接口返回值如果是复杂类型,并且属性本身是一个抽象类或者接口的话,这种设计在平时开发时没有问题,那在web service开发中这样是否合理?为了表达清楚一下 举例如下:
假如有这样一个接口,要暴露为web service(细节省略,只列出方法签名)。

[code="java"]public RespResult sayHi();[/code]

假设RespResult同样为复杂对象,如下:
[code="java"]
public class RespResult {
private String resultCode;
private AbstractClazz clazz;
/*
geter.. setter..
*/
}
[/code]

而AbstractClazz本身为抽象类(是Interface也无妨),有两个具体实现类,如下:
[code="java"]
public class AbstractClazz {
private String name;
//getter.. setter..
}
public class ClazzA extends AbstractClazz {
private String attributeA;
//getter.. settter
}

public class ClassB extends AbstractClazz {
private String attributeB;
//getter.. setter..
}
[/code]

像这种返回值的设计是否合理,还是应该针对两种可能的AbstractClazz的子类将该接口设置为两个接口,返回两个包含具体子类的返回值?
不知道各位是怎么处理Web service返回值多态的情况。
欢迎赐教讨论。

  • 写回答

2条回答 默认 最新

  • beneo 2010-12-08 09:08
    关注

    我学java的时代已经开始使用RMI了,所以我对webservices不是太了解。

    居我所知,webservices也是一个远程调用,通过wsdl来描述services在web环境下面的位置,此外web services还是一个标准,可以有c#实现,asp实现等。

    web services是通过proxy来进行访问控制的,虽然你通过webservices访问的是一个接口,只要server返回给你个实例丢对象并且处理你的请求就可以了。简单来说多态肯定是不受到影响的。

    你说返回的是一个复杂对象,哦,你担心的是序列化的问题。。web service是通过soap来传递对象的,soap本身是基于xml-based的http传递协议,所以肯定有个解析和转换的工作你得自己做。

    我来说说web service的坏处吧(我这人就喜欢看到别人的坏处)
    1. 效率不佳(xml格式本身就是有很多冗余的)
    2. 异常处理很麻烦
    3. more...-_-!!!

    那么我来说说RMI吧
    RMI的使用绝对比web services方便,你在eclipse上面的动作就知道,架设一个rmi比webservices快很多,不过rmi的对象传递都得序列化的。不过,不像web services,RMI不支持其他语言,因为它是java远程调用接口。

    如果只是一般的小公司,或者一些政府项目,不涉及到跨语言访问,我觉得rmi是不二的选择

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 unity3d机械臂
  • ¥20 判断两个表是否完全相同
  • ¥20 工控机出现散热器转一下停一下这种情况,是什么原因造成的
  • ¥15 双显卡,启动docker容器报错。
  • ¥15 想编写一个期货跨期套利的程序
  • ¥15 一个线程在sleep的时候set一个信号会起作用吗
  • ¥50 如何利用matlab将现有的地基雷达回波数据调制为机载雷达回波数据
  • ¥100 需求高精度PT100设计电路和算法
  • ¥15 单片机配网,继电器开关,广播
  • ¥60 Qcustomplot绘制实时动态曲线