码迷,mamicode.com
首页 > Web开发 > 详细

分布式系统(3)---Web Service实战--CXF实践篇

时间:2015-04-30 10:39:08      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:

第二篇:CXF实践篇


CXF架构开发WebService步骤:

1、建立Web项目

2、准备所有的jar

                   技术分享

3web.xml中配置cxf的核心servlet,CXFServlet

服务器端:

<display-name>cxf_demo</display-name>
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:applicationContext-server.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>/ws/*</url-pattern>
	</servlet-mapping>
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>


4applicationContext-Server.xml

服务器端

<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="helloService" implementor="com.test.server.HelloWorldServerImpl"
	address="/helloService" />


客户端

<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.test.server.IHelloWorldServer"
		factory-bean="clientFactory" factory-method="create" />

	<bean id="clientFactory" class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
		<property name="serviceClass" value="com.test.server.IHelloWorldServer" />
		<property name="address" value="http://localhost:8080/cxf_demo/ws/helloService"/>
	</bean>

CXF发布服务的类有两个:

JaxWsServerFactoryBean,我们用的这个。用于发布一个服务,可以通过默认构造实例此类。

JaxRsServerFactoryBean,此类用于发布Restful风格的webServiceRestful风格是以普通get,post请求为标准的,并可以请求和相应json数据。

 

5、代码

服务器端,发布服务

IHelloWorldServer

@WebService
public interface IHelloWorldServer {

	public String sayHello(String username);
}

HelloWorldServerImpl

@WebService(endpointInterface = "com.test.server.IHelloWorldServer",serviceName="HelloService")
public class HelloWorldServerImpl implements IHelloWorldServer{

	@Override
	public String sayHello(String username) {
		return username + ":HelloWorld";
	}

}


客户端

HelloWorldClient

public static void main(String[] args){
		ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext-client.xml");
		IHelloWorldServer helloService = (IHelloWorldServer) context.getBean("client");
		String response = helloService.sayHello("liutengteng");
		System.out.println(response);
	}

6、运行结果

访问地址:http://localhost:8080/cxf_demo/ws

技术分享

WSDL

技术分享


客户端运行结果:

技术分享


总结

       通过上面简单的例子我们也很容易的看出来,远程调用就是通过服务器端发布服务,客户端调用。发布出来的WSDL通过XML的形式展示出来,XML解析,而且SOAP也是基于XML的。由于XML是各种语言通用的,故Web Service实现了跨平台,跨语言。

分布式系统(3)---Web Service实战--CXF实践篇

标签:

原文地址:http://blog.csdn.net/liutengteng130/article/details/45390465

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!