xfire webservice 教程

作者:ThirdteenDevil 十三妖

qq: 181907667

 

说明:这个例子可以解决webservice 传递自定义对象

 

服务器的文件及设置

 

在web.xml配置xfire的servlet

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

 

 

建立想要发布程序的接口 IUserService.java

package com.devil13th.xfire; import java.util.List; public interface IUserService { public String msg(String g); public User findUsr(String usrName); public List getAllUsr(); }

 

 注意:getAllUsr返回的类型是List类型,如果是jdk1.4或以下版本要加入下面的文件,放在和发布的接口(IUserService)相同的目录下!文件的命名要和接口一样(接口名.aegis.xml),如果是jdk1.5或以上则使用泛型就可以了 IUserService.aegis.xml:

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

 

 

建立想要发布程序的接口实现 UserServiceImpl.java

package com.devil13th.xfire; import java.util.ArrayList; import java.util.List; public class UserServiceImpl implements IUserService{ public String msg(String g){ System.out.println(g); return g; }; public User findUsr(String usrName){ User u = new User(); u.setName(usrName); return u; } public List getAllUsr(){ List l = new ArrayList(); for(int i = 0 ; i < 5 ; i++){ User u = new User(); u.setName("name_"+ i); l.add(u); } return l; } }

 

 

所需要的User类 User.java

package com.devil13th.xfire; public class User { public String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }

 

 

建立services.xml

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://xfire.codehaus.org/config/1.0"> <service> <name>userService</name> <namespace>userServiceTest</namespace> <serviceClass> com.devil13th.xfire.IUserService </serviceClass> <implementationClass> com.devil13th.xfire.UserServiceImpl </implementationClass> </service> </beans>

 

 其中 name 是service名称用于后面输入网址访问使用
serviceClass是服务接口的名称
implementationClass是服务接口的实现类
把写好的services.xml放在src/META-INF/xfire目录下,生成到classes目录下。

注意是src下的META-INF,不是webroot下的META-INF

最近有些朋友因使用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 改成如下形式即可:

<?xml version="1.0" encoding="UTF-8"?> <beans> <service xmlns="http://xfire.codehaus.org/config/1.0"> <name>userService</name> <namespace>userServiceTest</namespace> <serviceClass> com.devil13th.xfire.IUserService </serviceClass> <implementationClass> com.devil13th.xfire.UserServiceImpl </implementationClass> </service> </beans>

 

 

 测试服务:

把服务打开后在地址栏中输入http://127.0.0.1:8080/xfire/services/userService?wsdl后的结果应该是一个xml就说明搭建成功了。

 

 

下面是客户端调用

建立接口 IUserService.java

package com.devil13th.client; import java.util.List; import com.devil13th.xfire.User; public interface IUserService { public String msg(String g); public User findUsr(String usrName); public List getAllUsr(); }

 

 这个接口要和服务端的接口一致

注意:getAllUsr返回的类型是List类型,如果是jdk1.4或以下版本要加入下面的文件,放在和发布的接口(IUserService)相同的目录下!文件的命名要和接口一样(接口名.aegis.xml),如果是jdk1.5或以上则使用泛型就可以了
这个接口和xml文件可以直接拷贝服务器端的接口和xml文件

 

建立接口使用的bean User.java

package com.devil13th.xfire; public class User { public String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }

 

 特别注意:这个bean的名称以及包名一定要和服务器端使用到的bean一样!!!!

 

客户端调用

package com.devil13th.client; 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; import com.devil13th.xfire.User; public class ClientTest { public static void main(String[] args) { Service serviceModel = new ObjectServiceFactory() .create(IUserService.class); XFireProxyFactory factory = new XFireProxyFactory(XFireFactory .newInstance().getXFire()); String helloWorldURL = "http://127.0.0.1:8080/xfire/services/userService"; try { IUserService ts = (IUserService) factory.create(serviceModel, helloWorldURL); // msg 方法调用 System.out.println(ts.msg("22")); //findUsr 方法调用 User u = ts.findUsr("十三妖"); System.out.println(u.getName()); //getAllUsr 方法调用 List l = ts.getAllUsr(); System.out.println(l.size()); for(int i = 0 , j = l.size(); i < j ; i++){ User ux = (User)l.get(i); System.out.println(ux.getName()); } } catch (Exception e) { System.out.println(e); } } }

 

 

 

一切ok啦 例子在附件中 写的比较详细了就不再做多余的解释了

 

 

 

 

你可能感兴趣的:(xml,bean,qq,webservice,servlet)