与开发Web Service一样,有WSDL优先和代码优先两种方式。
首先我们介绍WSDL优先的方式,采用这种方式我们先在XML Schema中定义一个基类的complexType ,然后使用扩展标签声明另一个 complexType 元素来扩展。
private String spec;
最后在写一个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,大功千成!
首先我们介绍WSDL优先的方式,采用这种方式我们先在XML Schema中定义一个基类的complexType ,然后使用扩展标签声明另一个 complexType 元素来扩展。
<complexType name="Product">class ProductA extends 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;
}
}
private String spec;
public String getSpec(){需要记住的是我们必需定义一个空方法将各个子类作为参数传入,如果没有该方法的话WSDL中不会产生Product各个子类的映射,从而Client端无法引用Product的子类。
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){}
}
最后在写一个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,大功千成!