彩票走势图

WebService复杂对象使用方法

原创|其它|编辑:郝浩|2009-11-19 10:55:07.000|阅读 1297 次

概述:复杂对象可表示的语义比简单对象强大很多,这里看看在Java6的WebService中如何使用复杂对象参数。

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

  复杂对象可表示的语义比简单对象强大很多,这里看看在Java6的WebService中如何使用复杂对象参数。

  这里的参数分两类,一类是入参,一类是返回值。

  复杂对象在并不像想象中那么简单,其中还有一些玄机。请看实例:

  1、开发服务,统统在服务端

  package lavasoft.server;
  import javax.jws.WebService;
  import javax.xml.ws.Endpoint;
  /**
  * Java6开发的WebService服务端
  *
  * @author leizhimin 2009-11-16 10:24:13
  */
  @WebService
  public class Java6WS {
  //返回一个复杂对象
  public UserBean doSomething1(String username, String address, boolean flag) {
  return new UserBean(username, address, flag);
  }
  //接收一个复杂对象
  public String doSomething2(Foo foo) {
  return foo.toString();
  }
  public static void main(String[] args) {
  //发布一个WebService
  Endpoint.publish("//192.168.14.117:9999/java6ws/Java6WS", new Java6WS());
  }
  }
  package lavasoft.server;
  /**
  * 用户信息
  *
  * @author leizhimin 2009-11-16 16:43:35
  */
  public class UserBean {
  private String username;
  private String address;
  private boolean flag;
  public UserBean() {
  }
  public UserBean(String username, String address, boolean flag) {
  this.username = username;
  this.address = address;
  this.flag = flag;
  }
  public String getUsername() {
  return username;
  }
  public void setUsername(String username) {
  this.username = username;
  }
  public String getAddress() {
  return address;
  }
  public void setAddress(String address) {
  this.address = address;
  }
  public boolean isFlag() {
  return flag;
  }
  public void setFlag(boolean flag) {
  this.flag = flag;
  }
  @Override
  public String toString() {
  return "UserBean{" +
  "username='" + username + '\'' +
  ", address='" + address + '\'' +
  ", flag=" + flag +
  '}';
  }
  }
  package lavasoft.server;
  /**
  * Created by IntelliJ IDEA.
  *
  * @author leizhimin 2009-11-16 17:09:46
  */
  public class Foo {
  private String name;
  private String sex;
  public Foo() {
  }
  public Foo(String name, String sex) {
  this.name = name;
  this.sex = sex;
  }
  public String getName() {
  return name;
  }
  public void setName(String name) {
  this.name = name;
  }
  public String getSex() {
  return sex;
  }
  public void setSex(String sex) {
  this.sex = sex;
  }
  @Override
  public String toString() {
  return "Foo{" +
  "sex='" + sex + '\'' +
  ", name='" + name + '\'' +
  '}';
  }
  }

  2、生成客户端代码


  
  可以清楚的看出,在客户端代码中,已经生成了服务接口和服务实现类,还生成了UserBean和Foo两个类,而这两个类和服务端的内容不同。

  3、写客户端测试代码

  package lavasoft;
  import lavasoft.wsclient.Foo;
  import lavasoft.wsclient.Java6WS;
  import lavasoft.wsclient.Java6WSService;
  import lavasoft.wsclient.UserBean;
  /**
  * 测试Java6 WS生成的客户端代码
  *
  * @author leizhimin 2009-11-16 17:05:00
  */
  public class TestClient {
  public static void main(String[] args) {
  //创建一个客户端服务对象
  Java6WS java6WS = new Java6WSService().getJava6WSPort();
  System.out.println("----------java6WS.doSomething1-------------");
  //调用服务方法,并得到方法返回值
  UserBean userBean = java6WS.doSomething1("zhangsan", "华中路", true);
  //打印服务的返回值
  System.out.println(userBean.toString());
  System.out.println(userBean.getUsername() + " " + userBean.getAddress() + " " + userBean.isFlag());
  System.out.println("----------java6WS.doSomething2-------------");
  Foo f = new Foo();
  f.setName("李四");
  f.setSex("Man");
  String sf = java6WS.doSomething2(f);
  System.out.println(sf);
  }
  }

  4、执行客户端

  执行前先启动服务端。

  执行结果如下:

  可以看出,测试很成功。

  5、总结

  这里面其实有些细节,需要说明白:

  1)、对于复杂对象,必须有一个不带参数的构造方法。

  2)、服务端覆盖Object的方法不能在客户端复原,比如toString方法。

  3)、服务端的带参数构造方法在客户端失效。

  以上三点是非常重要的,如果不知道会很郁闷,老出错还找不到原因。


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn

文章转载自:网络转载

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP