cxf webservice
1. Web Service的定义
什么是WebService呢?从表面上看,WebService就是一个应用程序,它向外界暴露出一个能够通过Web进行调用的API。这就是说,你能够用编程的方法通过Web调用来实现某个功能的应用程序。从深层次上看,WebService是一种新的Web应用程序分支,它们是自包含、自描述、模块化的应用,可以在网络(通常为Web)中被描述、发布、查找以及通过Web来调用。一旦部署以后,其他WebService应用程序可以发现并调用它部署的服务。Web Service平台是一套标准,它定义了应用程序如何在Web上实现互操作性。你可以用你喜欢的任何语言,在你喜欢的任何平台上写WebService。Web Service是构建互联网分布式系统的基本部件。"网络服务"(WebService)的本质,就是通过网络调用其他网站的资源。 如果一个软件的主要部分采用了“网络服务”,即它把存储或计算环节“外包”给其他网站了,那么我们就说这个软件属于WebService架构。
目前对WebService还没有绝对全面和准确的定义,但是一般WebService通常包括:
SOAP
一个基于XML的可扩展消息信封格式,需同时绑定一个传输协议。这个协议通常是HTTP或HTTPS、SMTP、XMPP。
WSDL
一个XML格式文档,用以描述服务端口访问方式和使用协议的细节。通常用来辅助生成服务器和客户端代码及配置信息。比如JAVA语言的wsdl2java工具。
UDDI
一个用来发布和搜索WEB服务的协议,应用程序可借由此协议在设计或运行时找到目标WEBService。
2. 使用Web Service的方式
远端过程调用
WebService提供一个分布式函数或方法接口供用户调用,这是一种比较传统的方式。通常,在WSDL中对RPC接口进行定义。尽管最初的WebService广泛采用RPC这种方式部署,但是针对其过于紧密之耦合性的批评声也络绎不绝。原因是RPC式的WebService服务是利用一个简单的映射,把用户请求直接转换为一个特定语言编写的函数或方法。
面向服务架构
相比RPC式的WebService,面向服务架构(SOA)得到了大部分主要软件供应商以及业界专家的支持和肯定。因为SOA方式更加关注如何去连接服务而不是去特地某个实现的细节。
REST式服务
表达性状态转移(Representational statetransfer,REST)类似于HTTP协议,REST把接口限定在一组HTTP操作中,比如GTP、PUT、DELETE等以供调用,此种服务可以通过WSDL来描述SOAP消息内容,通过HTTP限定动作接口;或者完全在SOAP中对动作进行抽象。
3.CXF与Spring框架集成
目录结构
所需jar包
web.xml
<?xml version="1.0" encoding="UTF-8"?> <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"> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <servlet> <servlet-name>CXFServlet</servlet-name> <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>CXFServlet</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> </web-app>
applicationContext.xml:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"> <import resource="classpath:META-INF/cxf/cxf.xml" /> <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" /> <import resource="classpath:META-INF/cxf/cxf-servlet.xml" /> <jaxws:endpoint id="greetingService" implementor="com.tgb.klx.cxf.service.impl.GreetingServiceImpl" address="/GreetingService" /> </beans>
application-client.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"> <import resource="classpath:META-INF/cxf/cxf.xml" /> <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" /> <import resource="classpath:META-INF/cxf/cxf-servlet.xml" /> <bean id="client" class="com.tgb.klx.cxf.service.GreetingService" factory-bean="clientFactory" factory-method="create" /> <bean id="clientFactory" class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean"> <property name="serviceClass" value="com.tgb.klx.cxf.service.GreetingService" /> <property name="address" value="http://localhost/testWebService/GreetingService" /> </bean> </beans>
GreetingService.java
package com.tgb.klx.cxf.service; import javax.jws.WebService; @WebService public interface GreetingService { public String greeting(String userName); }
GreetingServiceImpl.java
package com.tgb.klx.cxf.service.impl; import java.util.Calendar; import javax.jws.WebService; import com.tgb.klx.cxf.service.GreetingService; @WebService(endpointInterface = "com.tgb.klx.cxf.service.GreetingService") public class GreetingServiceImpl implements GreetingService { public String greeting(String userName) { return "你好 " + userName + ",恭喜你调用到了本服务,当前时间是: " + Calendar.getInstance().getTime(); } }
Client.java
package com.tgb.klx.cxf.client; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.tgb.klx.cxf.service.GreetingService; public class Client { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext( "application-client.xml"); GreetingService helloService = (GreetingService) context .getBean("client"); String response = helloService.greeting("Perter"); System.out.println(response); } }
访问:http://localhost/testWebService/GreetingService?wsdl查看是否显示wsdl
运行结果:
总结:
"网络服务"(WebService)的本质,就是通过网络调用其他网站的资源。WebService架构的基本思想,就是尽量把非核心功能交给其他人去做,自己全力开发核心功能。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。