`
lovetocool
  • 浏览: 19994 次
  • 性别: 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

分享到:
评论

相关推荐

    java 利用webservice传输文件

    在“java 利用webservice传输文件”的场景中,JACOB可能被用来执行以下任务: 1. **文件操作**:Windows系统有许多内置的COM组件,如Scripting.FileSystemObject,可用于读写文件、创建目录等。通过JACOB,Java程序...

    java处理.net webservice返回的对象

    本文将详细介绍如何使用Apache Axis库来实现这一功能,以及处理.NET WebService返回的对象,特别是Dataset类型。 首先,为了在Java中调用.NET WebService,我们需要以下依赖库: 1. axis.jar - Apache Axis的核心...

    Java开发WebService实例

    #### 使用Java和Tomcat部署WebService 在本实例中,我们采用的是Apache Axis作为WebService框架。Apache Axis是一个开源的、功能强大的Web服务实现,支持SOAP协议,能够简化WebService的创建、发布和调用过程。 **...

    动态调用webservice与复杂对象的序列化

    在IT行业中,Web服务是应用程序之间进行通信的一种标准方法,而动态调用Web服务和复杂对象的序列化、反序列化是开发过程中常见的技术环节。本文将深入探讨这两个主题。 首先,让我们理解什么是动态调用Web服务。Web...

    java调用webservice接口方法

    以下是如何使用Axis进行Java调用WebService接口的步骤: 1. **创建WebService客户端**: 首先,你需要获取服务的WSDL文档。这是一个XML文件,描述了服务的接口、操作和消息格式。你可以通过URL获取WSDL,或者如果...

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

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

    java 调用 odi webservice

    最后,我们将使用 `OdiInvoke` 对象的 `getOdiInvokeRequestSOAP11Port0()` 方法获取一个 `RequestPortType` 对象,并使用该对象的 `invokeStartScen()` 方法调用 ODI webservice。 在调用 ODI webservice 之后,...

    JAVA写webservice例子了

    1. **Service Endpoint Interface (SEI)**:定义Web服务的公共接口,使用Java注解来指定服务的命名空间、地址等信息。 2. **ServiceImpl类**:实现SEI接口,提供服务的具体逻辑。 3. **WSDL生成**:根据SEI自动生成...

    JAVA的WebService支持讲解

    JAX-WS继承并改进了早期的JAX-RPC(Java API for XML Remote Procedure Call)规范,提供了更加简洁和面向对象的编程模型。JAX-WS能够通过注解简化Web服务的开发过程,并且支持Web服务的动态客户端编程,即客户端...

    Java调用WebService(客户端)

    【Java调用WebService客户端详解】 在Java开发中,有时我们需要从客户端调用远程的WebService服务以获取或传递数据。本文将详细介绍如何使用Java进行WebService客户端的调用,并提供HttpGet、HttpPost、HttpSoap...

    Android调用webservice进行实体对象的传递Json

    在涉及到复杂对象如列表或自定义模型时,通常会使用JSON格式进行传输,因为它更轻量且易于解析。在C#中,我们可以使用Newtonsoft.Json库将实体对象序列化为JSON字符串,然后在Android端反序列化为Java对象。 服务端...

    JAVA的WebService支持.pdf

    - **SAAJ(SOAP with Attachments API for Java)**是与JAXM配合使用的API,为构建和解析SOAP消息提供了支持,特别是在处理带有附件的SOAP消息时尤为重要。SAAJ的API位于`javax.xml.soap.*`包。 - 相比于JAX-WS,...

    webservice之axis实例,axis复杂对象

    在本实例中,我们将深入探讨使用Apache Axis实现Web服务,特别是处理复杂对象的传递。 Apache Axis是Apache软件基金会开发的一个开源工具,它为Java开发者提供了一个方便的框架来创建和部署Web服务。Axis使得开发、...

    Java WebService入门实例

    通过这个简单的Java WebService入门实例,我们可以了解到如何使用Java来创建、发布和调用一个基本的WebService。实际开发中,WebService还涉及到更多复杂的应用,如安全性、事务处理、错误处理等,这些都是进阶学习...

    java Webservice 简单实例

    WebService是一种通过网络进行通信的软件系统,使用SOAP(简单对象访问协议)进行消息传输,WSDL描述了服务的接口和绑定,UDDI(统一描述、发现和集成)则用于服务的注册和查找。 2. **JAX-WS(Java API for XML ...

    java调用webservice最精简的jar包

    在给定的"java调用webservice最精简的jar包"压缩文件中,可能就包含了这些基本组件,使得开发者能够快速、简洁地完成Web服务调用任务。在实际使用时,应根据项目的具体需求和环境,适当地添加或移除这些JAR包。

    java调用webservice的demo

    综上所述,`CallWebServiceClientDemo`演示了如何使用Java通过JAX-WS调用Web Service的全过程,涵盖了从获取WSDL、生成Stub、实例化服务、调用方法到异常处理等多个关键环节。理解并实践这个Demo,对于掌握Java调用...

    java定时进行webservice数据上报

    在Java中,通常使用JAX-WS(Java API for XML Web Services)或者JAX-RS(Java API for RESTful Web Services)来创建和消费WebService。 3. 定时任务:在Java中,有多种方式可以实现定时任务,如使用java.util....

    WebService CXF 对象传递 附

    **WebService CXF 对象传递详解** 在Web服务领域,CXF是一个非常重要的开源框架,它允许开发者创建和消费各种Web服务。CXF支持SOAP、RESTful等多种通信模式,并且能够处理复杂的对象传递,使得Web服务的数据交换...

    JAVA调用WebService(Axis)

    总的来说,通过Apache Axis,Java开发者可以便捷地实现对WebService的调用,大大简化了与远程服务交互的复杂性。在实际项目中,根据具体的业务需求,可能还需要处理认证、加密、性能优化等问题,这些都是在调用...

Global site tag (gtag.js) - Google Analytics