webservice返回子类

简介:

用cxf写了一个简单的webservice。

model如下:

public class ProductModel implements ICachable, Serializable {……}

public class InveLinkModel extends ProductModel {……}

webservice接口定义如下

public interface IProductCenter {

    public ProductModel seekPInfo(String pid);

}

利用spring注入获取了一个客户端。spring的xml配置如下:

<jaxws:client id="pcenterClient"  address="” serviceClass="xxx" />

客户端代码如下:

IProductCenter client;

// 下面这里出现了问题

ProductModel product = client.seekPInfo("ELI_CW_001");

问题是:无论webservice的服务端实现类返回的是InveLinkModel 还是ProductModel ,客户端获取到的model,始终是ProductModel的实例。

 

解决方法很简单:

import javax.xml.bind.annotation.XmlSeeAlso;

@XmlSeeAlso(value = { InveLinkModel.class })     
public class ProductModel implements ICachable, Serializable {}

XmlSeeAlso注解声明了这个类的子类。webservice服务端会根据这个注解的value值和model的实际类型进行序列化和反序列化,从而使得客户端能够获取到所需要的正确类型。




本文转自 斯然在天边 51CTO博客,原文链接:http://blog.51cto.com/winters1224/1440933,如需转载请自行联系原作者

相关文章
|
8月前
|
Java
Java接口中可以定义哪些方法?
【4月更文挑战第13天】
497 0
Java接口中可以定义哪些方法?
|
负载均衡 前端开发 Java
Feign对服务的声明式定义和调用
在此之前,各个微服务都是以HTTP接口的形式暴露自身服务的,因此在调用远程服务时就必须使用HTTP客户端,使用起来很不方便,需要了解URL,有时还需要拼装真正请求的URL。有没有一种用起来更方便、更优雅的方式吗?答案是肯定的,Spring Cloud想到了这些————Feign。Spring Cloud Feign是一套基于Netflix Feign实现的声明式服务调用客户端。它使得编写Web服务客户端变得更加简单。在Spring Cloud中使用Feign, 我们只需要通过创建接口并用注解来配置既可完成对Web服务接口的绑定,可以做到使用HTTP请求远程服务时能与调用本地方法一样的编码体验,
|
Java
Java - 反射使用(调用私有方法、修改私有属性、获取父类私有字段)
Java - 反射使用(调用私有方法、修改私有属性、获取父类私有字段)
834 0
|
XML 存储 Java
WebService对象调用spring注解
WebService对象调用spring注解
177 0
|
XML 数据格式 网络架构
httpclent调用webservice
httpclent调用 webservice   wsdl后缀服务 1.jar包: commons-logging-1.
1538 0
|
C# 数据格式 XML
C# 调用WebService的方法
很少用C#动态的去调用Web Service,一般都是通过添加引用的方式,这样的话是自动成了代理,那么动态代理调用就是我们通过代码去调用这个WSDL,然后自己去生成客户端代理。更多的内容可以看下面的两个地址:http://blog.
1095 0
类中静态方法的调用,根据传入值生成不同类但同一个接口对象,调用其中实现的接口的方法.
实现同一个接口的不同的类,根据调用总和类中静态类型(返回值同接口)方法,(传入不同值),根据if else判定该new哪一个实现类.从而使用不同的接口的实现方法.  将编程看作是一门艺术,而不单单是个技术。
1127 0
|
Java 设计模式
java中一个类中没有公共的构造方法,则说明不能让外界去new对象。
java中一个类中没有公共的构造方法,则说明不能让外界去new对象。   * java中一个类中没有公共的构造方法,则说明不能让外界去new对象。  *    有以下几种情况:  *    A:成员全部是静态的(如:Math类,Arrays数组工具类,Collections集合工具类)  *...
1187 0