webservice xfire框架实例笔记

Myeclipse 部署 webservice 文档 —xfire

1         环境

Jdk1.5

Tamcat5.5

Myeclipse

以上工具的配置文档省略。

2         Tamcat 部署方式

建议使用 tamcat myeclipse 不做集成。

2.1      创建工程

myeclipse 中创建 webservice 工程, file->new->other->web service project

 

 

为我们的第一个 web service projuect 起个名字 webservicetest

 

其实所谓的 webservice 也不可能单独通讯, soap 协议是一个更上层的通讯协议,他是凌驾在 http 协议上的,所以我们 web 开发熟悉的 servlet 必不可少,默认就可以啦。

 

选择以下工具 jar 包,

 

呵呵,工程创建完毕,看看效果。包结构基本上遵守 web 的工程模式,仔细看多了一个目录 WebServices ,下边的 services.xml 作用就是我们的应用下提供了几个 webservices 服务,另外就是 web.xml 会发生变化,自己看看吧。

 

下一步工作我们分三种情况举例,分别是通讯传输基本数据类型, xml 数据类型,对象类型。 这三种情况应该可以涵盖了平时所有的应用。

 

2.2      基本数据类型通讯

创建一个 service 服务程序。 File->new->other->myeclipse->web service

 

 

 

仍然需要起一个服务类的名字, FirstService myeclipse 会为我们生成两个类服务接口类 (IFirstService) 和服务实现类 (FirstServiceImpl)

看看你的 service.xml 发生了什么变化。

 

 

看一下我们的实现类,很简单,就是返回一个基本数据类型 字符串

 

任务完成一半了,我们先部署一下,看看效果。

部署完成后我们生成 wsdl ,如下

 

 

Myeclipse 有个访问 wsdl 的工具,如下:

 

点击到 wsdl 方式,并录入 wsdl url 路径。

 

测试 一下功能,结果如下

 

相当于客户端发一个字符串给服务端,服务端处理后返回一个字符串响应,功能叙述完毕

下来我们开发一个正式的客户端。

File->new->other->web service client 填写 wsdl 访问路径。生成的类以及关键测试代码 如下:

 

 

 

2.3      对象类型通讯

简单基础类型通讯不能满足我们日常的系统开发工作 , 我们还需要支持远程对象传输 , 保证大数据量的传输 , 不过这就需要考虑效率问题 。压力测试时要注意 webservice 的效率测试

在生成 service 端和 client 端时最好使用两个工程,把 service 部署后建立另外一个 xfire 工程 ,并生成 client ,在传输对象的过程中 client 端也需要一个 User 对象,这个对象的作用就是映射服务器端的自定义对象。

 

首先我们需要创建服务类,返回参数是自定义对象 User

 

 

创建 User 对象 ,注意这个是服务器端的。

 

为了在 WSDL 中映射参数的类型,我们需要创建一个配置文件,并和服务类放在一个包下。 IFirstService.aegis.xml

 

服务器端都准备好了,部署!看看我们 wsdl

 

注意其中对参数的定义。

下来就是 client 端的开发了,顺便介绍一下 xfire 客户端的三种模式:

1.     Client 开发者拥有 Web 服务端的 class

即:能拿到服务端的接口 Class Entity 类及 aegis 配置文件

// 传统 POJO 模式

Service srvcModel = new ObjectServiceFactory().create(Hello.class);

               

XFireProxyFactory factory = new XFireProxyFactory(

 XFireFactory.newInstance().getXFire());

String helloWorldURL = "http://localhost:8080/webservice/services/Hello ";

  

Hello srvc = ( Hello) factory.create(srvcModel,

                                  helloWorldURL);

   System.out.println(srvc.sayHello("Robin"));

// JSR181 模式,注意这里 Server 端开发组需要向 Client 提供实现类,而不止于 // 接口,有点危险

Service  srvcModel = new AnnotationServiceFactory()

.create(HelloImpl.class);

XFireProxyFactory factory = new XFireProxyFactory(XFireFactory

                       .newInstance().getXFire());

      

String helloWorldURL = "http://localhost:8080/webservice/services/Hello ";

          

 Hello hello = (Hello) factory.create(srvcModel,helloWorldURL);

System.out.println(hello.sayHello("caohuili:"));

2 动态模式

    动态模式不需要服务端的 class ,不过性能和复杂对象映射等估计做得不会太好。

Client client = new Client(new URL(

             "http://localhost:8080/webservice/services/Hello?wsdl "));

      Object[] results = client

             .invoke("sayHello", new Object[] { "Cao," });

      System.out.println((String) results[0]);

3 根据 WSDL 生成 Client Stub

 // 简单参数的

HelloClient client=new HelloClient();

      HelloPortType port =client.getHelloHttpPort();

      System.out.println(port.sayHello("hi!"));

// 参数复杂的

            MemberServiceClient client = new MemberServiceClient();

      MemberService memberService = client.getMemberServiceHttpPort();

     

     

      User user = new User();

      /*JAXBElement<String> name = new JAXBElement<String>(new QName(

             "http://memberService ", "username"), String.class, "smallnest");

      JAXBElement<String> password = new JAXBElement<String>(new QName(

             "http://memberService ", "password"), String.class, "123456");*/

     

       ObjectFactory bjFac=new ObjectFactory();

      JAXBElement<String> name = objFac.createUserUsername("smallnest");

      JAXBElement<String> password = objFac.createUserPassword("123456");

      user.setUsername(name);

      user.setPassword(password);

     

      Member neMember = new Member();

      JAXBElement<String> memeberName = new JAXBElement<String>(new QName(

             "http://memberService ", "name"), String.class, " 迈克 ");

      JAXBElement<String> email = new JAXBElement<String>(new QName(

             "http://memberService ", "email"), String.class,

             "micro@micro.com ");

      oneMember.setName(memeberName);

      oneMember.setEmail(email);

      oneMember.setRank(6);

      // 调用方法

      memberService.addMember(oneMember, user);

那我们就完成自己的客户端 ,很简单,还是用 eclipse 新建立一个工程,并根据 wsdl 生成一个 client

 

 

 

执行结果  

 

 

2.4      数组类型通讯

对于基本类型的数组,不用在 aegis.xml 文件中映射配置,生成客户端时,会生成 ArrayOfString 的映射类型接收数据。如果是自己定义的复杂对象,就需要在 aegis.xml 文件中配置对象映射,这时 client 会根据 wsdl 生成对应的 ArroyOfxxx 对象

首先生成服务类

 

 

 

生成的 wsdl 文件。

 

 

客户端程序

 

 

执行结果

 

  3         Weblogic 部署方式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值