一、概念

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. linux系统定时发送邮件

    Linux Centos7系统下利用自带的mail发送邮件服务 简介 本章分为五部分. 第一部分是基于虚拟机下的CentOS 7环境定时发送邮件: 第二部分是基于在阿里云购买的CentOS 7服务器环 ...

  2. Beautiful Soup 4.2.0 文档(一)

    Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beautiful Soup会帮你节省数小时 ...

  3. php代码Xdebug调试使用笔记

    0x01 Xdebug简介 Xdebug是一个开放源代码的PHP程序调试器 运行流程: 0x02  Xdebug配置 日志 xdebug.trace_output_dir: 日志追踪输出目录 xdeb ...

  4. PHP get_object_vars 和 get_class_vars

    <?php class Girl { public $id = 1; public $name = 'zhy'; } $girl = new Girl(); var_dump(get_class ...

  5. luogu P3878 [TJOI2010]分金币

    [返回模拟退火略解] 题目描述 今有 nnn 个数 {ai}\{a_i\}{ai​},把它们分成两堆{X},{Y}\{X\},\{Y\}{X},{Y},求一种分配使得∣∑i∈Xai−∑i∈Yai∣|\ ...

  6. Docker卷

    要解决的问题:在移除了现有容器或者添加了新容器时,之前容器的数据无法访问. 为避免上述问题,Docker提供了以下策略来持久化数据 tmpfs挂载 绑定挂载 卷 1.tmpfs挂载 2.绑定挂载 将D ...

  7. Python编程系列---Python中装饰器的几种形式及万能装饰器

    根据函数是否传参  是否有返回值 ,可以分析出装饰器的四种形式: 形式一:无参无返回值 def outer(func): def wrapper(): print("装饰器功能1" ...

  8. unittest-A接口的返回结果作为B接口的入参(设置全局变量)

    在A接口用例中设置全局变量: globals()["a"] = "用例A的返回结果" 在B接口用例中使用全局变量: b = globals()["a& ...

  9. C语言I博客作业05

    内容 答案 这个作业属于哪个课程 C语言程序设计II 这个作业要求在哪里 C语言I作业05 我在这个课程的目标是 更熟练的运用编译函数问题 这个作业在哪个具体方面帮助我实现目标 PTA实验作业 参考文 ...

  10. 闪讯 开启wifi教程

    这是我自己试了几次之后发现的,也不是什么技术活. 首先说下,我的比较是小米pro笔记本,一般笔记本都是自带wifi功能的.如果要开wifi的话,必须是用网线连接才可以,通过wifi连接网络就不能开移动 ...