使用XFire开发WebServices服务端和客户端

代码已亲测,全部通过

创建web service的时候一直报java.lang.ClassNotFoundException: org.jdom.Element这个错误,原因是导入jdom jar包的版本不正确。

所用的jar包包括:

activation-1.0.2.jar

commons-codec-1.4.jar

commons-httpClient-3.1.jar

commons-logging-1.1.2.jar

jaxen-1.1.6.jar

jdom-1.0.jar

log4j.jar

spring-2.5.6

spring -context-3.2.1.RELEASE.jar

stax-api-1.0-2.jar

stax-utils-20070216.jar

wsdl4j-1.6.3.jar

wss4j-1.5.12.jar

wstx-asl-3.2.0.jar

xbean-spring-3.16.jar

xfire-all-1.2.6.jar

xfire-jsr181-api-1.0-M1.jar

xml-apis-1.0.b2.jar

XmlSchema-1.4.5.jar

xmlsec-1.5.5.jar

使用xfire开发web service

  1. 配置XFire运行环境;

在Tomcat下新建一个Web Applications,命名为stove,然后在其WEB_INF目录下新建一个web.xml文件,文件中输入:

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

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

</web-app>

其中主要就是引入了XFireServlet,用以处理Web service请求,并且负责提供Web Service的WSDL,如果你发布了一个名为BookService的Web Service,则可以通过网址:

http://<服务器>[端口]/<webapp名>/services/BookService来访问这个Web service,并且通过http://<服务器>[端口]/<webapp名>/services/BookService?WSDL来得到这个Web Service的WSDL信息。

2. 开发最简单的Web Service

在src目录下创建一个package:

cn.com.pansky.webservice.xfire.study,在这个包下面新建一个接口:

package cn.com.pansky.webservice.xfire.study;

public interface SayHiService {

   public String sayHi(String name);   public Person getPerson(User u); //对象的传递     public List<Person> getPersonList(Integer age, String name); //List的传递 
}

这个接口是告诉服务器你的Web service哪些方法可以被用户调用的。下面再来写一个SayHiService的实现类,以完成业务逻辑:

package cn.com.pansky.webservice.xfire.study;

public class SayHiserviceImpl implements SayHiService{

   @Override

   public String sayHi(String name) {

     if(name == null){

        return "连名字都不肯告诉我么?";

     }

     return name+",你吃了么,没吃回家吃饭去吧!";

   }    @Override    public Person getPerson(User u) {        Person p = new Person();        p.setAge(24);        p.setName(u.getName());        return p;    }

    @Override    public List<Person> getPersonList(Integer age, String name) {        Person p = new Person();        p.setAge(age);        p.setName(name);        List<Person> list = new ArrayList<Person>();        list.add(p);        return list;    }

}

这是它要用到的接口和两个POJO类

package cn.com.pansky.webservice.xfire.model;

public class User {
    private String name;

    public String getName() {
        return name;
    }

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

}
package cn.com.pansky.webservice.xfire.model;

public class Person {
    private Integer age;
    private String name;

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

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

3. 把JAVA类发布为Web Service:

在WEB_INF目录下新建文件夹:META-INF/xfire,然后在该文件夹下新建一个XML文件:service.xml,文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://xfire.codehaus.org/config/1.0">

