在Web Service中调用继承对象

        与开发Web Service一样,有WSDL优先和代码优先两种方式。
      
       首先我们介绍WSDL优先的方式,采用这种方式我们先在XML Schema中定义一个基类的complexType ,然后使用扩展标签声明另一个 complexType 元素来扩展。
 <complexType name="Product">
<sequence>
<element name="name" type="string"/>
<element name="description" type="string"/>
</sequence>
</complexType>
<complexType name="ProductA">
<complexContent>
<extension base="Product">
<sequence>
<element name="spec" type="string"/>
</sequence>
</extension>
</complexContent>
</complexType>
然后通过WSDL生成Product、ProductA及实现Web Service的相关的相关类。

采用代码优先的方式为,首先定义需要用到的两个基本对象:
class Product{
protected String name;
protected String description;

public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}

public String getDescription(){
return description;
}
public void setDescription(String description){
this.description = description;
}
 }
       class ProductA extends Product{
                private String spec;
	public String getSpec(){
return spec;
}
public void setSpec(String spec){
this.spec= spec;
}
}

创建Web Service的接口:
public interface IProduct{
void addProduct(Product prod);
Product[] getProducts();

void doNothing(ProductA a);
}

创建WebService的实现:
public class ProductService implements IProduct{
private List<Product> prods = new ArrayList<Product>();
public void addProduct(Product prod){
this.prods.add(prod);
}
public Product[] getProducts(){
return prods;
}
public void doNothing(ProductA a){}
}
       需要记住的是我们必需定义一个空方法将各个子类作为参数传入,如果没有该方法的话WSDL中不会产生Product各个子类的映射,从而Client端无法引用Product的子类。

       最后在写一个Client测试一下吧

            ProductService service = new ProductService();
            ProductServicePort port = service.getProductServicePort();
            
             Product p1 = new Product();
             p1.setName("prod");
             p1.setDescription("this is a product.");
             port.addProduct(p1);

             ProductA p2 = new ProductA();
             p2.setName("prod2");
             p2.setDescription("this is a ProductA.");
             p2.setSpec("spec");
             prot.addProduct(p2);

            Product[] result = port.getProducts();
            for(Product prod : result){
            System.out.println("Name = "+prod.getName());
                if(prod instanceof ProductA){
                    ProductA a = (ProductA)prod;
                   
                    System.out.println("Spec= "+a.getSpec());
                }
            }

      运行,会打印如下结果:
          prod
          this is Product.
          prod2
          this is ProductA.
          spec

    OK,大功千成!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值