`
lovetocool
  • 浏览: 19266 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Java6 WebService 使用复杂对象

阅读更多
Java6 WebService 使用复杂对象
 
复杂对象可表示的语义比简单对象强大很多,这里看看在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("http://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)、服务端的带参数构造方法在客户端失效。
 
以上三点是非常重要的,如果不知道会很郁闷,老出错还找不到原因。

本文出自 “熔 岩” 博客,请务必保留此出处http://lavasoft.blog.51cto.com/62575/228152

分享到:
评论

相关推荐

    webService客户端调用服务端传对象参数

    这个工程详细的介绍了webService服务客户端如何调用简单和复杂的webService,其中就包括传递的参数是对象类型,返回数据是数组类型,还有最简单的基本类型。压缩包里还配置说明,清晰的说明webService的整个过程,对...

    spring,cxf,restful发布webservice传递List,Map,List<Map>

    spring,cxf,restful发布webservice传递复杂对象,例如List,Map,List<Map>

    WebService开发指南

    上次介绍了axis1.x的用法,这次继续上次的,将叙述axis2的用法。 1、开发准备 首先需要下载axis2的相关...三、 复杂对象类型的WebService 1、这次我们编写复杂点的WebService方法,返回的数据是我们定义属性带getter、

    webservice Axis2教程

    在这些操作中,涉及到了如何使用 WebService来传输和下载图像文件、传输查询结果(Resultset对象)等技术难点。第二个项目使用Struts 2.1.6(目前Struts 2的最新版,2009年1月发布)来实现PIM。功能与第一个PIM类似...

    java学习重点

    类的目的是封装复杂性,在类内部存在隐藏实现复杂性机制; 封装(encapsulation) 的两个好处: 模块化:可以独立于其他对象的源代码进行编写和维护,可以很容易的将对象在系统中传递; 隐藏信息:其他对象可以通过本...

    Java EE常用框架.xmind

    这种方法会将WebService翻译成Java类,我们使用类一样去访问WebService就行了。非常好用。 三、除了调用别人发布的webService,也可以自己发布WebService服务 四、CXF框架可以与spring无缝连接,就不用我们...

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

    所使用的应用服务器是jboss 5.1和weblogic 11g,详细介绍了这两种应用服务器的安装和使用,以及如何在两大主流服务器上安装、部署java ee应用。  本书内容主要包括三部分,第一部分介绍java ee开发的基础知识,...

    基于Java的XML解析与反射设计模式.doc

    关键词:xml java 在web中,多系统间数据交互一般使用webservice技术,它是一种构建应用程序的普遍模 型,可以在任何支持网络通信的操作系统中实施运行;它是一种新的web应用程序分支, 是自包含、自描述、模块化的...

    jax-ws_webservice服务端程序演示

    调试环境:mycelipse10+tomcat7 包含调用简单数据类型,List类型,下载javabean对象,上传图像文件,上传javabean复杂数据对象等5个代码例子。 调试环境的配置,网上很多文章都写了。

    jax-ws_webservice客户端调用程序演示

    调试环境:mycelipse10+tomcat7 包含调用简单数据类型,List类型,下载javabean对象,上传图像文件,上传javabean复杂数据对象等5个代码例子。 调试环境的配置,网上很多文章都写了。

    Flex新手教程_入门级学习笔记

    1.1类和对象 Class and Object 1 1.2包与命名空间 Package and NameSpace 1 1.3构造方法Constructor 2 1.4变量和值 Variable 2 1.5赋值 2 1.6 AS数据类型 3 1.7数据类型转换 3 1.8实例方法,实例变量和静态方法,静态...

    使用Java搭建Webservices应用程序结构.doc

    使用者可以通过这个WSDL文档,创建相应的SOAP请求消息,通过HTTP传递给webservice提供者;web服务在完成服务请求后,将SOAP返回消息传回请求者,服务请求者再根据WSDL文档将SOAP返回消息解析成自己能够理解的内容。 ...

    axis开发资料

    项目收集的axis的相关资料~~ Axis.pdf AXIS(Java+WebSerivce)全攻略.mht ...WebService之axis的复杂对象传输方案.txt 使用Apache Axis部署 Web服务时的常见问题及其解决方法.txt 使用Axis开发Web Service程序.txt

    Axis1.4开发指南.pdf

    2.4.1即时发布——JWS(JavaWebService)..............6 2.4.2定制发布——WSDD.............................8 2.4.3取消发布一个WebService.......................11 3.WSDD高级特性.............................

    java调用wsdl接口源码-cxf-plus:apachecxf在支持通用数据类型方面的增强

    增强的反射机制,可以对接口和POJO对象中的嵌套泛型、继承泛型等进行完整的解析,从而使得带有各种复杂泛型的接口可以正确发布和传输。 简化集成,针对目前大多数服务使用SpringFramework的特点,自动查找JAX-WS和...

    asp.net知识库

    体验.net 2.0 的优雅(1) -- 异步WebService调用 ASP.NET 2.0页面框架的几点新功能 ASP.NET 2.0 中收集的小功能点 asp.net2.0中的webpart使用小记 2.0问题、错误解决办法 ASP.NET 2.0使用Web Part创建应用程序之二...

    JavaScript高级教程

    3.1.1 面向对象语言的要求..............................................58 3.1.2 对象的构成..............................................59 3.2 对象应用..............................................59 ...

    ASP EXCEL导入SQL

     由于用户使用的是文档数据库,有着松散的数据结构,因此用户根据需求,而可以随意自定义自己的业务对象;  361CRM平台后台的平台服务层,有相应的实时的工作流引擎,提供给用户强大的自定义工作流程功能;  361...

Global site tag (gtag.js) - Google Analytics