文档章节

WebService学习笔记---CXF入门

yuewawa
 yuewawa
发布于 2016/03/29 13:43
字数 857
阅读 60
收藏 2

一、准备

软件环境:

JDK1.8, Eclipse JEE 4.4, Maven-3.2.5, Spring-4, CXF-3.1.5

二、创建项目

  1. 新建一个Maven项目,在pom.xml里添加spring依赖
<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>io.spring.platform</groupId>
      <artifactId>platform-bom</artifactId>
      <version>1.1.3.RELEASE</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>
  1. 添加cxf依赖,或是从apache cxf官网下载已编译的文件,通过BuildPath添加
<dependency>
  <groupId>org.apache.cxf</groupId>
  <artifactId>apache-cxf</artifactId>
  <version>3.1.5</version>
  <type>zip</type> //因为Maven远程仓库只有zip,tar.gz等压缩包,没有对应jar包,所有要指定type
</dependency>

用过BuildPath添加 右键项目---》 Build Path---》 Configure Build Path---》 Add Library---》 在对话框中选择CXF Runtime---》 如果是第一自使用CXF,则需要配置CXF,点击Configure installed runtimes,新增一个CXF---》 添加成功,在Libraries里会多出一个Apache CXF Libary[3.1.5]

三、编写类文件

  1. 新建一个接口类
@WebService
public interface ICXFService{

    @WebMethod
    public String sayHello(@WebParam(name="username") String username);
}

说明: @WebService:标记表示该接口是一个WebService服务。 @WebMethod:标记表示WebService中的方法。 @WebParam(name="paramName")表示方法中的参数,name属性限制了参数的名称,若没有指定该属性,参数将会被重命名。

  1. 新建一个实现类
public class CXFService implements ICXFService{

    public String sayHello(String username){
          return "Hello, "+username;    
    }
}
  1. 在WEB-INF下新建cxf-servlet.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file 
		distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under 
		the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may 
		obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to 
		in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 
		ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under 
		the License. -->
<!-- START SNIPPET: beans -->
<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" />
		<jaxws:endpoint id="sayHello" implementor="com.demo.cxfws.service.impl.CXFServiceImpl" address="/sayHello" />
</beans>
<!-- END SNIPPET: beans -->
  1. 在web.xml中添加cxf配置信息
<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>

<session-config>
  <session-timeout>60</session-timeout>
</session-config>
  1. 在src\main\resources下新建client-beans.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/schema/jaxws.xsd">
<bean id="client" class="com.demo.cxfws.service.ICXFService" factory-bean="clientFactory" factory-method="create" />
  <bean id="clientFactory" class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
    <property name="serviceClass" value="com.demo.cxfws.service.ICXFService" />
    <property name="address" value="http://localhost:8080/cxfws/sayHello" />
  </bean>
</beans>
  1. 编写测试
public class TestCXF {

	public static void main(String[] args) {
		ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"client-beans.xml"});
		ICXFService service = (ICXFService) context.getBean("client");
		String str = service.sayHello("zhangsan");
		System.out.println(str);
	}
}

四、遇到的问题

Eclipse在创建Maven的时候会创建index.jsp文件。而pom.xml文件里只有junit依赖,所有还需手动添加servlet-api

<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>servlet-api</artifactId>
  <version>2.5</version>
</dependency>

还有一个问题如下Eclipse JAX-RS (REST Web Services) 2.0 requires Java 1.6 or newer

如果遇到了,在pom.xml添加:

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>3.1</version>
      <configuration>
        <source>1.8</source>
        <target>1.8</target>
      </configuration>
    </plugin>
  </plugins>
</build>

如果还不行,右键项目,点击Properties,在Java Compiler里选择Compiler Level为1.8

项目报错提示没有src\main\java,src\test\resources,src\test\java等文件夹

解决办法:进入Java Build Path下的Source选卡,移除打小红叉的文件夹,然后自己右键项目新建Source Folder

© 著作权归作者所有

yuewawa

yuewawa

粉丝 5
博文 118
码字总数 20491
作品 0
南京
私信 提问
spring+restful service

Spring整合CXF,发布RSETful 风格WebService 这篇文章是承接之前CXF整合Spring的这个项目示例的延伸,所以有很大一部分都是一样的。关于发布CXF WebServer和Spring整合CXF这里就不再多加赘述...

游宵
2014/04/25
1K
1
新手初识webservice-实践篇

理论背景:《新手初识webservice-理论篇》http://my.oschina.net/achi/blog/52766 编程语言:Java 必要技能:JavaWeb,MVC,Spring IOC 情景假设:你刚用Java做了个网上店铺,用了servlet,MVC...

路飞
2012/04/12
8.9K
5
CXF创建webservice客户端和服务端

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本人声明。否则将追究法律责任。 作者:永恒の☆ 地址:http://blog.csdn.net/chenghui0317/article/details/9...

kt431128
2014/10/03
240
0
使用cxf发布webservice总结

一、概念 1、什么是webservice Web service是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML标准来描述、发布、发现、协调和配置这些应用程序,用于开发分...

漂泊者及其影子
2014/08/21
12.4K
0
Cxf 集成spring完整示例

1 CXF概述 1.1 CXF介绍 Apache CXF =Celtix + XFire,Apache CXF 的前身叫 Apache CeltiXfire,现在已经正式更名为 Apache CXF 了,以下简称为 CXF。CXF 继承了 Celtix 和 XFire 两大开源项目...

Zero零_度
2015/08/19
107
0

没有更多内容

加载失败,请刷新页面

加载更多

Java 8 Optional:优雅地避免 NPE

本篇文章将详细介绍 Optional 类,以及如何用它消除代码中的 null 检查。在开始之前首先来看下什么是 NPE,以及在 Java 8 之前是如何处理 NPE 问题的。 空指针异常(NullPointException,简称...

武培轩
20分钟前
1
0
CountDownLatch实现的并发框架

目录结构 package com.**.**.base.support.executor;import lombok.NoArgsConstructor;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;imp......

MR_TE
22分钟前
7
0
学习记录(day06-事件、按键修饰符、计算属性)

[TOC] 1.1 事件修饰符/按键修饰符 vue 通过事件修饰符对dom事件细节进行控制 <标签 @事件.修饰符="函数"></标签>.prevent ---阻止浏览器默认行为.stop ---阻止浏览器事件冒泡.e...

庭前云落
41分钟前
5
0
006-Sigle-基于blockstack去中心化博客

本篇文章主要讲解有关基于Blockstack的Sigle是一个去中心化的博客项目; 官网地址:https://www.sigle.io/ Github地址:https://github.com/pradel/sigle 页面展示: 介绍: A beautiful de...

Riverzhou
48分钟前
17
0
驰骋工作流引擎开发平台属性功能的隐藏显示介绍

关键字: 工作流程管理系统 工作流引擎 asp.net工作流引擎 java工作流引擎. 表单引擎 工作流功能说明 工作流设计 工作流快速开发平台 业务流程管理 bpm工作流系统 java工作流主流框架 自定义...

孟娟
50分钟前
14
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部