环境:Eclipse SDK 3.2.2 ,Tomcat5.5.20,XFire-1.2.6。
首先建立一个动态web项目,命名为“WSProject”,将xfire-distribution-1.2.6.zip解压缩后,把xfire-all-1.2.6.jar和lib目录下的所有jar包都拷贝到项目的WebContent/WEB-INF/lib目录下。编写一个用于发布的类文件HelloService.java。这里我用一个简单的类,它接受传来的name参数,返回“{ name },你好!”。代码如下:
先说services.xml,它是对所有要发布的服务的描述文件,xfire就是依据这些信息来发布你的服务。这里针对我们刚才那个类建立services.xml。内容如下:
service标签的子标签不止这两个,但其余的都是可选的。关于services的更多描述,请参阅xfire的官方网站。文件建好了,就是把它放到项目的哪个位置的问题了,这里我在项目的WebContent/ META-INF目录下面新建一个xfire文件夹,把services.xml文件放到这个新建文件夹里。最后再把META-INF文件夹整个移到WebContent/ WEB-INF目录下,这时services.xml文件的配置全部完成,如果我说的还不清楚,请直接看图一,图中左侧有文件结构,只要照那个结构调整项目中的文件及文件夹的位置就可以了。
注意,如果services.xml文件的放置位置不对,在用http://localhost:8080/WSProject/services/网址访问服务器时,会抛出下面的异常:
到这里第一部分的所有步骤已经完成,打开Tomcat,在服务器上运行这个动态web项目。输入网址http://localhost:8080/WSProject/services/HelloService?wsdl,如果正确发布,会得到如图一中显示的wsdl文档。
图一
以后要访问这个web服务的wsdl文件,只需要把Tomcat打开,然后输入上面的网址就可以了,这在第二部分创建客户端访问web服务时要用到。好了,web服务的发布就完成了。
首先建立一个动态web项目,命名为“WSProject”,将xfire-distribution-1.2.6.zip解压缩后,把xfire-all-1.2.6.jar和lib目录下的所有jar包都拷贝到项目的WebContent/WEB-INF/lib目录下。编写一个用于发布的类文件HelloService.java。这里我用一个简单的类,它接受传来的name参数,返回“{ name },你好!”。代码如下:
1package hao;
2
3public class HelloService {
4 public String sayHello(String name){
5 return name+",你好!";
6 }
7}
8
下一步就是对XML文件的配置,这些配置非常关键,大多错误也出在这上面。2
3public class HelloService {
4 public String sayHello(String name){
5 return name+",你好!";
6 }
7}
8
先说services.xml,它是对所有要发布的服务的描述文件,xfire就是依据这些信息来发布你的服务。这里针对我们刚才那个类建立services.xml。内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xfire.codehaus.org/config/1.0">
<service>
<name>HelloService</name>
<serviceClass>hao.HelloService</serviceClass>
</service>
</beans>
<beans xmlns="http://xfire.codehaus.org/config/1.0">
<service>
<name>HelloService</name>
<serviceClass>hao.HelloService</serviceClass>
</service>
</beans>
service标签的子标签不止这两个,但其余的都是可选的。关于services的更多描述,请参阅xfire的官方网站。文件建好了,就是把它放到项目的哪个位置的问题了,这里我在项目的WebContent/ META-INF目录下面新建一个xfire文件夹,把services.xml文件放到这个新建文件夹里。最后再把META-INF文件夹整个移到WebContent/ WEB-INF目录下,这时services.xml文件的配置全部完成,如果我说的还不清楚,请直接看图一,图中左侧有文件结构,只要照那个结构调整项目中的文件及文件夹的位置就可以了。
注意,如果services.xml文件的放置位置不对,在用http://localhost:8080/WSProject/services/网址访问服务器时,会抛出下面的异常:
Exception:
javax.servlet.ServletException: Error initializing XFireServlet.
root cause:
org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [META-INF/xfire/services.xml]; nested exception is java.io.FileNotFoundException: class path resource [META-INF/xfire/services.xml] cannot be opened because it does not exist
然后是web.xml文件,在项目已有的web.xml文件基础上修改一下就可以。修改后的最终内容如下:
<?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>
</web-app>
<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>
</web-app>
到这里第一部分的所有步骤已经完成,打开Tomcat,在服务器上运行这个动态web项目。输入网址http://localhost:8080/WSProject/services/HelloService?wsdl,如果正确发布,会得到如图一中显示的wsdl文档。
图一
以后要访问这个web服务的wsdl文件,只需要把Tomcat打开,然后输入上面的网址就可以了,这在第二部分创建客户端访问web服务时要用到。好了,web服务的发布就完成了。