一、概念

1、什么是webservice

Web service是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的互操作的应用程序。

2、wsdl

网络服务描述语言是一个用来描述Web服务和说明如何与Web服务通信的XML(标准通用标记语言的子集)语言。为用户提供详细的接口说明书。

3、soap

简单对象访问协议是交换数据的一种协议规范,是一种轻量的、简单的、基于XML(标准通用标记语言下的一个子集)的协议,它被设计成在WEB上交换结构化的和固化的信息。

4、JAX-WS

一种 Java 规范,名为 JAX-WS(JSR-224),全称 Java API for XML-Based Web Services,可以将规范理解为官方定义的一系列接口。即一般所说的SOAP风格。

5、JAX-RS

为了让 WS 的开发与使用变得更加简单、更加轻量级,于是出现了另一种风格的 WS,名为 JAX-RS(JSR-339),全称 Java API for RESTful Web Services,同样也是一种规范,同样也有若干实现,cxf是其中比较著名的一种。

二、使用cxf发布soap风格的webservice服务

1、如何发布服务

直接看这篇:
文章讲的十分明白易懂,如果想快速上手,跳过文章的前两部分,直接看第三部分:
“3. 在 Web 容器中使用 Spring + CXF 发布 WS”

2、可能出现的问题

(1)优化实践
在“Web Service 那点事儿(2)—— 使用 CXF 开发 SOAP 服务 ”这篇文章中,接口只写加了最基本的注解,比如下面这样:
  1. @WebService
  2. public interface HelloService {
  3. String say(String name);
  4. }

这样虽然也能用,但是在实际使用中容易出现各种各样的奇怪问题,所以建议把接口名、命名空间、参数声明之类的都加上,比如下面这样:
  1. @WebService(targetNamespace="http://service.sky.com/",name="GoodDay",serviceName="GoodDay")
  2. public interface GoodDay {
  3. @WebMethod(action = "http://service.sky.com/SayHello")
  4. public String SayHello(@WebParam(name = "uname",targetNamespace="http://service.sky.com/")String uname);
  5. }

(2)javax.xml.bind.UnmarshalException: 意外的元素 (uri:"http://service.sky.com/", local:"uname")。所需元素为<{}uname>
出现原因是为参数设置了参数名,却没有设置命名空间。
比如,接口写成如下这样,就很容易出现这个错误。
  1. @WebService(targetNamespace="http://service.sky.com/",name="GoodDay",serviceName="GoodDay")
  2. public interface GoodDay {
  3. @WebMethod(action = "http://service.sky.com/SayHello")
  4. public String SayHello(@WebParam(name = "uname")String uname);
  5. }
解决方法是为参数加上命名空间,如下所示:
  1. @WebService(targetNamespace="http://service.sky.com/",name="GoodDay",serviceName="GoodDay")
  2. public interface GoodDay {
  3. @WebMethod(action = "http://service.sky.com/SayHello")
  4. public String SayHello(@WebParam(name = "uname",targetNamespace="http://service.sky.com/")String uname);
  5. }
当然这种写法很麻烦,如果有其他办法请大家不吝赐教。

