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 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)