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条)

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?