使用CXF发布webservice服务及注意要点的更多相关文章

  1. CXF发布webService服务以及客户端调用

    这篇随笔内容是CXF发布webService服务以及客户端调用的方法 CXF是什么? 开发工作之前需要下载CXF和安装 下载地址:http://cxf.apache.org 安装过程: <1&g ...

  2. 使用CXF发布WebService服务简单实例

    一.说明: 前面介绍了使用axis2来发布Webservice服务,现在介绍一种更popular,更高效的Webservice服务发布技术:CXF Apache CXF = Celtix + XFir ...

  3. cxf发布 webservice服务

    导包 antlr-2.7.7.jar aopalliance-1.0.jar asm-3.3.jar commons-collections-3.2.1.jar commons-lang-2.6.ja ...

  4. 使用Cxf发布Webservice服务,如果待发布的接口中有重载方法,怎么处理??

    使用 @WebMethod(operationName="multiParamByName")  重新指定名字. http://bbs.csdn.net/topics/270059 ...

  5. Spring整合CXF之发布WebService服务

    今天我们来讲下如何用Spring来整合CXF,来发布WebService服务: 给下官方文档地址:http://cxf.apache.org/docs/writing-a-service-with-s ...

  6. JAVAEE——BOS物流项目07:WebService入门、apache CXF入门、基于CXF发布CRM服务

    1 学习计划 1.WebService入门 n 什么是WebService n 调用网络上的WebService服务 n SOAP和WSDL概念 n 基于JDK1.7发布一个简单的WebService ...

  7. 使用CXF框架,发布webservice服务,并使用客户端远程访问webservice

    使用CXF框架,发布webservice服务,并使用客户端远程访问webservice  1. CXF介绍 :soa的框架    * cxf 是 Celtrix (ESB框架)和 XFire(webs ...

  8. [置顶] 利用CXF发布webService的小demo

    其实webService的发布不仅仅只有xfire,今天,给大家介绍一下用CXF发布一个webService的小demo,CXF也是我做webService用的第一个框架... 先将相关的jar引进来 ...

  9. 【转】构建基于CXF的WebService服务

    构建基于CXF的WebService服务 Apache CXF = Celtix+ XFire,开始叫 Apache CeltiXfire,后来更名为 Apache CXF 了,以下简称为 CXF.C ...

随机推荐

  1. 声学回声消除(Acoustic Echo Cancellation)

    回声就是声音信号经过一系列反射之后,又听到了自己讲话的声音,这就是回声.一些回声是必要的,比如剧院里的音乐回声以及延迟时间较短的房间回声:而大多数回声会造成负面影响,比如在有线或者无线通信时重复听到自 ...

  2. 全面系统Python3入门+进阶课程 ✌✌

    全面系统Python3入门+进阶课程 (一个人学习或许会很枯燥,但是寻找更多志同道合的朋友一起,学习将会变得更加有意义✌✌) 无论是大数据.人工智能还是机器学习,Python都是最热门的首选语言 ,这 ...

  3. Unreal Engine 4 系列教程 Part 4:UI教程

    .katex { display: block; text-align: center; white-space: nowrap; } .katex-display > .katex > ...

  4. Vue3都使用Proxy了,你更应该了解Proxy

    vue3.0的pre-alpha版代码已经开源了,就像作者之前放出的消息一样,其数据响应这一部分已经由ES6的Proxy来代替Object.defineProperty实现,感兴趣的同学可以看其实现源 ...

  5. [BZOJ4947] 字符串大师 - KMP

    4974: [Lydsy1708月赛]字符串大师 Time Limit: 1 Sec  Memory Limit: 256 MBSubmit: 739  Solved: 358[Submit][Sta ...

  6. std::this_thread::yield/sleep_for

    std::this_thread::yield(): 当前线程放弃执行,操作系统调度另一线程继续执行.. std::this_thread::sleep_for(): 表示当前线程休眠一段时间,休眠期 ...

  7. pytest3-命令行选项

    1.pytest -h 查看pytest常用命令 E:\myproj\pytest_demo>pytest -h usage: pytest [options] [file_or_dir] [f ...

  8. FileZilla Server超详细配置

    FileZilla Server下载安装完成后,必须启动软件进行设置,由于此软件是英文,本来就是一款陌生的软件,再加上英文(注:本站提供中文版本,请点击下载),配置难度可想而知,站长从网上找到一篇非常 ...

  9. vue系列文章 --- 源码目录结构整理(三)

    vue的版本是:^2.6.10 结构如下: |----- vue | |--- dist # 打包之后的目录vue文件 | | |--- vue.common.dev.js | | |--- vue. ...

  10. python3.8安装flask出现错误“ModuleNotFoundError: No module named '_ctypes'”

    本想在CentOS下配置flask+nginx+uwsgi环境,结果安装最基础的flask包都出了问题...以下是我的环境: 服务器:阿里云ECS CentOS7 python版本:3.8.0 问题描 ...