`
234390216
  • 浏览: 10233778 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
A5ee55b9-a463-3d09-9c78-0c0cf33198cd
Oracle基础
浏览量:462677
Ad26f909-6440-35a9-b4e9-9aea825bd38e
springMVC介绍
浏览量:1775581
Ce363057-ae4d-3ee1-bb46-e7b51a722a4b
Mybatis简介
浏览量:1398405
Bdeb91ad-cf8a-3fe9-942a-3710073b4000
Spring整合JMS
浏览量:395036
5cbbde67-7cd5-313c-95c2-4185389601e7
Ehcache简介
浏览量:680009
Cc1c0708-ccc2-3d20-ba47-d40e04440682
Cas简介
浏览量:530921
51592fc3-854c-34f4-9eff-cb82d993ab3a
Spring Securi...
浏览量:1184095
23e1c30e-ef8c-3702-aa3c-e83277ffca91
Spring基础知识
浏览量:468012
4af1c81c-eb9d-365f-b759-07685a32156e
Spring Aop介绍
浏览量:151411
2f926891-9e7a-3ce2-a074-3acb2aaf2584
JAXB简介
浏览量:68174
社区版块
存档分类
最新评论

简单的WebService实现

阅读更多

 

1       简介

2       普通实现

2.1      定义WebService

2.2      创建服务端

2.3      创建客户端

3       基于Spring的实现

3.1      定义WebService

3.2      创建服务端

3.3      创建客户端

1       简介

       Cxf有四个主要的类:

  •        Service:它是对应WebService服务类及其操作的抽象代表,包括数据绑定类型、正在使用的拦截器等其他信息。
  •        Endpoint:它可以接收消息,其主要功能是持有拦截器,并且可以监听出现的错误,客户端和服务端都需要使用到Endpoint
  •        Server:服务端的代表。提供可以开始/结束Server、访问Endpoint的钩子。
  •        Client:客户端的代表,可以管理客户端的消息。

 

       Cxf还有四个主要的帮忙创建服务端和客户端的工厂类:

  •        AbstractServiceFactoryBean:它主要负责从一个WSDL文件或者class文件创建对应的Service,同时也可以设置一些数据绑定、拦截器等信息。它通常是藏在Server/ClientFactoryBean后面工作的,我们不会直接去使用它。常用的类有ReflectionServiceFactoryBeanJaxWsServiceFactoryBean
  •        ServerFactoryBean:创建Server端,常用的类有ServerFactoryBeanJaxWsServerFactoryBean
  •        ClientFactoryBean:创建Client端,常用的类有ClientFactoryBeanJaxWsClientFactoryBean
  •        ClientProxyFactoryBean:根据Client创建一个代理类,常用的类有ClientProxyFactoryBeanJaxWsProxyFactoryBean

2       普通实现

2.1     定义WebService

       对于服务端而言,我们首先要准备一个我们需要发布为WebService的类,而这个类通常是基于某个接口的。所以首先我们先在服务端定义一个接口及其实现类。

 

public interface HelloWorld {

	public String sayHi(String who); 
	
}

  

public class HelloWorldImpl implements HelloWorld {

	@Override
	public String sayHi(String who) {
		return "Hi, " + who;
	}

}

2.2     创建服务端

       上面我们已经定义好了需要发布为WebService的接口HelloWorld及其实现类HelloWorldImpl。接下来我们需要把它发布为一个WebService

 

public class Server {

	private final static String ADDRESS = "http://localhost:8080/test/services/HelloWorld";
	
	public static void main(String args[]) {
		HelloWorld hw = new HelloWorldImpl();
		ServerFactoryBean sfb = new ServerFactoryBean();
		sfb.setAddress(ADDRESS);//webService对应的访问地址
		sfb.setServiceClass(HelloWorld.class);//指定webService服务类型
		sfb.setServiceBean(hw);//webService对应的bean对象
		sfb.create();//这样就创建了一个webService的服务端
	}
	
}

      

这样我们就把HelloWorldImpl发布为一个WebService了,地址为http://localhot:8080/test/services/HelloWorld。接下来我们在浏览器里面输入http://localhost:8080/test/services/HelloWorld?wsdl就可以查看该服务对应的WSDL文件了。通过http://localhost:8080/test/services/HelloWorld我们可以在客户端访问到其对应的Service及其操作。接下来我们来看看客户端如何创建。

2.3     创建客户端

       客户端我们是通过ClientProxyFactoryBean针对于WebService发布的地址及其接口生成一个代理类。

 

public class Client {

	private final static String ADDRESS = "http://localhost:8080/test/services/HelloWorld";
	
	public static void main(String args[]) {
		ClientProxyFactoryBean cfb = new ClientProxyFactoryBean();
		cfb.setAddress(ADDRESS);//指定发送请求的webService地址
		cfb.setServiceClass(HelloWorld.class);//指定webService对应的接口
		HelloWorld hw = (HelloWorld)cfb.create();//创建一个针对WebService对应接口的代理类
		String response = hw.sayHi("world");//调用代理类的对应方法,发送相关请求到对应Server
		System.out.println(response);
	}
	
}

   

有了针对于WebService的代理类后,我们就可以通过该代理类访问WebService公布的对应方法进行相关操作了。客户端代理类在对WebService进行相关操作时并不是直接的对该WebService进行了操作,而是把请求操作封装为对应的信息发送给WebService发布的地址。WebService服务端在接收到对应的消息后把它解析为对应的参数和操作,之后在服务端对WebService进行操作,之后再将返回值封装为对应信息返回给客户端。客户端解析后返回给代理类。整个过程就是这样进行的。

3       基于Spring的实现

3.1     定义WebService

       基于Spring的简单WebService实现也需要我们定义需要发布为WebService的类。这里跟上面一样,我们定义如下:

 

public interface HelloWorld {

	public String sayHi(String who); 
	
}

 

public class HelloWorldImpl implements HelloWorld {

	@Override
	public String sayHi(String who) {
		return "Hi, " + who;
	}

}

3.2     创建服务端

       基于Spring的服务端是通过配置文件来进行的。首先我们需要在web.xml文件中定义一个CXFServlet,用于拦截WebService请求。

 

<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
         http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
	<display-name>Archetype Created Web Application</display-name>

	<servlet>
		<display-name>cxf</display-name>
		<servlet-name>cxf</servlet-name>
		<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
		<init-param>
			<param-name>config-location</param-name>
			<param-value>WEB-INF/cxf-servlet.xml</param-value>
		</init-param>
	</servlet>

	<servlet-mapping>
		<servlet-name>cxf</servlet-name>
		<url-pattern>/services/*</url-pattern>
	</servlet-mapping>

</web-app>    

web.xml文件中定义了CXFServlet之后,在Web容器启动的时候,CXFServlet默认会到WEB-INF目录下寻找名叫cxf-servlet.xml的配置文件中定义的WebService进行发布。如果不想CXFServlet在默认位置寻找默认配置文件,我们可以通过CXFServletinit-param指定参数config-location的值为配置文件的位置。

 

       配置好CXFServlet之后,我们来定义我们的cxf-servlet.xmlcxf-servlet.xml文件的写法是基于Springbean配置文件来的。这里我们定义如下:

 

<beans xmlns="http://www.springframework.org/schema/beans"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:simple="http://cxf.apache.org/simple"
      xmlns:soap="http://cxf.apache.org/bindings/soap"
      xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://cxf.apache.org/bindings/soap http://cxf.apache.org/schemas/configuration/soap.xsd
http://cxf.apache.org/simple http://cxf.apache.org/schemas/simple.xsd">
 
  <simple:server id="helloWorld" serviceClass="com.tiantian.cxftest.sample.simple.HelloWorld" address="/HelloWorld">
    <simple:serviceBean>
        <bean class="com.tiantian.cxftest.sample.simple.HelloWorldImpl" />
    </simple:serviceBean>
  </simple:server>
  
</beans>

    

在上述文件中我们引入了简单WebServicesimple命名空间。该命名空间下主要有两个元素,simple:serversimple:clientServer用于服务端,client用于客户端。上述的address是基于CXFServleturl-pattern来的。

3.3     创建客户端

       基于Spring的客户端的写法也是定义一个配置文件,类似于Spring的配置文件,然后把我们的WebService定义成一个普通的Spring bean对象。这主要有两种方式:第一种是通过simple命名空间来定义,第二种是通过ClientProxyFactoryBean来定义。

 

第一种

       先在配置文件中加上simple的命名空间,之后通过simple:client来定义一个WebService的客户端。这里我们在类路径的根目录下定义一个cxf-client.xml文件,其内容如下所示:

 

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:simple="http://cxf.apache.org/simple"
	xmlns:soap="http://cxf.apache.org/bindings/soap"
	xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://cxf.apache.org/bindings/soap http://cxf.apache.org/schemas/configuration/soap.xsd
http://cxf.apache.org/simple http://cxf.apache.org/schemas/simple.xsd">

	<simple:client id="helloWorld"
		serviceClass="com.tiantian.cxftest.sample.simple.HelloWorld" address="http://localhost:8080/test/services/HelloWorld" />
		
</beans>

 

第二种

   <!-- ClientProxyFactoryBean -->  
   <bean id="factoryBean" class="org.apache.cxf.frontend.ClientProxyFactoryBean">
      <property name="address" value="http://localhost:8080/test/services/HelloWorld"/>
      <property name="serviceClass" value="com.tiantian.cxftest.sample.simple.HelloWorld"/>
   </bean>
  
   <bean id="hw" factory-bean="factoryBean" factory-method="create"/>

 

       之后我们就可以把它当做一个普通的Spring bean对象来使用了。如:

public class SpringClient {

	public static void main(String args[]) {
		ApplicationContext context = new ClassPathXmlApplicationContext("cxf-client.xml");
		HelloWorld hw = context.getBean("helloWorld", HelloWorld.class);
		String response = hw.sayHi("world");
		System.out.println(response);
		System.out.println(context.getBean("hw", HelloWorld.class).sayHi("HelloWorld"));
	}
	
}

  

 

分享到:

相关推荐

    WebService实现步骤(包括WEBSERVICE的demon)

    WebService 实现步骤(包括 WEBSERVICE 的 DEMO) WebService 是一种基于网络的软件系统,使用标准的 Web protocols 进行通信,能够提供跨语言、跨平台的软件应用程序之间的交互,使得不同的应用程序能够相互调用和...

    java实现webservice实例.doc

    Axis是一个开源的WebService实现框架,提供了一个完整的WebService解决方案。它支持SOAP、WSDL和UDDI等WebService标准协议。 下面是使用Java实现WebService实例的步骤: 第一步:创建WEB工程 首先,需要创建一个...

    webservice 实现 两个数相加

    【标题】"Web服务(WebService)实现:两个数相加" 在IT领域,Web服务是一种通过互联网进行应用程序间通信的技术。这里的"Web服务实现:两个数相加"是指利用Web服务技术来创建一个简单的功能,即接收两个数字并返回...

    webservice实现预报天气

    在本案例中,我们将关注如何使用C#来创建一个WebService,实现根据城市名称查询天气预报的功能。 首先,我们需要了解C#中的ASMX(ASP.NET Web Service)或WCF(Windows Communication Foundation)服务,它们是创建...

    jdk 6.0 自带webservice实现 实例

    这个示例展示了如何使用 JDK 6.0 自带的功能来实现 Webservice,并发布到一个简单的服务地址。这个示例对 Webservice 的基础概念进行了详细的解释,并提供了一个完整的示例代码供读者参考。 知识点: 1. ...

    调用webservice实现天气查询C#程序

    本文将深入探讨如何使用C#语言调用WebService来实现天气查询功能。 首先,我们需要理解什么是WebService。WebService是一种基于互联网的、平台无关的分布式计算模型,它允许不同的应用程序之间通过HTTP协议交换数据...

    spring + cxf 实现简单的webservice

    testWebService 是webservice的服务端 zxntest 是webservice 的客户端(很大一部分jar包无效) http://localhost:8080/testWebService/webservice/webservice?wsdl 测试路径

    Idea实现WebService实例

    本教程将详细介绍如何在Idea中实现一个简单的WebService实例。 【描述】:通过Idea实现webservice涉及到的主要步骤包括设置项目、创建服务接口、编写服务实现、部署和测试。下面我们将逐一解析这些步骤: 1. **...

    基于axis2实现的webservice简单实现(客户端+服务端)。

    【标题】中的“基于axis2实现的webservice简单实现(客户端+服务端)”表明了本文将探讨如何使用Apache Axis2框架来创建和消费Web服务。Apache Axis2是Apache软件基金会开发的一个Web服务引擎,它提供了高效且灵活的...

    webservice简单实现例子java工程

    在本案例“webservice简单实现例子java工程”中,我们将探讨如何使用Java来实现一个简单的Web服务。 1. **XML**: XML是Web服务数据交换的主要格式,用于结构化和存储数据。在Web服务中,XML被用来定义消息的结构和...

    WebService实现一个增删查改的接口服务(亲测可用)

    在我们的WebService实现中,请求和响应将通过SOAP消息进行交换。 3. **C3P0连接池** C3P0是一个开源的JDBC连接池,它可以提高数据库访问性能,同时管理数据库连接的生命周期。在我们的示例中,C3P0将帮助我们有效...

    C#中js调用WebService实现无刷新

    在IT领域,尤其是在Web开发中,"C#中js调用WebService实现无刷新"是一个重要的技术主题,它涉及到客户端和服务器端的交互以及用户界面的更新优化。无刷新技术允许用户在不重新加载整个网页的情况下更新部分页面内容...

    C#调用WebService实现的Ajax电子相册

    《C#调用WebService实现的Ajax电子相册详解》 在现代Web开发中,提供动态、交互性极强的用户体验是关键。本文将深入探讨如何使用C#、WebService以及Ajax技术构建一个模仿QQ空间相册效果的电子相册。这个项目以XML...

    php 实现 webservice

    ### PHP实现WebService:深入解析与实践 #### 引言 在现代软件开发中,Web服务(WebService)作为一种标准的通信协议,允许不同平台、不同语言的应用程序之间进行数据交换和服务调用,极大地促进了系统的集成与互...

    基于webservice实现的一个CXF例子

    **基于Webservice实现的一个CXF例子** Web服务(Web Service)是一种通过互联网交换业务逻辑的软件系统,它允许应用程序在不同的平台之间共享数据和服务。Java世界中的Webservice实现有很多,如JAX-WS(Java API ...

    asp.net2.0项目之利用webService实现的新闻系统(VS2005+SQL2000)

    利用webService实现的新闻系统 实现了新闻的添加、编辑、删除以及用户管理功能,功能上比较简单,但是都是通过调用webService来实现的,而且采用了MVC面向对象模式进行开发,用户登录采用了自定义控件 安装注意: ...

    CSharp调用WebService实现手机号码归属地查询

    总的来说,C#调用WebService实现手机号码归属地查询涉及到了网络编程、数据解析、用户界面设计等多个方面。掌握这些技术,可以帮助开发者构建功能丰富的应用程序,满足各种业务需求。在实际项目中,还可以根据具体...

    android c# webservice 实现

    本篇将详细介绍如何在Android和C#之间通过WebService实现字符串和文件的传输。 一、WebService基础知识 WebService是一种基于HTTP协议的、平台无关的通信方式,它允许不同系统间的应用程序通过网络共享数据和功能。...

    C#与WebService实现网络计算器,可多项式计算.zip

    总的来说,"C#与WebService实现网络计算器,可多项式计算.zip"项目展示了如何利用C#和ASP.NET技术开发一个支持复杂计算的Web服务,并通过IIS部署使其能够在网络上运行。这个项目对于学习C#编程、Web服务开发以及前端...

    java6中超级简单的WebService服务器和客户端实现

    本篇将详细介绍如何在Java 6环境中实现一个超级简单的WebService服务器和客户端。 **一、WebService基础知识** WebService是一种基于XML的网络通信协议,它通过SOAP(Simple Object Access Protocol)消息进行数据...

Global site tag (gtag.js) - Google Analytics