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 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/