使用Xfire构建JAVA的webService全过程(从服务端到客户端)

本文介绍如何使用Xfire和Spring框架搭建WebService服务端及客户端。详细步骤包括创建项目、配置依赖、编写业务接口与实现类、配置Spring上下文及Xfire等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前一阵公司要求写一个WebService 工程来提供外部访问,并且写一个客户端访问别人的提供的WS,当时对WS一无所知,开发完之后学到了一些知识,所以写一篇文章跟大家分享一下最近开发的经验。
我使用的框架是Xfire1.2+spring2.0。


1.首先新建一个Web Project,命名为:testws1。

2.添加工程所需要的包:xfire-all-1.2.6.jar,spring.jar,commons-logging.jar,spring-webmvc.jar,jdom-1.0.jar,wsdl4j-1.6.1.jar,jsr173_api-1.0.jar,XmlSchema-1.4.2.jar,commons-httpclient-3.0.jar,commons-codec-1.3.jar,wstx-asl-3.2.0.jar。一个一个试出来的……,在源码里面都有。

3.新建一个业务接口,假设向外提供的WebService的方法都是从接口中定义的,然后具体的业务类实现这些接口:


package com.lonway.service.ints;

public interface HelloInt {

String HelloWorld( String name );

}



4.新建一个业务逻辑类,实现了业务接口HelloInt:


package com.lonway.service.imp;

import com.lonway.service.ints.HelloInt;

public class HelloImp implements HelloInt {

public String HelloWorld(String name) {

if( "".equals( name ) || name == null )
return "请输入您的姓名哦!";

return "Hello " + name;
}
}



5.在WEB-INF下面新建文件:xfire-servlet.xml,内容如下:


<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">


<!-- XFire基本配置 -->
<import resource="classpath:org/codehaus/xfire/spring/xfire.xml" />
<!-- 设置访问地址 -->
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="urlMap">
<map>

<!-- 显示WebService 访问路径,有几个路径就需要 配置几个路径。 -->

<entry key="/HelloWorld.ws">
<ref bean="HelloworldWS" /><!--与下面的是对应的。-->
</entry>


</map>
</property>
</bean>

<!-- 使用XFire导出器 -->
<bean id="baseWebService" class="org.codehaus.xfire.spring.remoting.XFireExporter" lazy-init="false" abstract="true">
<!-- xfire.xml中定义的工厂 -->
<property name="serviceFactory" ref="xfire.serviceFactory" />
<!-- xfire.xml中的xfire实例 -->
<property name="xfire" ref="xfire" />
</bean>

<!-- START TEST -->
<bean id="HelloworldWS" parent="baseWebService"><!-- 服务请求的地址,与上面访问的url地址是对应的 -->
<property name="serviceBean" ref="HelloWorldI" /><!--与spring配置文件中的Bean对应-->
<property name="serviceClass" value="com.lonway.service.ints.HelloInt" /><!-- 以前定义的业务接口 -->
</bean>
<!-- END TEST -->

</beans>


6.打开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">

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/SpringContext.xml,/WEB-INF/xfire-servlet.xml
</param-value>
</context-param>

<!-- begin Spring_config -->
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<listener>
<listener-class>
org.springframework.web.util.IntrospectorCleanupListener
</listener-class>
</listener>
<!-- end Spring_config -->


<!-- begin XFire_config -->
<!-- 设置Xfire访问的Servlet以及路径后缀 -->
<servlet>
<servlet-name>xfire</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>xfire</servlet-name>
<url-pattern>*.ws</url-pattern>
</servlet-mapping>

<servlet>
<!-- 配合Spring容器中XFire一起工作的Servlet-->
<servlet-name>xfireServlet</servlet-name>
<servlet-class>
org.codehaus.xfire.spring.XFireSpringServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>xfireServlet</servlet-name>
<!-- 在这个URL下开放Web Service服务 -->
<url-pattern>/service/*</url-pattern>
</servlet-mapping>
<!-- end XFire_config -->

</web-app>





7.在WEB-INF目录下面新建Spring配置文件,命名为:,内容如下:


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">

<beans>

<!-- webService Test -->

<bean id="HelloWorldI"
class="com.lonway.service.imp.HelloImp">
</bean>

<!-- WebService_config End -->
</beans>




8.把你的工程部署到Tomcat下面,然后开启Tomcat吧。在浏览器地址栏里面输入地址:
http://Tomcat地址:Tomcat端口/service
如果你这个时候能在页面里面看到你的WebService的接口,并且可以点进去看到内容,就说明你成果了。如果不行的话,请仔细检查下哪里做错了吧。


好了,服务端开发完成了,总得有一个客户端去调用吧,下面写一个客户端,属于动态的那种,直接访问WebService的地址,然后调用里面的方法即可。直接贴代码,注意,里面的访问路径是要改的:


package com.lonway.service.client;

import java.net.URL;

import org.codehaus.xfire.client.Client;


public class WSClient {

public static void main(String[] args) {

try{
//注意:声明服务端的地址,这里是我自己的地址,根据个人设置改变
String serverURLStr = "http://localhost:8080/testws1/service/HelloInt?wsdl";
Client client = new Client(new URL( serverURLStr ));

//invoke方法第一个参数是方法的名称,第二个调用该是方法所需的参数。
Object[] results = client.invoke("HelloWorld", new Object[] {"Jets"});

//当你看到控制台输出 Hello Jets 就代表成功了
System.out.println((String) results[0]);

} catch(Exception e){
throw new RuntimeException(e);
}

}

}





至于前面写的 HelloImp 这个业务层,怎么去扩展,大家自己去自由发挥吧。

终于写完,把源码发上来,不明白的直接看里面。解压缩之后直接附加到MyEclipse里面即可,怎么附加工程就不说了……希望东西对大家有帮助,也算是一个总结。

最后发现JavaEye好像用chrome浏览器上传附件有BUG--!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值