  <service>
    <name>SayHiService</name>
    <namespace> http://localhost:8080/SayHiService</namespace>     <serviceClass>cn.com.pansky.webservice.xfire.study.SayHiService</serviceClass>
    <implementationClass>
      cn.com.pansky.webservice.xfire.study.SayHiserviceImpl
    </implementationClass>
    <use>literal</use>
    <scope>application</scope>
  </service>

</beans>

这个文件定义一个Web Service:SayHiService,并同时定义了接口和实现类。

创建客户端调用:

方法一:通过WSDL地址来创建动态客户端

package cn.com.pansky.webservice.xfire.study;

import java.net.MalformedURLException;
import java.net.URL;
import org.codehaus.xfire.client.Client;

public class SayHiClient {
   public static void main(String args[]) throws MalformedURLException, Exception{
     Client client = new Client(new URL("http://127.0.0.1:8080/stove/services/SayHiService?wsdl"));
       Object[] results11 = client.invoke("sayHi", new Object[] { "Jadyer22" });
     System.out.println(results11[0]);
   }
}

方法二:通过服务端提供的端口来创建客户端

package cn.com.pansky.webservice.xfire.study;

import java.net.MalformedURLException;
import java.util.List;

import org.codehaus.xfire.client.XFireProxyFactory;
import org.codehaus.xfire.service.Service;
import org.codehaus.xfire.service.binding.ObjectServiceFactory;

import cn.com.pansky.webservice.xfire.model.Person;
import cn.com.pansky.webservice.xfire.model.User;

public class ClientFromInterface {
    public static void main(String[] args)throws MalformedURLException{
        //首先使用XFire的ObjectServiceFactory从HelloService接口创建一个服务模型serviceModel
        //serviceModel包含服务的说明,换句话说,就是服务的元数据
        //Create a metadata of the service
        Service serviceModel = new ObjectServiceFactory().create(SayHiService.class);  

        //访问的地址
        String serviceURL = "http://127.0.0.1:8080/stove/services/SayHiService";  

        //通过查看org.codehaus.xfire.client.XFireProxyFactory源码发现
        //下面两行代码与这里直接new XFireProxyFactory()的作用是等效的
        //XFire xfire = XFireFactory.newInstance().getXFire();
        //XFireProxyFactory factory = new XFireProxyFactory(xfire);
        //为XFire获得一个代理工厂对象
        //Create a proxy for the deployed service
        XFireProxyFactory factory = new XFireProxyFactory();  

        //通过proxyFactory,使用服务模型serviceModel和服务端点URL(用来获得WSDL)
        //得到一个服务的本地代理,这个代理就是实际的客户端
        SayHiService client = (SayHiService)factory.create(serviceModel, serviceURL);  

        /**
         * Invoke the service
         * @see 调用服务的本地代理(即实际的客户端)中的方法,便得到我们需要的WebServcie
         */  

        /*--处理简单对象--*/
        String serviceResponse = client.sayHi("Jadyer11");
        System.out.println(serviceResponse);  

        /*--处理对象--*/
        User u = new User();
        u.setName("Jadyer99");
        Person pp = client.getPerson(u);
        System.out.println(pp.getName());  

        /*--处理List--*/
        List<Person> personList = client.getPersonList(24, "Jadyer88");
        for(Person p : personList){
            System.out.println(p.getName());
        }
    }
}
时间: 2024-08-25 15:39:25

使用XFire开发WebServices服务端和客户端的相关文章

使用Apache CXF开发WebServices服务端、客户端

在前一篇的博客中,我使用Xfire1.x来开发了WebServies的服务端. 但是如果你访问Apache的官网,可以看到xfire已经被合并了. 最新的框架叫做CXF. Apache CXF = Celtix + XFire. CXF 继承了 Celtix 和 XFire 两大开源项目的精华, 提供了对 JAX-WS 全面的支持,并且提供了多种 Binding .DataBinding.Transport 以及各种 Format 的支持,并且可以根据实际项目的需要,采用代码优先(Code Fi

在eclipse中使用jax-ws构建webservices服务端和客户端

服务端: package com.yinfu.service; import javax.jws.WebService; import javax.xml.ws.Endpoint; @WebService public class TestWebsService { public String sayHello(String username) { return "Hello: " + username; } public static void main(String[] args)

grpc(3):使用 golang 开发 grpc 服务端和客户端

1,关于grpc-go golang 可以可以做grpc的服务端和客户端. 官网的文档: http://www.grpc.io/docs/quickstart/go.html https://github.com/grpc/grpc-go 和之前写的java的grpc客户端调用相同.也需要使用protobuf的配置文件. 但是golang下面的类库非常的简单,而且golang的性能也很强悍呢. 有些简单的业务逻辑真的可以使用golang进行开发. 性能强悍而且,消耗的资源也很小.java感觉上已

XFire创建WebService服务端和客户端

感谢这篇博客http://clq9761.iteye.com/blog/1261963的分享. 可能是环境搭建的原因,按照资料有些地方没有成功,于是自己改了一部分,写了下面的demo 1.服务端 1.1.新建web工程,复制需要的jar包到lib文件夹 1.2.web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/

webService服务端和客户端开发 简单实例

这几天一直在看webService相关的知识. webService是一个跨平台访问的第三方插件,方便易用,多平台使用. 开发中我们可能自己是服务端,提供webService接口给别人访问我们的系统:也有可能我们调用别人的webService接口去访问别人的系统(比如查询天气预报). 下面是服务端和客户端的开发,实际开发中我们只是其中一方. 服务端开发: ①创建一个服务类,运行main方法发布即可,服务端就开发完成了. package com.lijianbo.service; import j

(转)SVN 服务端、客户端安装及配置、导入导出项目

SVN服务器搭建和使用(一) Subversion是优秀的版本控制工具,其具体的的优点和详细介绍,这里就不再多说. 首先来下载和搭建SVN服务器. 现在Subversion已经迁移到apache网站上了,下载地址: http://subversion.apache.org/packages.html 这是二进制文件包的下载地址,你可在左侧的导航栏找到源代码,文档的下载地址. windows操作系统下面的二进制文件包一共有5种,如图: 个人认为最好用VisualSVN server 服务端和 To

mvn构建JAX-WS项目含服务端和客户端代码实现

java中WebService框架有很多,像Axis,XFire,CXF等,除了上述框架外,JDK中自带JAX-WS框架.相比而言,JWS是轻量级的,使用非常简便,可与Spring集成使用. 下面就详述如何通过mvn构建WebService服务端及客户端. 1.引包. 在mvn项目的pom文件中加入依赖包 <dependency> <groupId>com.sun.xml.ws</groupId> <artifactId>jaxws-rt</artif

C# 编写WCF简单的服务端与客户端

http://www.wxzzz.com/1860.html Windows Communication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架,可以翻译为Windows 通讯开发平台.整合了原有的windows通讯的 .net Remoting,WebService,Socket的机制,并融合有HTTP和FTP的相关技术.是Windows平台上开发分布式应用最佳的实践方式. 今天带如何一步一步实现WCF服务端与客户端的开发及基础讲解. 一.在Visual

NFS(NFS介绍,NFS服务端和客户端配置)

一.NFS服务介绍 NFS是 Network File system的缩写 分为2.3.4三个版本,2和3由sun公司起草开发,4.0开始netapp公司参与并主导开发 NFS数据传输基于RPC协议: 应用场景:A,B,C三台机器上需要保证被访问到的文件是一样的,A共享数据出来,B和C分别取挂载A共享的数据目录,从而B和C访问到的数据和A上的一致. NFS原理图:(NFS服务不监听任何端口,但是RPC服务中的模块,rpcbind默认监听111端口,) 二.NFS服务端和客户端配置 [[email