`
schy_hqh
  • 浏览: 555939 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

(一)CXF初步

 
阅读更多

CXF基于JAX-WS进行了功能的扩展,提供了更加方便的API进行webservice的开发

了解JAX-WS的基本知识对学习CXF很有帮助,尤其是SOAP协议中消息如何传递得比较清楚才行

 

学习CXF提供的第一个直观的好处:方便输出客户端与服务端交互的SOAP消息

使用Interceptor实现消息的输出,这样便于查看具体消息是如何传递的,也便于排查问题

 

服务端:

POM.XML

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>com.hqh.ws.cxf</groupId>
	<artifactId>cxf-first</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>cxf-first</name>
	<url>http://maven.apache.org</url>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<cxf.version>2.6.0</cxf.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.10</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.apache.cxf</groupId>
			<artifactId>cxf-rt-frontend-jaxws</artifactId>
			<version>${cxf.version}</version>
		</dependency>
		<dependency>
			<groupId>org.apache.cxf</groupId>
			<artifactId>cxf-rt-transports-http</artifactId>
			<version>${cxf.version}</version>
		</dependency>
		<!-- Jetty is needed if you're are not using the CXFServlet -->
		<dependency>
			<groupId>org.apache.cxf</groupId>
			<artifactId>cxf-rt-transports-http-jetty</artifactId>
			<version>${cxf.version}</version>
		</dependency>
	</dependencies>

</project>

 

接口

package com.hqh.ws.cxf;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;

@WebService
public interface IMyService {

	@WebMethod
	@WebResult(name="sayResult")
	public String sayHello(@WebParam(name="name") String name,
			@WebParam(name="license", header=true) String license);
}

 实现类

package com.hqh.ws.cxf;

import javax.jws.WebMethod;
import javax.jws.WebService;

@WebService(endpointInterface="com.hqh.ws.cxf.IMyService")
public class MyServiceImpl implements IMyService {

	@Override
	@WebMethod
	public String sayHello(String name,String license) {
		return (license==null||"".equals(license.trim())) ? "头信息为空" : "你好:"+name ;
	}

}

 

启动服务

package com.hqh.ws.cxf;

import javax.xml.ws.Endpoint;

import org.apache.cxf.endpoint.Server;
import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
import org.apache.cxf.jaxws.JaxWsServerFactoryBean;

public class MyServer {

	public static void main(String[] args) {
		//startServer();
		startServerByCXF(); 
	}
	/**
	 * 基于JAX-WS的方式发布服务
	 * @param args
	 */
	public static void startServer() {
		Endpoint.publish("http://localhost:8888/cxf/ws", new MyServiceImpl());
	}
	
	/**
	 * 使用CXF发布服务
	 */
	public static void startServerByCXF() {
		JaxWsServerFactoryBean svrFactory = new JaxWsServerFactoryBean();
		svrFactory.setServiceClass(IMyService.class);
		svrFactory.setAddress("http://localhost:8888/cxf/ws");
		svrFactory.setServiceBean(new MyServiceImpl());
		//打印发出的消息
		svrFactory.getInInterceptors().add(new LoggingInInterceptor());
		//打印进入的消息
		svrFactory.getOutInterceptors().add(new LoggingOutInterceptor());
		svrFactory.create();
	}
}

 

 

客户端:

POM.XML

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.hqh.ws.cxf</groupId>
  <artifactId>cxf-client</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>cxf-client</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <cxf.version>2.6.0</cxf.version>
  </properties>

	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.10</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.apache.cxf</groupId>
			<artifactId>cxf-rt-frontend-jaxws</artifactId>
			<version>${cxf.version}</version>
		</dependency>
		<dependency>
			<groupId>org.apache.cxf</groupId>
			<artifactId>cxf-rt-transports-http</artifactId>
			<version>${cxf.version}</version>
		</dependency>
	</dependencies>
  
  	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.cxf</groupId>
				<artifactId>cxf-codegen-plugin</artifactId>
				<version>${cxf.version}</version>
				<executions>
					<execution>
						<id>generate-sources</id>
						<phase>generate-sources</phase>
						<configuration>
							<sourceRoot>${project.build.directory}/generated/cxf</sourceRoot>
							<wsdlOptions>
								<wsdlOption>
									<wsdl>http://localhost:8888/cxf/ws?wsdl</wsdl>
								</wsdlOption>
							</wsdlOptions>
						</configuration>
						<goals>
							<goal>wsdl2java</goal>
						</goals>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>
</project>

 

测试类

package com.hqh.ws.cxf.cxf_client;

import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import org.junit.Test;

import com.hqh.ws.cxf.IMyService;
import com.hqh.ws.cxf.SayHello;

public class TestCXF {
	@Test
	public void test01() {
		JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
		factory.setServiceClass(IMyService.class);
		factory.setAddress("http://localhost:8888/cxf/ws?wsdl");
		//打印发出的消息
		factory.getInInterceptors().add(new LoggingInInterceptor());
		//打印进入的消息
		factory.getOutInterceptors().add(new LoggingOutInterceptor());
		IMyService service = (IMyService)factory.create();
		
		//代码优先将参数转换为一个对象去了
		SayHello say = new SayHello();
		say.setName("张三疯");
		//头信息
		String license = "this is license info";
		//调用服务
		String reply = service.sayHello(say,license).getSayResult();
		
		System.out.println(reply);
		System.exit(0);
	}
}

 

客户端看到的结果:

---------------------------
ID: 1
Address: http://localhost:8888/cxf/ws?wsdl
Encoding: UTF-8
Content-Type: text/xml
Headers: {Accept=[*/*], SOAPAction=[""]}
Payload: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
	<soap:Header>
		<ns2:license xmlns:ns2="http://cxf.ws.hqh.com/">this is license info</ns2:license>
	</soap:Header>
	<soap:Body>
		<ns2:sayHello xmlns:ns2="http://cxf.ws.hqh.com/">
			<name>张三疯</name>
		</ns2:sayHello>
	</soap:Body>
</soap:Envelope>
--------------------------------------
2013-8-15 21:47:59 org.apache.cxf.services.IMyServiceService.IMyServicePort.IMyService
信息: Inbound Message
----------------------------
ID: 1
Response-Code: 200
Encoding: UTF-8
Content-Type: text/xml;charset=UTF-8
Headers: {Content-Length=[230], content-type=[text/xml;charset=UTF-8], Server=[Jetty(7.5.4.v20111024)]}
Payload: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
	<soap:Body>
		<ns2:sayHelloResponse xmlns:ns2="http://cxf.ws.hqh.com/">
			<sayResult>你好:张三疯</sayResult>
		</ns2:sayHelloResponse>
	</soap:Body>
</soap:Envelope>
--------------------------------------
你好:张三疯

 

 

分享到:
评论

相关推荐

    cxf-3.0.0 zip

    这个"apache-cxf-3.0.0-milestone2.zip"压缩包包含了Apache CXF 3.0.0的第二个里程碑版本,这是一个重要的中间版本,在正式发布之前提供了对新功能和改进的初步测试。 Apache CXF主要知识点: 1. **Web服务框架**...

    基于Apache CXF构建SOA应用

    第一部分介绍关于 SOA 和 Web Services 的初步知识,第二部分介绍Apache CXF 框架的一些基础知识,第三部分重点介绍 Apache CXF 框架的应用,包括 Apache CXF 框架的前端 (Frontends) 应用、 数据绑定 ...

    cxf+spring使用经验

    Apache CXF 是一个开源的 Web 服务框架,它整合了 Celtix 和 XFire 两大项目的优势,提供了全面的 JAX-WS 支持,允许开发者通过 Code First 或 WSDL First 的方式来创建和消费 Web 服务。CXF 支持多种绑定、数据绑定...

    rest风格webservice,服务端用的springmvc,客户端android,json传输,另附一个cxf的soap协议的wsdl服务端

    以前做java的初步理解了下android,为配合android实现所以实现了几个接口,此包是打包demo,包括3个项目,1个是安卓客户端,实现登录和手机归属地查询。实现了3个接口服务,1个接口服务端提供登录是用的传统...

    WebService CXF学习-入门篇.pdf

    通过以上步骤,我们可以完成一个基本的"HelloWorld"服务的创建和调用,从而对CXF的使用有一个初步的认识。 总结来说,Apache CXF是一个强大的Web服务框架,它提供了一套全面的工具和API,使得开发者能够方便地创建...

    CXF_SPRING

    总结起来,`CXF_SPRING`涵盖了使用Apache CXF和Spring框架构建Web服务的过程,包括环境配置、Web服务接口定义、服务实现、Spring配置以及客户端调用的初步概念。在实际开发中,这只是一个基础起点,你还需要考虑错误...

    CXF入门例子

    标题 "CXF入门例子" 暗示了我们要探讨的是Apache CXF框架的初步使用,这是一个流行的开源服务框架,用于构建和开发Web服务。Apache CXF允许开发者通过Java API来创建SOAP和RESTful Web服务,提供了强大的功能和易用...

    cxf-testutils-3.0.0.zip

    这个特定的版本"3.0.0"意味着它是该框架的一个早期版本,可能包含了对CXF核心功能的初步支持,以及当时最新的特性和改进。通常,每个新版本会修复已知问题,增加新功能,或者提高性能和稳定性。对于开发者来说,了解...

    jetty-6.1.2

    这个版本的Jetty是为CXF(一个开源的Web服务框架)提供支持的重要组件。在深入探讨Jetty 6.1.2与CXF的结合使用之前,我们首先来了解下这两个项目的基本概念。 Jetty是一个高度可配置和可扩展的服务器,它能够处理...

    WebService学习之路一

    2. **创建第一个Web Service**:通过JAX-WS或Apache CXF,编写简单的Java类,将其暴露为一个Web Service。这通常涉及创建一个服务端点接口(SEI)和其实现类。 3. **生成WSDL**:一旦服务端点实现,框架会自动生成...

    webservice开发文档

    CXF是一个开放源代码的项目,旨在简化SOA(面向服务架构)的实现,支持多种协议如SOAP、REST等。它提供了一套丰富的API和工具,使得开发者能够快速地构建和部署Web服务。 ##### 2.1 原始实现方式 在开始之前,我们...

    webservice:关于网络服务。它每天都在学习

    这是用来测试JDK webservice 和CXF在参数类型上的不一样,CXF支持比较多的类型,所以使用CXF而不是jdk #part four ##service 这是一切客户端的服务端,java项目,后期增加和spring结合的web端 #part Five ##web 与...

    SSMAC整合开发.pdf

    手册中简述了整个项目的结构,让开发者对项目的构建有一个初步的认识。 6. 数据库设计 数据库是系统的重要组成部分,本手册中提到的数据库名称为act-site,并且提供了数据库表的SQL脚本文件(act-site.sql)。...

    基于淘宝开放平台开源的rop

    相较于传统的纯技术型Web Service框架(例如CXF或Axis),ROP具有更为丰富的特性,它不仅仅局限于提供基本的Web服务支持,还针对一系列高级主题进行了优化,比如请求/响应序列化、数据验证、会话管理以及安全控制等...

    WEB前端简历模板02.doc

    7. Spring+Hibernate:参与过青岛机场运营管理系统的开发,主要负责班期计划导入,消息过滤,手动更新等功能模块开发,使用 CXF webService + Spring + Hibernate+Eclipse4前端,数据库 oracle,服务器 JBOSS,缓存 ...

    Android典型技术模块开发详解

    第一篇 Android开发初步 第1章 Android初识 1.1 Android简介 1.1.1 认识Android 1.1.2 Android系统框架 1.1.3 应用程序框架 1.2 Eclipse开发环境 1.2.1 安装ADT插件 1.2.2 安装SDK 1.2.3 配置源代码 1.2.4 创建AVD ...

    Java思维导图xmind文件+导出图片

    WebService/ApacheCXF RMI/Spring RMI Hession 传统RPC技术在大型分布式架构下面临的问题 分布式架构下的RPC解决方案 Zookeeper 分布式系统的基石 从0开始搭建3个节点额度zookeeper集群 深入分析Zookeeper在...

Global site tag (gtag.js) - Google Analytics