http://wenku.baidu.com/view/7979370116fc700abb68fc42.html
实例中包括三个情况,我想基本上可以概括所有的需求,或者自己稍加扩展即可。先来看看我们的Interface。
package test;
import
java.util.List;
public interface IHelloService
{
public String sayHello(String ttt);
public Course choose(User u);
public List test(List t);
}
这其中包含了简单对象的传递,对象的传递,List的传递。
具体的开发步骤如下:
1、定义Web Service的接口,代码见上面的接口定义。
2、实现接口和业务逻辑,代码如下:
package test;
import
java.util.ArrayList;
import
java.util.List;
public class
HelloServiceImpl implements IHelloService {
public String sayHello(String ttt) {
return "Hello, "+ttt;
}
public Course choose(User u){
System.out.println(u.getName());
Course c=new Course();
c.setName("Eee");
return c;
}
public List test(List t){
for (int i = 0; i < t.size(); i++) {
System.out.println((String) t.get(i));
}
List al=new ArrayList();
Course c=new Course();
c.setName("EeeDDDDDD");
al.add(c);
return al;
}
}
用到的User和Course两个类的代码如下:
package test;
public class
User {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package test;
public class
Course {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
3、编写XFire要求的WebSevice定义描述文件,如下:
<?xml
version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://xfire.codehaus.org/config/1.0">
<service>
<name>HelloService</name>
<namespace>http://test/HelloService</namespace>
<serviceClass>test.IHelloService</serviceClass>
<implementationClass>test.HelloServiceImpl</implementationClass>
</service>
</beans>此文件放在src/META-INF/xfire/services.xml,编译时会自动编译到classes的相应目录下面。
4、因为我们用到了List等集合类型,所以需要定义Mapping关系,文件名为:src/test/IHelloService.aegis.xml,代码如下:
<?xml version="1.0"
encoding="UTF-8"?>
<mappings>
<mapping>
<method name="test">
<parameter index="0" componentType="java.lang.String"
/>
<return-type componentType="test.Course" />
</method>
</mapping>
</mappings>
请注意,此文件一定要放到与IHelloService.java相同的目录下面,否则会出错。
5、在Web.xml中配置XFire需要用到的Servlet,代码如下:
<?xml
version="1.0" encoding="UTF-8"?>
<web-app
version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
<servlet-name>XFireServlet</servlet-name>
<servlet-class>
org.codehaus.xfire.transport.http.XFireConfigurableServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>XFireServlet</servlet-name>
<url-pattern>/servlet/XFireServlet/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>XFireServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
此时Web Service的服务端就开发完成了。
我们来看看客户端的代码吧,也很简单,如下:
package test;
import java.net.MalformedURLException;
import
java.util.ArrayList;
import
java.util.List;
import
org.codehaus.xfire.XFireFactory;
import
org.codehaus.xfire.client.XFireProxyFactory;
import
org.codehaus.xfire.service.Service;
import
org.codehaus.xfire.service.binding.ObjectServiceFactory;
public class Client
{
public static void main(String[] args) {
Service srvcModel = new ObjectServiceFactory()
.create(IHelloService.class);
XFireProxyFactory factory = new XFireProxyFactory(XFireFactory
.newInstance().getXFire());
String helloWorldURL = "http://localhost:8080/xfiretest/services/HelloService";
try {
IHelloService srvc = (IHelloService) factory.create(srvcModel,
helloWorldURL);
System.out.println(srvc.sayHello("Robin"));
User u=new User();
u.setName("RRRRR");
Course c=srvc.choose(u);
System.out.println(c.getName());
List al=new ArrayList();
al.add("1212");
al.add("2222");
List t=srvc.test(al);
for (int i = 0; i < t.size(); i++) {
Course co=(Course)t.get(i);
System.out.println(co.getName());
}
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
}
网上关于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、实现接口和业务逻辑,代码如下:
1package test;
2
3import java.util.ArrayList;
4import java.util.List;
5
6public 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两个类的代码如下:
1package test;
2
3public 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
1package test;
2
3public 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的相应目录下面。
最近有些朋友因使用Spring2.0以上版本时,会发生如下异常:
ERROR - Error initializing XFireServlet.
org.springframework.beans.factory.BeanDefinitionStoreException: Unrecognized xbean element mapping: beans in namespace http://xfire.codehaus.org/config/1.0
当出现如下异常时,请将此文件用如下内容替换:
1<?xml version="1.0" encoding="UTF-8"?>
2<beans>
3 <service xmlns="http://xfire.codehaus.org/config/1.0"
4 xmlns:s="http://www.springframework.org/schema/beans"
5 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
6 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
7 <name>HelloService</name>
8 <namespace>http://test/HelloService</namespace>
9 <serviceClass>test.IHelloService</serviceClass>
10 <implementationClass>test.HelloServiceImpl</implementationClass>
11 </service>
12</beans>
13
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的服务端就开发完成了。
我们来看看客户端的代码吧,也很简单,如下:
1package test;
2
3import java.net.MalformedURLException;
4import java.util.ArrayList;
5import java.util.List;
6
7import org.codehaus.xfire.XFireFactory;
8import org.codehaus.xfire.client.XFireProxyFactory;
9import org.codehaus.xfire.service.Service;
10import org.codehaus.xfire.service.binding.ObjectServiceFactory;
11
12public 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
以上代码均无注释,因为都非常简单,呵呵。如有不清楚的地方,请留言!
XFire概述:
XFire是codeHaus组织提供的一个开源框架,它构建了POJO和SOA之间的桥梁,主要特性就是支持将POJO通过非常简单的方式发布成Web服务,这种处理方式不仅充分发挥了POJO的作用,简化了Java应用转化为Web服务的步骤和过程,也直接降低了SOA的实现难度,为企业转向SOA架构提供了一种简单可行的方式。
编辑本段目前支持的特性主要包括:
支持
支持将Web服务绑定到POJO、XMLBeans、JAXB1.1、JAXB2.0和Castor;
支持基于HTTP、JMS、XMPP等多种协议访问Web服务;
支持多种Web服务业界重要标准如SOAP、WSDL、Web服务寻址(WS-Addressing)、Web服务安全(WS-Security)等;
支持JSR181,可以通过JDK5配置Web服务;
高性能的SOAP实现;
服务器端、客户端代码辅助生成;
对Spring、Pico、Plexus等项目的支持等。
目录
· XFire安装包:
· XFire框架支撑环境:
· XFire应用配置:
· 参考资料:
· XFire安装包:
· XFire框架支撑环境:
· XFire应用配置:
参考资料
XFire - XFire安装包:XFire框架目前的最新版本是1.2.6,可以访问xfire.codehaus.org下载XFire框架的安装包,下载时请选择“全部二进制发布包(BinaryDistributioninzippackage)”,而不仅仅是“XFirejar文件(JarofallXFiremodules)”。
下载完成后,我们可以将下载的.zip文件解压缩到任意的文件夹中(后面的章节中使用%XFIRE_HOME%表示XFire框架的安装目录),
编辑本段解压缩后形成的文件目录结构如下:
api目录
api目录中是XFire框架中所有类(class)对应的API文档,
xfire目录结构
为开发者使用XFire完成应用开发提供帮助。
examples目录
examples目录中包含了所有随XFire二进制包发布的实例,包括这些实例的源代码和相关Web应用配置内容。
lib目录
lib目录中包含XFire运行所需要的外部支持类包(.jar文件),可以根据不同项目所需的XFire特性选择所需要的支持类包。保守的方法是在Web项目中包含所有的外部支持类包(.jar文件)。
manual目录
manual目录中包含有XFire框架的帮助文档,开发者可以从这些帮助文档中学习更多运用XFire框架实现SOA的知识和技巧。
modules目录
modules目录中包含了XFire框架根据不同特性分别编译的二进制包文件。发布基于XFire框架的Web项目时,可以选择使用该目录下的所有.jar文件,也可以选择XFire-all-1.2.6.jar文件。
XFire-all-1.2.6.jar
XFire框架的二进制包文件,包含了全部的模块(modules)。
LICENSE.txt
LICENSE.txt文件中包含了XFire框架的授权协议。
NOTICE.txt
README.txt
这两个文件中包含了XFire发布时的一些有用的信息。
编辑本段JDK和Servlet容器的支持
概述
XFire - XFire框架支撑环境:XFire框架是一种基于Servlet技术的SOA应用开发框架,要正常运行基于XFire应用框架开发的企业应用,除了XFire框架本身之外,还需要JDK和Servlet容器的支持。
1JDK版本选择下载和安装
XFire支持非常多的特性,其中不同的特性对JDK版本的要求有所不同,比如如果项目中选择基于JSR181标准发布Web服务,我们就需要选择JDK5或者以上版本,如果仅仅选择将Web服务绑定到最简单的POJO,我们只需要选择JDK1.4版本即可。
JDK各版本均可以在java.sun.com网站上下载,如何安装JDK请参考SUN公司的相关技术文档和JDK的帮助文档。
2Servlet容器下载和安装
XFire是一种基于Servlet技术的SOA应用开发框架,需要Servlet容器的支持。XFire支持在多种Servlet容器中运行,包括Websphere、Weblogic、TOMCAT等。为了说明的简单,我们选择使用TOMCAT(版本5.0.30)作为XFire的运行容器,所有配置过程和发布步骤的说明也均是针对TOMCAT,如果读者使用TOMCAT之外的其它Servlet容器或者选择了TOMCAT的其它版本,下面的配置过程和步骤可能需要做出调整,请读者根据实际Servlet容器的帮助文档进行相应调整。
TOMCAT各版本均可以在tomcat.apache.org网站上下载,如何正确安装TOMCAT服务器请参考TOMCAT服务器的帮助文档。
3xalan
XFire需要xalan项目的支持,然而1.2.6版本中并没有带有相应的jar文件,因此请访问xml.apache.org,下载xalan项目的二进制包。
编辑本段如何从零开始创建XFire应用开发环境
概述
编辑本段 回目录 XFire - XFire应用配置:前面的章节中我们下载和安装了XFire安装包和所需要的支持环境,现在我们开始学习如何从零开始创建XFire应用开发环境。下面的所有配置过程和发布步骤均针对TOMCAT(版本5.0.30)服务器,如果选择其它的Servlet容器,下面的配置过程和步骤可能需要做出调整,请读者根据实际Servlet容器的帮助文档进行相应调整。
1创建Web应用目录和基本元素
在%TOMCAT_HOME%/webapps目录下创建新的Web应用目录“XFire”
[注]其中的%TOMCAT_HOME%指向TOMCAT的安装目录。
在”XFire”目录下创建”WEB-INF”目录、
在”WEB-INF”目录下创建”lib”目录和”classes”目录
在”WEB-INF”目录下创建Web应用描述文件”web.xml”,”web.xml”文件的内容见清单1-1。
清单1-1WEB-INF\web.xml (servlet已定义)
<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- START SNIPPET: webxml -->
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http: // java.sun.com / dtd/web-app_2_3.dtd">
<web-app>
<servlet>
<servlet-name>xfireServlet</servlet-name>
<display-name>xfire Servlet</display-name>
<servlet-class>
org.codehaus.xfire.transport.http.xfireConfigurableServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>xfireServlet</servlet-name>
<url-pattern>/servlet/xfireServlet/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>xfireServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
</web-app>
<!-- END SNIPPET: webxml -->
2拷贝XFire所需的支持类包文件
拷贝%XFIRE_HOME%/lib目录下所有文件到“1、创建Web应用目录和基本元素”中所创建的”lib”目录下,将%XFIRE_HOME%/XFire-all-1.2.6.jar文件也拷贝到“1、创建Web应用目录和基本元素”中所创建的”lib”目录下。将xalan安装包中的所有jar文件和所需要的支持jar文件拷贝到相同的”lib”目录下。
[注]为了减少拷贝的jar文件的数目,开发者可以根据项目的需要选择需要拷贝的jar文件,而不是全部拷贝,如何根据需要选择拷贝合适的类包文件请访问XFire站点。
3配置XFire框架运行所需的Servlet
修改web.xml文件,在其中增加如下Servlet定义内容。
4创建XFire框架的服务发布文件
4、创建XFire框架的服务发布文件services.xml
在“1、创建Web应用目录和基本元素”中创建的classes目录下新建目录”META-INF\xfire”;
在步骤a)中新建的”xfire”文件目录下创建新文件services.xml,文件的默认内容如清单1-2。
清单1-2WEB-INF\classes\META-INF\xfire\services.xml
编辑本段 回目录 XFire - 参考资料:访问XFire框架用户指南可以获得更多关于XFi
Eclipse中配置xfire
re的使用帮助。
访问XFire的Eclipse插件可以获得关于XFire提供的Eclipse插件的更多信息。
编辑本段将 POJO 发布成 Web 服务
XFire 框架中,我们有两种方式将 POJO 发布成 Web 服务:
一种方式是直接使用 Web 服务接口和 Web 服务实现类(POJO)来发布; 另一种方式是基于 JSR181 标准和注释技术将被注释的 POJO 发布成 Web 服务; 下面的章节中我们将学习使用第一种方式来完成 POJO 的 Web 服务发布。我们将使用经典的 ”Hello World!”例子来演示将 POJO 发布成 Web 服务所需要的步骤,不过我们不再是简单的访问一个 Java 方法来输出 ”Hello World!”字符串,而是转为在 SOA 环境下实现:Web 服务客户端通过访问服务器端发布成 Web 服务的 POJO 获得返回的 ”Hello World!”字符串后输出到客户端的控制台上。
将 POJO 发布成 Web 服务的基本步骤如下:
创建 Web 服务接口,声明该 Web 服务对外暴露的接口; 创建 Web 服务实现类,为 Web 服务接口提供实现; 修改 XFire 框架的服务发布文件 ---- services.xml,将 POJO 发布成 Web 服务