zoukankan      html  css  js  c++  java
  • XFire完整入门教程

    网上关于XFire入门的教程不少,要么是讲得很简单,就像Hello World一样的程序,要么就是通过IDE集成的工具来开发的,这对于不同的人群有诸多不便,关于XFire的一些详细的信息就不再多讲,可以参考官方网站和相关的文档,这里讲一个完整的入门实例。
    实例中包括三个情况,我想基本上可以概括所有的需求,或者自己稍加扩展即可。先来看看我们的Interface。

      1package test;
      2 
      3import java.util.List;
      4
      5public 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两个类的代码如下:

     package 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
     package 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定义描述文件,如下:

     <?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" />-----接受的参数类型,index--第几个参数
    6            <return-type componentType="test.Course" />-----List内对象的完整类名
    7        </method>
    8    </mapping>
    9</mappings>

    请注意,此文件一定要放到与IHelloService.java相同的目录下面,否则会出错。
    5、在Web.xml中配置XFire需要用到的Servlet,代码如下:

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

    以上代码均无注释,因为都非常简单,呵呵。如有不清楚的地方,请留言!

  • 相关阅读:
    typedef void (*funcptr)(void) typedef void (*PFV)(); typedef int32_t (*PFI)();
    STM32 STM32F4 寄存器怎么配置不上, 无法往寄存器写入数据
    GPIO
    JSP和selevt 生命周期详解(JSP的生命周期和select很像,jsp底层就是一个selevt)
    jquery自带的排序方法(js也是)
    GET和POST是HTTP请求的两种基本方法,区别是什么!?
    springboot特性
    restful风格接口类型和优点
    提升必看!!!
    分组函数 partition by 的详解,与order by 区别
  • 原文地址:https://www.cnblogs.com/liutt1989/p/5282591.html
Copyright © 2011-2022 走看看