我的漫漫程序之旅
专注于JavaWeb开发
XFire完整入门教程
网上关于XFire入门的教程不少,要么是讲得很简单,就像Hello World一样的程序,要么就是通过IDE集成的工具来开发的,这对于不同的人群有诸多不便,关于XFire的一些详细的信息就不再多讲,可以参考官方网站和相关的文档,这里讲一个完整的入门实例。
实例中包括三个情况,我想基本上可以概括所有的需求,或者自己稍加扩展即可。先来看看我们的Interface。
1
package
test;
2
3
import
java.util.List;
4
5
public
interface
IHelloService
{
6
public
String sayHello(String ttt);
7
8
public
Course choose(User u);
9
10
public
List test(List t);
11
}
这其中包含了简单对象的传递,对象的传递,List的传递。
具体的开发步骤如下:
1、定义Web Service的接口,代码见上面的接口定义。
2、实现接口和业务逻辑,代码如下:
1
package
test;
2
3
import
java.util.ArrayList;
4
import
java.util.List;
5
6
public
class
HelloServiceImpl
implements
IHelloService
{
7
8
public
String sayHello(String ttt)
{
9
return
"
Hello,
"
+
ttt;
10
}
11
12
public
Course choose(User u)
{
13
System.out.println(u.getName());
14
Course c
=
new
Course();
15
c.setName(
"
Eee
"
);
16
return
c;
17
18
}
19
20
public
List test(List t)
{
21
for
(
int
i
=
0
; i
<
t.size(); i
++
)
{
22
System.out.println((String) t.get(i));
23
}
24
List al
=
new
ArrayList();
25
Course c
=
new
Course();
26
c.setName(
"
EeeDDDDDD
"
);
27
al.add(c);
28
return
al;
29
30
}
31
}
用到的User和Course两个类的代码如下:
1
package
test;
2
3
public
class
User
{
4
private
String name;
5
6
public
String getName()
{
7
return
name;
8
}
9
10
public
void
setName(String name)
{
11
this
.name
=
name;
12
}
13
}
14
1
package
test;
2
3
public
class
Course
{
4
private
String name;
5
6
public
String getName()
{
7
return
name;
8
}
9
10
public
void
setName(String name)
{
11
this
.name
=
name;
12
}
13
14
}
3、编写XFire要求的WebSevice定义描述文件,如下:
1
<?
xml version="1.0" encoding="UTF-8"
?>
2
<
beans
xmlns
="http://xfire.codehaus.org/config/1.0"
>
3
4
<
service
>
5
<
name
>
HelloService
</
name
>
6
<
namespace
>
http://test/HelloService
</
namespace
>
7
<
serviceClass
>
test.IHelloService
</
serviceClass
>
8
<
implementationClass
>
test.HelloServiceImpl
</
implementationClass
>
9
</
service
>
10
11
</
beans
>
此文件放在src/META-INF/xfire/services.xml,编译时会自动编译到classes的相应目录下面。
4、因为我们用到了List等集合类型,所以需要定义Mapping关系,文件名为:src/test/IHelloService.aegis.xml,代码如下:
1
<?
xml version="1.0" encoding="UTF-8"
?>
2
<
mappings
>
3
<
mapping
>
4
<
method
name
="test"
>
5
<
parameter
index
="0"
componentType
="java.lang.String"
/>
6
<
return-type
componentType
="test.Course"
/>
7
</
method
>
8
</
mapping
>
9
</
mappings
>
请注意,此文件一定要放到与IHelloService.java相同的目录下面,否则会出错。
5、在Web.xml中配置XFire需要用到的Servlet,代码如下:
1
<?
xml version="1.0" encoding="UTF-8"
?>
2
<
web-app
version
="2.4"
xmlns
="http://java.sun.com/xml/ns/j2ee"
3
xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance"
4
xsi:schemaLocation
="http://java.sun.com/xml/ns/j2ee
5
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
>
6
7
<
servlet
>
8
<
servlet-name
>
XFireServlet
</
servlet-name
>
9
<
servlet-class
>
10
org.codehaus.xfire.transport.http.XFireConfigurableServlet
11
</
servlet-class
>
12
</
servlet
>
13
14
<
servlet-mapping
>
15
<
servlet-name
>
XFireServlet
</
servlet-name
>
16
<
url-pattern
>
/servlet/XFireServlet/*
</
url-pattern
>
17
</
servlet-mapping
>
18
19
<
servlet-mapping
>
20
<
servlet-name
>
XFireServlet
</
servlet-name
>
21
<
url-pattern
>
/services/*
</
url-pattern
>
22
</
servlet-mapping
>
23
24
25
<
welcome-file-list
>
26
<
welcome-file
>
index.jsp
</
welcome-file
>
27
</
welcome-file-list
>
28
</
web-app
>
此时Web Service的服务端就开发完成了。
我们来看看客户端的代码吧,也很简单,如下:
1
package
test;
2
3
import
java.net.MalformedURLException;
4
import
java.util.ArrayList;
5
import
java.util.List;
6
7
import
org.codehaus.xfire.XFireFactory;
8
import
org.codehaus.xfire.client.XFireProxyFactory;
9
import
org.codehaus.xfire.service.Service;
10
import
org.codehaus.xfire.service.binding.ObjectServiceFactory;
11
12
public
class
Client
{
13
14
public
static
void
main(String[] args)
{
15
16
Service srvcModel
=
new
ObjectServiceFactory()
17
.create(IHelloService.
class
);
18
XFireProxyFactory factory
=
new
XFireProxyFactory(XFireFactory
19
.newInstance().getXFire());
20
21
String helloWorldURL
=
"
http://localhost:8080/xfiretest/services/HelloService
"
;
22
try
{
23
IHelloService srvc
=
(IHelloService) factory.create(srvcModel,
24
helloWorldURL);
25
System.out.println(srvc.sayHello(
"
Robin
"
));
26
27
User u
=
new
User();
28
u.setName(
"
RRRRR
"
);
29
Course c
=
srvc.choose(u);
30
System.out.println(c.getName());
31
32
List al
=
new
ArrayList();
33
al.add(
"
1212
"
);
34
al.add(
"
2222
"
);
35
List t
=
srvc.test(al);
36
for
(
int
i
=
0
; i
<
t.size(); i
++
)
{
37
Course co
=
(Course)t.get(i);
38
System.out.println(co.getName());
39
}
40
41
42
}
catch
(MalformedURLException e)
{
43
e.printStackTrace();
44
}
45
46
}
47
48
}
49
以上代码均无注释,因为都非常简单,呵呵。如有不清楚的地方,请留言!
posted on 2008-04-24 18:00
々上善若水々
阅读(370)
评论(0)
编辑
收藏
所属分类:
WebService
IT新闻
新用户注册
刷新评论列表
标题
姓名
主页
验证码
*
内容(请不要发表任何与政治相关的内容)
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
相关文章:
基于SOAP报文的纯服务端测试
XFire客户端流程分析
实施WebService Security[WS-Security1.0]的Encrypt和Sign模式(XFire+WSS4J)
图文并茂——使用xfire编写webservice,并通过C#调用
.Net/C# 与 J2EE/Java Web Service 互操作完整实例
XPath详解
Java开发WebService实例--计数器
XFire完整入门教程
XFire 最新生火指南(上)
XFire生火指南下半部
相关链接:
网站导航:
博客园
BlogJava
博客生活
IT博客网
C++博客
PHP博客
博客园社区
管理博客
教师博客
天文博客
汽车博客
足球博客
股票博客
电子博客
管理
导航
首页
新随笔
联系
管理
<
2008年12月
>
日
一
二
三
四
五
六
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
统计
随笔 - 21
文章 - 279
评论 - 140
引用 - 0
留言簿
(12)
给我留言
查看公开留言
查看私人留言
随笔档案
(24)
2008年11月 (3)
2008年9月 (2)
2008年8月 (1)
2008年7月 (2)
2008年6月 (2)
2008年5月 (9)
2008年4月 (2)
2007年12月 (3)
文章分类
(277)
AJAX(7)
(rss)
Hibernate(3)
(rss)
J2ME(2)
(rss)
J2SE(36)
(rss)
JavaScript(57)
(rss)
JavaWeb(24)
(rss)
Java笔试与面试(52)
(rss)
opensource(13)
(rss)
Spring(9)
(rss)
SSH整合系列(2)
(rss)
Struts1.x(3)
(rss)
Struts2(11)
(rss)
WebService(14)
(rss)
数据库(10)
(rss)
数据结构与算法(7)
(rss)
设计模式(17)
(rss)
软件测试(10)
(rss)
文章档案
(228)
2008年12月 (1)
2008年11月 (4)
2008年10月 (2)
2008年9月 (2)
2008年8月 (10)
2008年7月 (22)
2008年6月 (13)
2008年5月 (45)
2008年4月 (17)
2008年3月 (5)
2008年2月 (11)
2008年1月 (27)
2007年12月 (45)
2007年11月 (24)
搜索
最新评论
1. re: javascript文件夹选择框的两种解决方案
我用了第一中方法。可是还有一个问题,就是选择了远程计算机上的文件夹,怎么获得全路径?
--justin
2. re: Flash图表(FusionChartsV3)的简单应用
就是说网页上有多个图表,当页面加载时所有动画效果已经完成,下边的图表无法看到动画的效果,只是个最终的结果,如果有循环控制的话就可以看到下边的图表时仍然可以看到动画效果,也相当于不断刷新自己吧!谢谢
--左
3. re: Flash图表(FusionChartsV3)的简单应用
不明白你说的什么意思,不断刷新Chart自己?
--々上善若水々
4. re: Flash图表(FusionChartsV3)的简单应用
请问一下楼主,如何让FusionCharts生成的图表在网页上循环播放啊,谢谢!!!
--左
5. re: Struts1.2实现单文件上传
方法太牛比了。mail:yaoyao19851023@163.com
--yaoyao
阅读排行榜
1. 一道Struts面试题(3009)
2. javascript文件夹选择框的两种解决方案(2294)
3. ExtJS & GTGrid 简单用户管理(1833)
4. jexcelapi使用小记(1749)
5. Flash图表(FusionChartsV3)的简单应用 (1706)
评论排行榜
1. Flash图表(FusionChartsV3)的简单应用 (19)
2. [原创]J2ME/J2EE实现用户登录交互(7)
3. Flash图片轮换显示的效果抽取(7)
4. ExtJS & GTGrid 简单用户管理(6)
5. StringBuffer和StringBuilder添加null值的误导(5)