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后面工作的,我们不会直接去使用它。常用的类有ReflectionServiceFactoryBean、JaxWsServiceFactoryBean。
-
ServerFactoryBean:创建Server端,常用的类有ServerFactoryBean、JaxWsServerFactoryBean。
-
ClientFactoryBean:创建Client端,常用的类有ClientFactoryBean、JaxWsClientFactoryBean。
-
ClientProxyFactoryBean:根据Client创建一个代理类,常用的类有ClientProxyFactoryBean、JaxWsProxyFactoryBean。
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在默认位置寻找默认配置文件,我们可以通过CXFServlet的init-param指定参数config-location的值为配置文件的位置。
配置好CXFServlet之后,我们来定义我们的cxf-servlet.xml。cxf-servlet.xml文件的写法是基于Spring的bean配置文件来的。这里我们定义如下:
<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>
在上述文件中我们引入了简单WebService的simple命名空间。该命名空间下主要有两个元素,simple:server和simple:client。Server用于服务端,client用于客户端。上述的address是基于CXFServlet的url-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 的 DEMO) WebService 是一种基于网络的软件系统,使用标准的 Web protocols 进行通信,能够提供跨语言、跨平台的软件应用程序之间的交互,使得不同的应用程序能够相互调用和...
Axis是一个开源的WebService实现框架,提供了一个完整的WebService解决方案。它支持SOAP、WSDL和UDDI等WebService标准协议。 下面是使用Java实现WebService实例的步骤: 第一步:创建WEB工程 首先,需要创建一个...
【标题】"Web服务(WebService)实现:两个数相加" 在IT领域,Web服务是一种通过互联网进行应用程序间通信的技术。这里的"Web服务实现:两个数相加"是指利用Web服务技术来创建一个简单的功能,即接收两个数字并返回...
在本案例中,我们将关注如何使用C#来创建一个WebService,实现根据城市名称查询天气预报的功能。 首先,我们需要了解C#中的ASMX(ASP.NET Web Service)或WCF(Windows Communication Foundation)服务,它们是创建...
这个示例展示了如何使用 JDK 6.0 自带的功能来实现 Webservice,并发布到一个简单的服务地址。这个示例对 Webservice 的基础概念进行了详细的解释,并提供了一个完整的示例代码供读者参考。 知识点: 1. ...
本文将深入探讨如何使用C#语言调用WebService来实现天气查询功能。 首先,我们需要理解什么是WebService。WebService是一种基于互联网的、平台无关的分布式计算模型,它允许不同的应用程序之间通过HTTP协议交换数据...
testWebService 是webservice的服务端 zxntest 是webservice 的客户端(很大一部分jar包无效) http://localhost:8080/testWebService/webservice/webservice?wsdl 测试路径
本教程将详细介绍如何在Idea中实现一个简单的WebService实例。 【描述】:通过Idea实现webservice涉及到的主要步骤包括设置项目、创建服务接口、编写服务实现、部署和测试。下面我们将逐一解析这些步骤: 1. **...
【标题】中的“基于axis2实现的webservice简单实现(客户端+服务端)”表明了本文将探讨如何使用Apache Axis2框架来创建和消费Web服务。Apache Axis2是Apache软件基金会开发的一个Web服务引擎,它提供了高效且灵活的...
在本案例“webservice简单实现例子java工程”中,我们将探讨如何使用Java来实现一个简单的Web服务。 1. **XML**: XML是Web服务数据交换的主要格式,用于结构化和存储数据。在Web服务中,XML被用来定义消息的结构和...
在我们的WebService实现中,请求和响应将通过SOAP消息进行交换。 3. **C3P0连接池** C3P0是一个开源的JDBC连接池,它可以提高数据库访问性能,同时管理数据库连接的生命周期。在我们的示例中,C3P0将帮助我们有效...
在IT领域,尤其是在Web开发中,"C#中js调用WebService实现无刷新"是一个重要的技术主题,它涉及到客户端和服务器端的交互以及用户界面的更新优化。无刷新技术允许用户在不重新加载整个网页的情况下更新部分页面内容...
《C#调用WebService实现的Ajax电子相册详解》 在现代Web开发中,提供动态、交互性极强的用户体验是关键。本文将深入探讨如何使用C#、WebService以及Ajax技术构建一个模仿QQ空间相册效果的电子相册。这个项目以XML...
### PHP实现WebService:深入解析与实践 #### 引言 在现代软件开发中,Web服务(WebService)作为一种标准的通信协议,允许不同平台、不同语言的应用程序之间进行数据交换和服务调用,极大地促进了系统的集成与互...
**基于Webservice实现的一个CXF例子** Web服务(Web Service)是一种通过互联网交换业务逻辑的软件系统,它允许应用程序在不同的平台之间共享数据和服务。Java世界中的Webservice实现有很多,如JAX-WS(Java API ...
利用webService实现的新闻系统 实现了新闻的添加、编辑、删除以及用户管理功能,功能上比较简单,但是都是通过调用webService来实现的,而且采用了MVC面向对象模式进行开发,用户登录采用了自定义控件 安装注意: ...
总的来说,C#调用WebService实现手机号码归属地查询涉及到了网络编程、数据解析、用户界面设计等多个方面。掌握这些技术,可以帮助开发者构建功能丰富的应用程序,满足各种业务需求。在实际项目中,还可以根据具体...
本篇将详细介绍如何在Android和C#之间通过WebService实现字符串和文件的传输。 一、WebService基础知识 WebService是一种基于HTTP协议的、平台无关的通信方式,它允许不同系统间的应用程序通过网络共享数据和功能。...
总的来说,"C#与WebService实现网络计算器,可多项式计算.zip"项目展示了如何利用C#和ASP.NET技术开发一个支持复杂计算的Web服务,并通过IIS部署使其能够在网络上运行。这个项目对于学习C#编程、Web服务开发以及前端...
本篇将详细介绍如何在Java 6环境中实现一个超级简单的WebService服务器和客户端。 **一、WebService基础知识** WebService是一种基于XML的网络通信协议,它通过SOAP(Simple Object Access Protocol)消息进行数据...