`
yanghuw
  • 浏览: 13298 次
  • 来自: ...
文章分类
社区版块
存档分类
最新评论

在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,大功千成!

分享到:
评论

相关推荐

    CXF框架应用在Web项目中

    基于CXF的webservice开发 1、服务器端 Ⅰ)开发web service业务接口,该接口用@WebService修饰; Ⅱ)开发web service业务接口的实现类...Ⅲ)调用Service子类的实例的getXXXPort()方法,返回给远程web service的代理

    java web技术开发大全(最全最新)

    提供典型应用案例,剖析JSP/Servret技术与Struts 2技术在Web开发中的不同 提供完整的应用案例,使读者可以深入体会SSH开发模式的精髓 所有开发工具和框架均使用目前的最新版本,紧跟技术发展的趋势 提供230个实例和4...

    java web开发技术大全

    提供典型应用案例,剖析JSP/Servret技术与Struts 2技术在Web开发中的不同 提供完整的应用案例,使读者可以深入体会SSH开发模式的精髓 所有开发工具和框架均使用目前的最新版本,紧跟技术发展的趋势 提供230个实例...

    超级有影响力霸气的Java面试题大全文档

    当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。 20、abstract class和interface有什么区别? ...

    java-servlet-api.doc

    当客户端发出请求时,Servlet引擎传递给Servlet一个ServletRequest对象和一个ServletResponse对象,这两个对象作为参数传递到service()方法中。 Servlet也可以执行ServletRequest接口和ServletResponse接口。...

    servlet temple

    每当一个客户请求一个HttpServlet 对象,该对象的service() 方法就要被调用,而且传递给这个方法一个“请求”(ServletRequest)对象和一个“响应”(ServletResponse)对象作为参数。 在 HttpServlet 中已存在 ...

    亮剑.NET深入体验与实战精要2

    7.6.2 通过Microsoft.XMLDOM调用Web Service 291 7.6.3 XMLHTTP POST调用Web Service 293 7.6.4 SOAP调用Web Service 293 7.7 WinForm如何调用Web Service 295 7.7.1 .NET的WinForm调用Web Service 295 7.7.2 手动...

    亮剑.NET深入体验与实战精要3

    7.6.2 通过Microsoft.XMLDOM调用Web Service 291 7.6.3 XMLHTTP POST调用Web Service 293 7.6.4 SOAP调用Web Service 293 7.7 WinForm如何调用Web Service 295 7.7.1 .NET的WinForm调用Web Service 295 7.7.2 手动...

    【。net 专业】 面试题

    在“Web引用”对话框中输入这个 XML Web service 的地址。  C.在您的 Global.asax.cs 中添加一条 using 语句并指定这个 XML Web service 的地址。  D.在您的 Global.asax.cs 中写一个事件处理器导入这个 Xml Web ...

    java 面试题 总结

    当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。 17、abstract class和interface有什么区别? 声明方法...

    Grails 技术精解与Web开发实践【源码+样章】----下载不扣分,回帖加1分,欢迎下载,童叟无欺

    3.4.3 闭包在GDK中的使用 31 3.5 本章小结 33 第二篇 实际应用 第4章 商品维护 36 4.1 准备工作 36 4.2 查看商品列表 40 4.3 创建和编辑商品 44 4.4 本章小结 48 第5章 商品搜索 49 5.1 构造查询表单 49 5.2 复杂...

    ssh(structs,spring,hibernate)框架中的上传下载

     其中save(FileActionForm fileForm)方法,将封装在fileForm中的上传文件保存到数据库中,这里我们使用FileActionForm作为方法入参,FileActionForm是Web层的表单数据对象,它封装了提交表单的数据。将...

    java面试宝典

    22、我们在web 应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串? 10 23、String 和StringBuffer 的区别? 10 24、String, StringBuffer StringBuilder 的区别。 10 25、...

    spring in action英文版

     6.6.2 在Spring里置入一个Web Service  6.7 小结  第7章 访问企业服务  7.1 从JNDI中获取对象  7.1.1 使用传统的JNDI  7.1.2 代理JNDI对象  7.2 发送电子邮件  7.3 调度任务  7.3.1 使用...

    java面试题

    当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步。在很多情况下采用异步往往更有效率。 数据库三大范式? 答:1:确保每列都是不可分割的原子值 2...

    二十三种设计模式【PDF版】

    在真正可复用的面向对象编程中,GoF 的《设计模式》为我们提供了一套可复用的面向对象技术,再配合 Refactoring(重构方法), 所以很少存在简单重复的工作,加上Java 代码的精炼性和面向对象纯洁性(设计模式是 java 的...

    JAVA面试题最全集

    一、Java基础知识 1.Java有那些基本数据类型,String是不是基本...这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() ...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    7.3.1 在WebLogic中配置JavaMail 288 7.3.2 通过WebLogic的邮件支持来 发送邮件 290 7.3.3 在JBoss中配置JavaMail 292 7.4 本章小结 294 第8章 会话EJB 295 8.1 EJB概述 296 8.1.1 EJB的概念和意义 296 8.1.2 EJB的...

    asp.net知识库

    在Asp.net中如何用SQLDMO来获取SQL Server中的对象信息 使用Relations建立表之间的关系并却使用PagedDataSource类对DataList进行分页 通过作业,定时同步两个数据库 SQLSERVER高级注入技巧 利用反射实现ASP.NET控件和...

    千方百计笔试题大全

    22、我们在web 应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串? 10 23、String 和StringBuffer 的区别? 10 24、String, StringBuffer StringBuilder 的区别。 10 25、...

Global site tag (gtag.js) - Google Analytics