1.导入jar包
这里写图片描述

2.
配置1:
配置web.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>/services/*</url-pattern>
  </servlet-mapping>

配置services.xml(路径WEB-INF/classes/META-INF/xfire/services.xml)
这里写图片描述
services.xml内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans  xmlns="http://xfire.codehaus.org/config/1.0">
<service>
    <name>Hello</name>
    <serviceClass>com.zhshch.test.IHello</serviceClass>
    <implementationClass>com.zhshch.test.Hello</implementationClass>
</service>
</beans>

解释:

<service>
    <name>Hello</name>//url路径的资源名字
    <serviceClass>com.zhshch.test.IHello</serviceClass>//资源接口
    <implementationClass>com.zhshch.test.Hello</implementationClass>//资源实现
</service>

配置2:不需要配置services.xml
配置web.xml

 <servlet>
    <servlet-name>XFireServlet</servlet-name>
    <servlet-class>
        com.zhshch.servlet.MyServlet
    </servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>XFireServlet</servlet-name>
    <url-pattern>/services/*</url-pattern>
  </servlet-mapping>

解释:

<servlet-class>
    com.zhshch.servlet.MyServlet
</servlet-class>
第一个配置的servlet指向的是xfire的servlet
这个配置指向的是我们自己定义的servlet

MyServlet内容如下:
public class MyServlet extends XFireServlet{

@Override
public void init() throws ServletException {
    super.init();
    Service service = new ObjectServiceFactory().create(IHello.class);
    service.setInvoker( new BeanInvoker( new Hello())) ;//Hello是实现类
    getXFire().getServiceRegistry().register(service);
}

}

3.接口和实现类

接口:
@WebService
public interface IHello {

public String sayHello(String name) ;

public ArrayList<Integer> getList(ArrayList<Integer> it) ;

public Map<String,Object> getMap(Map<String,Object> map);

public Student getStu(Student stu) ;

}

实现类:
@WebService
public class Hello implements IHello {

public String sayHello(String name) {
    System.out.println("hello world");
    return  name ;
}

public ArrayList<Integer> getList(ArrayList<Integer> it) {
    it.add(1) ;
    return it; 
}

public Map<String, Object> getMap(Map<String,Object> map) {
    map.put("name", "zhshch") ;
    return map ;
}

public Student getStu(Student stu) {
    stu.setName("zhshch") ;
    return stu ;
}

}

pojo(用来测试自定义对象):
public class Student {

private int age ;
private String name;
public int getAge() {
    return age;
}
public void setAge(int age) {
    this.age = age;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
} 

}

运行web成功后,浏览器测试发布是否成功
如下图:
这里写图片描述

4.客户端测试

public static void test1() throws Exception{
    XFireProxyFactory factory = new XFireProxyFactory(XFireFactory.newInstance().getXFire()) ;

    //如果是配置1,
    //这里url中services/后面跟的资源名是services.xml里的name
    //<name>Hello</name>
    //String url = "http://localhost:8080/MyXfire/services/Hello" ;

    //如果是配置2
    //这里url中services/后面跟的资源名是接口名:IHello
    String url = "http://localhost:8080/MyXfire/services/IHello" ;

    Service service = new ObjectServiceFactory().create(IHello.class) ;
    IHello hello = (IHello) factory.create(service, url) ;

    //测试字符串
    System.out.println(hello.sayHello("zhshch hello") );
    System.out.println("-------------------1---------");

    //测试map
    Map<String,Object> map = new HashMap<String, Object>();
    System.out.println(hello.getMap(map) );

    System.out.println("-------------------2---------");
    //测试自定义对象
    Student stu = new Student() ;
    stu.setAge(20) ;
    System.out.println(hello.getStu(stu).getName() );

    //测试list
    System.out.println("-------------------3---------");
    ArrayList<Integer> list = new ArrayList<Integer>();
    list.add(65) ;
    System.out.println(Arrays.toString(hello.getList(list).toArray() ));
}

demo

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