cxf webservice

1. Web Service的定义

        什么是WebService呢?从表面上看,WebService就是一个应用程序,它向外界暴露出一个能够通过Web进行调用的API。这就是说,你能够用编程的方法通过Web调用来实现某个功能的应用程序。从深层次上看,WebService是一种新的Web应用程序分支,它们是自包含、自描述、模块化的应用,可以在网络(通常为Web)中被描述、发布、查找以及通过Web来调用。一旦部署以后,其他WebService应用程序可以发现并调用它部署的服务。Web Service平台是一套标准,它定义了应用程序如何在Web上实现互操作性。你可以用你喜欢的任何语言,在你喜欢的任何平台上写WebServiceWeb 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中对动作进行抽象。

.CXFSpring框架集成

目录结构

技术分享

所需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架构的基本思想,就是尽量把非核心功能交给其他人去做,自己全力开发核心功能。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。