加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

使用xfire发布WebService

发布时间:2020-12-17 00:12:28 所属栏目:安全 来源:网络整理
导读:1. 下载xfire-all.jar(可以去这里 http://repository.codehaus.org/org/codehaus/xfire/ 下载)和其依赖包,放到classpath下。? 2. 新建一个工程HelloWebService(我用的是MyEclipse6.0+Tomcat5.5,注意尽量不要用MyEclipse自带的“创建WebService工程”功能

1. 下载xfire-all.jar(可以去这里http://repository.codehaus.org/org/codehaus/xfire/下载)和其依赖包,放到classpath下。?

2. 新建一个工程HelloWebService(我用的是MyEclipse6.0+Tomcat5.5,注意尽量不要用MyEclipse自带的“创建WebService工程”功能)。? 3. 创建一个Interface,名称是IHelloService,其内容如下:? ??????? package com.lawrenst.service;? ??????? public interface IHelloService{? ?????? public String sayHello(String name);? ??????? }? ??? 并创建其实现类,HelloServiceImpl,内容如下,? ??????? package com.lawrenst.service;? ??????? public class HelloServiceImplimplements IHelloService{? ??????? public String sayHello(String name) {? ???? return "Hello "+name;? ??????? }? ??????? }? ??? 由于代码比较简单,就不写注释了。? 4.? 在src下建立一个文件夹,META-INF(注意大小写),在META-INF下建立一个xfire文件夹,在xfire中建立services.xml文件。(真啰嗦),其内容如下:? <beans xmlns="http://xfire.codehaus.org/config/1.0">? <service>? <name>HelloService</name>? ??????????????? <!--? <namespace>? http://oe-way.com/BookService? </namespace>? -->? ?????????????? <!-- 接口-->? ?????????????? <serviceClass>com.lawrenst.service.IHelloService</serviceClass>? ?????????????? <!--? 接口的实现类-->? ?????????????? <implementationClass>? test.risesoft.BookServiceImpl? </implementationClass>? ??????????????? <properties>? <property key="mtom-enabled">true</property>? </properties>? <style>wrapped</style>? <use>literal</use>? <scope>application</scope>? </service>? </beans>? 5. 在web.xml中配置上xfire? ????? <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>? 6.?? 访问 http://localhost:8080/HelloWebService/services/HelloService?wsdl? ???? 好了页面出现了,至此,你的第一个WebService发布成功了。? 7.?? 编写客户端程序? ???? 在这里,我介绍两种方式,第一种是纯POJO方式,第二种是动态方式? ???? 第一种:纯POJO方式? ???? package com.lawrenst.test;? ???? import java.net.MalformedURLException;? ???? 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.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/HelloWebService/services/HelloService";? try {? IHelloService service=(IHelloService) factory.create(serviceModel,url);? //测试sayHello方法? System.out.println(service.sayHello("lawrenst"));? } catch (MalformedURLException e) {? e.printStackTrace();? }? }? }? ok,看看你的控制台,是不是出现了预期的东西。? ? 第二种:动态方式(动态模式不需要服务端的class,不过性能和复杂对象映射等估计做得不会太好。)? Client client = new Client(new URL? ????????? ("http://localhost;8080/HelloWebService/services/HelloService?WSDL"));? Object[] results = client.invoke("sayHello",new Object[] {"lawrenst"});? System.out.println(results[0]);? ? ok,到此,一切正常,结束。? 上面内容写了简单的操作基本类型的应用,这次写的是复杂类型的,包括返回值是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();? }? }? }? 好了 再次成功了,看看服务器端和客户端是不是打印出了相应的东西?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读