当前位置: 代码迷 >> Web前端 >> 运用xfire发布WebService(二)
  详细解决方案

运用xfire发布WebService(二)

热度:182   发布时间:2012-10-29 10:03:53.0
使用xfire发布WebService(二)
本Blog所有内容不得随意转载,版权属于作者所有。如需转载请注明出处。

上次内容写了简单的操作基本类型的应用,这次写的是复杂类型的,包括返回值是List ,Map,以及自定义对象等。

1.  在上次所建立的工程基础上,修改IHelloService,增加两个方法:
public Course choose(Student student);
public List  test(List temp);

同时修改其实现类HelloService,内容如下:
public Course choose(Student student) {
System.out.println(student.getName());

Course course=new Course();
course.setCourseName("Computer Science");

return course;
}

public List test(List temp) {

for(int i=0;i<temp.size();i++)
{
System.out.println(temp.get(i));
}

List temp2=new ArrayList();

Course course1=new Course();
course1.setCourseName("English");
temp2.add(course1);

Course course2=new Course();
course2.setCourseName("Art");
temp2.add(course2);

return temp2;
}

2.  建立两个类,内容分别如下:
package com.lawrenst.pojo;

public class Course {

private String courseName;

public String getCourseName() {
return courseName;
}

public void setCourseName(String courseName) {
this.courseName = courseName;
}

}

package com.lawrenst.pojo;

public class Student{

private String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

}

代码很简单吧,不用我解释吧?

3.  启动服务器,并访问wsdl文件,出现了什么?出现了异常,大概是什么什么为空。

xfire默认是Aegis绑定,需要建立一个XXX.aegis.xml文件,让xfire知道test方法中的参数和返回对象是什么类型的。

建立IHelloService.aegis.xml,注意,必须是和接口名称相同,并且和IHelloService在相同目录下。内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<mappings>
    <mapping>
        <method name="test">
            <parameter componentType="java.lang.String" />
            <return-type componentType="com.lawrenst.pojo.Course" />
        </method>
    </mapping>
</mappings>

好了,重启服务器,wsdl文件能够正常显示了。

4.  同样建立客户端(这里我使用的是纯POJO方式,动态方式我没有找到解决的办法,如果哪位高手找到了解决的办法,可以给我留言)

package com.lawrenst.test;

import java.net.MalformedURLException;
import java.util.ArrayList;
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.lawrenst.pojo.Course;
import com.lawrenst.pojo.Student;
import com.lawrenst.service.IHelloService;

public class TestClient {

public static void main(String args[])
{
Service serviceModel=new ObjectServiceFactory().create(IHelloService.class);
XFireProxyFactory factory = new XFireProxyFactory(XFireFactory.
newInstance().getXFire());
String url="http://localhost:8080/Xfire/services/HelloService";

try {
IHelloService service=(IHelloService) factory.create(serviceModel, url);

//测试sayHello方法
System.out.println(service.sayHello("lawrenst"));

//测试choose方法
Student student=new Student ();
student.setName("jijingping");
Course course=service.choose(student);
System.out.println(course.getCourseName());

//测试test方法
List temp=new ArrayList();//给test方法传递的参数
temp.add("wangxiaosen");
temp.add("wangxinlei");
temp.add("wangye");
List t=service.test(temp);

for(int i=0;i<t.size();i++)
{
Course c=t.get(i);
System.out.println(c.getCourseName());
}

} catch (MalformedURLException e) {
e.printStackTrace();
}
}

}

好了 再次成功了,看看服务器端和客户端是不是打印出了相应的东西?
  相关解决方案