一、概念

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. }
当然这种写法很麻烦,如果有其他办法请大家不吝赐教。

最新文章

  1. chrome地址栏搜索直接跳转百度首页?
  2. Android 一些基本组件的使用
  3. 模块化开发--sea.js
  4. Linux操作系统下三种配置环境变量的方法
  5. 如何将 Microsoft Bot Framework 链接至微信公共号
  6. Bootstrap 类解析
  7. Comparable &amp; Comparator
  8. Codeforces Round #276 (Div. 1) B. Maximum Value 筛倍数
  9. 我是如何自学Android,资料分享
  10. JavaScript权威指南学习笔记4
  11. 数据库 SQL 外键约束 多表查询
  12. chrome console 调试xpath
  13. 一步一步学c#(六):数组
  14. 我学习go的五个感悟(译)
  15. (等比数列)P1423 小玉在游泳 洛谷
  16. 一键搭建LNMP脚本
  17. (转)python学习笔记4--数字类型与操作符
  18. 如何将同一 VNET 下的虚拟机从经典部署模型迁移到 Azure Resource Manager
  19. ROS——rqt
  20. JVM内存模型二

热门文章

  1. Linxu下Yii2的POST请求被拒经历
  2. vue-electron 使用sqlite3数据库,执行npm run build 报错 .NET Framework 2.0 SDK,Microsoft Visual Studio 2005[C:\temp\wechat\node_modules\sqlite3\build\binding.sln]
  3. RF分层封装
  4. PHP 组件注册的例子
  5. My Idea About ID wly_sh (关于用户名 wly_sh 的猜想)
  6. selenium-find_element相关内容(2)
  7. 4、OGNL与值栈
  8. css定位 双飞翼
  9. 5G:今天不谈技术,谈谈需求和应用
  10. MySQL GROUP_CONCAT()函数 -- 字段合并查询