【原创】webservice xfire框架实例笔记

Myeclipse 部署webservice文档—xfire

1         环境

Jdk1.5

Tamcat5.5

Myeclipse

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

2         Tamcat部署方式

建议使用tamcatmyeclipse不做集成。

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方式,并录入wsdlurl路径。

测试一下功能,结果如下

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

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

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

即:能拿到服务端的接口ClassEntity类及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 name = new JAXBElement(new QName(

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

      JAXBElement password = new JAXBElement(new QName(

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

     

       ObjectFactory bjFac=new ObjectFactory();

      JAXBElement name = objFac.createUserUsername("smallnest");

      JAXBElement password = objFac.createUserPassword("123456");

      user.setUsername(name);

      user.setPassword(password);

     

      Member neMember = new Member();

      JAXBElement memeberName = new JAXBElement(new QName(

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

      JAXBElement email = new JAXBElement(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部署方式

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7389553/viewspace-623089/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/7389553/viewspace-623089/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值