zoukankan      html  css  js  c++  java
  • 使用CXF发布webservice服务及注意要点

    一、概念

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





  • 相关阅读:
    关于故事和段子
    SQLserver2008数据库备份和还原问题(还原是必须有完整备份)
    百度文库破解方法
    如何识别病毒,转自百度文库,千辛万苦破解出来的
    20个人艰不拆的事实:知道真相的我眼泪掉下来 T.T
    linux学习网站分享
    个人对于腾讯和优酷的看法
    今天去客户现场的一些感想
    基于 Blazui 的 Blazor 后台管理模板 Blazui.Admin 正式尝鲜
    新手福利!Blazor 从入门到砖家系列教程(你真的可以成为砖家)
  • 原文地址:https://www.cnblogs.com/bailiyi/p/6178808.html
Copyright © 2011-2022 走看看