JAVA的WebService规范(支持)

2023-11-18

   SOA(Service-Oriented Architecture)面向服务架构是一种思想,它将应用程序的不同功能单元通过中立的契约(独立于硬件平台、操作系统和编程语言)联系起来,使得各种形式的功能单元更好的集成。目前来说,WebService 是SOA 的一种较好的实现方WebService 采用HTTP 作为传输协议,SOAP(Simple Object Access Protocol)作为传输消息的格式。但WebService 并不是完全符合SOA 的概念,因为SOAP 协议是WebService 的特有协议,并未符合SOA 的传输协议透明化的要求。SOAP 是一种应用协议,早期应用于RPC 的实现,传输协议可以依赖于HTTP、SMTP 等。SOA 的产生共经历了如下过程:

 

 

 

通常采用SOA 的系统叫做服务总线(BUS),结构如下图所示:

 

 

----------------------------------------------------------------------------------------------------------------------------------------

JAVA中的Web服务规范:
JAVA 中共有三种WebService 规范,分别是JAXM&SAAJ、JAX-WS(JAX-RPC)、JAX-RS。
下面来分别简要的介绍一下这三个规范。
(1.)JAX-WS:
JAX-WS(Java API For XML-WebService),JDK1.6 自带的版本为JAX-WS2.1,其底层支

持为JAXB。早期的基于SOAP 的JAVA 的Web 服务规范JAX-RPC(Java API For
XML-Remote Procedure Call)目前已经被JAX-WS 规范取代,JAX-WS 是JAX-RPC 的演进
版本,但JAX-WS 并不完全向后兼容JAX-RPC,二者最大的区别就是RPC/encoded 样式的
WSDL,JAX-WS 已经不提供这种支持。JAX-RPC 的API 从JAVA EE5 开始已经移除,如
果你使用J2EE1.4,其API 位于javax.xml.rpc.*包。
JAX-WS(JSR 224)规范的API 位于javax.xml.ws.*包,其中大部分都是注解,提供API 操
作Web 服务(通常在客户端使用的较多,由于客户端可以借助SDK 生成,因此这个包中的
API 我们较少会直接使用)。
WS-MetaData(JSR 181)是JAX-WS 的依赖规范,其API 位于javax.jws.*包,使用注解配
置公开的Web 服务的相关信息和配置SOAP 消息的相关信息。
(2.)JAXM&SAAJ:
JAXM(JAVA API For XML Message)主要定义了包含了发送和接收消息所需的API,相当
于Web 服务的服务器端,其API 位于javax.messaging.*包,它是JAVA EE 的可选包,因此
你需要单独下载。
SAAJ(SOAP With Attachment API For Java,JSR 67)是与JAXM 搭配使用的API,为构建
SOAP 包和解析SOAP 包提供了重要的支持,支持附件传输,它在服务器端、客户端都需要
使用。这里还要提到的是SAAJ 规范,其API 位于javax.xml.soap.*包。
JAXM&SAAJ 与JAX-WS 都是基于SOAP 的Web 服务,相比之下JAXM&SAAJ 暴漏了SOAP
更多的底层细节,编码比较麻烦,而JAX-WS 更加抽象,隐藏了更多的细节,更加面向对
象,实现起来你基本上不需要关心SOAP 的任何细节。那么如果你想控制SOAP 消息的更
多细节,可以使用JAXM&SAAJ,目前版本为1.3。
(3.)JAX-RS:
JAX-RS 是JAVA 针对REST(Representation State Transfer)风格制定的一套Web 服务规范,
由于推出的较晚,该规范(JSR 311,目前JAX-RS 的版本为1.0)并未随JDK1.6 一起发行,
你需要到JCP 上单独下载JAX-RS 规范的接口,其API 位于javax.ws.rs.*包。
这里的JAX-WS 和JAX-RS 规范我们采用Apache CXF 作为实现,CXF 是Objectweb Celtix
和Codehaus XFire 合并而成。CXF 的核心是org.apache.cxf.Bus(总线),类似于Spring 的
ApplicationContext,Bus 由BusFactory 创建,默认是SpringBusFactory 类,可见默认CXF
是依赖于Spring 的,Bus 都有一个ID,默认的BUS 的ID 是cxf。你要注意的是Apache CXF
2.2 的发行包中的jar 你如果直接全部放到lib 目录,那么你必须使用JDK1.6,否则会报
JAX-WS 版本不一致的问题。对于JAXM&SAAJ 规范我们采用JDK 中自带的默认实现。
------------------------------------------------------------------------------------
1.JAVA的WebService规范JAX-WS:
Web 服务从前面的图中不难看出自然分为Server、Client 两部分,Server 公开Web 服务,
Client 调用Web 服务,JAX-WS 的服务端、客户端双方传输数据使用的SOAP 消息格式封
装数据,在后面我们会看到其实SOAP 信封内包装的就是一段XML 代码。

 

 I.服务端示例:
我们先看一个服务器端示例:
(1.)公开Web 服务的接口IHelloService:

 

我们看到这个接口很简单,仅仅是使用类级别注解@WebService 就标注了这个接口的方法
将公开为Web 服务,使用了这个注解的接口的所有方法都将公开为Web 服务的操作,如果
你想屏蔽某个方法,可以使用方法注解@Method 的exclude=true。我们也通常把公开为Web
服务的接口叫做SEI(Service EndPoint Interface)服务端点接口。

 

(2.)实现类HelloServiceImpl:

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JAVA的WebService规范(支持) 的相关文章

  • 如何在 Openfire 中使用 smack

    你好 我计划开发一个可以连接到 gtalk facebook 等的聊天客户端 我决定将 smack API 与 openfire 一起使用 但我需要很少的指导来了解如何将它与 openfire 服务器一起使用 openfire 是否提供了基
  • 删除优先级队列的尾部元素

    如何删除优先级队列的尾部元素 我正在尝试使用优先级队列实现波束搜索 一旦优先级队列已满 我想删除最后一个元素 优先级最低的元素 Thanks 没有简单的方法 将元素从原始元素复制到新元素 最后一个除外 PriorityQueue remov
  • tomcat 7.0.50 java websocket 实现给出 404 错误

    我正在尝试使用 Java Websocket API 1 0 JSR 356 中指定的带注释端点在 tomcat 7 0 50 上实现 websocket 以下是我如何对其进行编码的简要步骤 1 使用 ServerEndpoint注解编写w
  • FileNotFoundException - Struts2 文件上传

    Strange FileNotFoundException使用Struts2上传文件时 这是 JSP 的一部分
  • 如何在java Spring Boot中实现通用服务类?

    我有许多具有重复代码的服务 我想知道如何实现通用服务 以便我的所有服务都可以扩展它 服务接口示例 重复代码 Service public interface IUserService List
  • 为什么Iterator接口没有add方法

    In IteratorSun 添加了remove 方法来删 除集合中最后访问的元素 为什么没有add方法来向集合中添加新元素 它可能对集合或迭代器产生什么样的副作用 好的 我们开始吧 设计常见问题解答中明确给出了答案 为什么不提供 Iter
  • Java中的断点和逐步调试?

    抱歉我的问题名称很奇怪 我不知道如何寻找这个 因为我不知道这些东西是如何称呼的 Visual Studio 中至少有一个功能 您可以单击代码左侧并设置一个大红点的起点 然后运行程序 您可以通过按 f8 或 f5 实际上是不同的 f 来跟踪步
  • 在 MongoDB 和 Apache Solr 之间同步数据的简单方法

    我最近开始使用 MongoDB 和 Apache Solr 我使用 MongoDB 作为数据存储 并且希望 Apache Solr 为我的数据创建索引 以实现应用程序中的搜索功能 经过一些研究 我发现 基本上有两种方法可以在 MongoDB
  • 虽然我的类已加载,但 Class.forName 抛出 ClassNotFoundException

    代码如下 它的作用是加载我放在主目录中的 jar 文件中的所有类 import java io File import java util jar JarFile import java util jar JarEntry import j
  • 当 minifyEnabled 为 true 时 Android 应用程序崩溃

    我正在使用多模块应用程序 并且该应用程序崩溃时minifyEnabled true in the installed模块的build gradle 以下是从游戏控制台检索到的反混淆堆栈跟踪 FATAL EXCEPTION Controlle
  • 如何停止执行的 Jar 文件

    这感觉像是一个愚蠢的问题 但我似乎无法弄清楚 当我在 Windows 上运行 jar 文件时 它不会出现在任务管理器进程中 我怎样才能终止它 我已经尝试过 TASKKILL 但它对我也不起作用 On Linux ps ef grep jav
  • JAVA中遍历JSON数据

    我是 JSON 新手 我使用 HTTPUrlConnections 并在 JAVA 程序中获得一些响应 响应数据将类似于 data id 1 userId 1 name ABC modified 2014 12 04 created 201
  • IntelliJ 组织导入

    IntelliJ 是否具有类似于 Eclipse 中的组织导入功能 我拥有的是一个 Java 文件 其中多个类缺少导入 例子 package com test public class Foo public Map map public J
  • 避免 Java 中的重复导入:继承导入?

    有没有办法 继承 导入 Example 常见枚举 public enum Constant ONE TWO THREE 使用此枚举的基类 public class Base protected void register Constant
  • 如何从 Ant 启动聚合 jetty-server JAR?

    背景 免责声明 I have veryJava 经验很少 我们之前在 Ant 构建期间使用了 Jetty 6 的包装版本来处理按需静态内容 JS CSS 图像 HTML 因此我们可以使用 PhantomJS 针对 HTTP 托管环境运行单元
  • 无需登录即可直接从 Alfresco 访问文件/内容

    我的场景是这样的 我有一个使用 ALFRESCO CMS 来显示文件或图像的 Web 应用程序 我正在做的是在 Java servlet 中使用用户名和密码登录 alfresco 并且我可以获得该登录的票证 但我无法使用该票证直接从浏览器访
  • 我可以限制分布式应用程序发出的请求吗?

    我的应用程序发出 Web 服务请求 提供商处理的请求有最大速率 因此我需要限制它们 当应用程序在单个服务器上运行时 我曾经在应用程序级别执行此操作 一个对象跟踪到目前为止已发出的请求数量 并在当前请求超出允许的最大负载时等待 现在 我们正在
  • 如何在Java中对对象数组进行字段级别排序以进行等级比较?

    In Java Class StudentProgress String Name String Grade CTOR goes here main class main method StudentProgress arrayofObje
  • 如何处理 StaleElementReferenceException

    我正在为鼠标悬停工作 我想通过使用 for 循环单击每个链接来测试所有链接的工作条件 在我的程序中 迭代进行一次 而对于下一次迭代 它不起作用并显示 StaleElementReferenceException 如果需要 请修改代码 pub
  • 将对象从手机共享到 Android Wear

    我创建了一个应用程序 在此应用程序中 您拥有包含 2 个字符串 姓名和年龄 和一个位图 头像 的对象 所有内容都保存到 sqlite 数据库中 现在我希望可以在我的智能手表上访问这些对象 所以我想实现的是你可以去启动 启动应用程序并向左和向

随机推荐

  • 关于redis 5.0 新数据类型 Stream

    redis 5 0 新特性见 https www oschina net news 100931 redis 5 0 released p 2 对于stream 详细使用和解释见https www zhihu com question 27
  • 宋浩线性代数笔记(五)矩阵的对角化

    本章的知识点难度和重要程度都是线代中当之无愧的T0级 对于各种杂碎的知识点 多做题 复盘才能良好的掌握 良好掌握的关键点在于 所谓的性质A与性质B 是谁推导得谁
  • Pytorch学习(二)使用 torchvision

    Pytorch学习 二 使用 torchvision 训练图像分类器 准备数据集 torchvision 一 导入torchvision的库 二 使用datasets CIFAR10 函数加载数据库 三 DataLoader用多进程加速ba
  • tensorflow历史版本源码下载地址

    最近在tensorflow对应的网站上找到了tensorflow历史版本源码的下载地址 tensorflow历史版本下载地址
  • 导入MDF文件到数据库

    1 导入脚本 EXEC sp attach db dbname yhzm filename1 d jspyhzm mdf filename2 d jspyhzm log ldf 2 Microsoft SQL Server删除数据库提示出错
  • inno setup制作的安装包,安装后以管理员身份启动

    添加管理员权限 1 在 Setup 节点添加 PrivilegesRequired admin 2 进入安装目录 找到文件SetupLdr e32 这是一个二进制配置文件 需要用到ResHacker exe这个工具修改 找到
  • Win10 WSL2-CentOS7开启systemctl命令(2022-11-18更新)

    Win10 WSL2 CentOS7开启systemctl命令 2022 11 18更新 概述 文章基于如下环境 已开启WSL2的win10或者win11 WSL2下的CentOS7 下载地址为 CentOS7 自从win10支持WSL2以
  • lanelet安装

    1 https github com KIT MRT mrt cmake modules 2 sudo apt get install libpugixml dev sudo apt get install libpugixml1v5 3
  • 群体遗传学---admixture软件快速群体分群

    群体遗传学中测的很多个个体 得到了最终的SNP vcf文件 需要将其分成群体 看那几个物种聚在一起 一般使用的软件就是STRUCTURE 但是STREUTURE运行速度极慢 后面frappe软件提升了速度 但是也不是很快 admixture
  • php 解析 %e5%80%aa%e9%a3%9e,content.json

    title Linux安装Docker date 2020 11 08T14 54 29 000Z path 2020 11 08 Linux安装Docker tags name Linux Docker slug Linux Docker
  • loC和AOP使用扩展

    6 1多种方式实现依赖注入 6 1 1构造注入 6 1 2技能训练1 6 1 3使用p命名空间实现属性注入 Spring配置文件从2 0版本开始采用schema形式 使用不同的命名空间管理不同类型的配置使得配置文件更具扩展性 列如 我们曾使
  • [Python]pip查找包的历史版本

    pip查找包的历史版本 场景 在一些时候通过pip install xxx 安装第三方库的时候默认情况下安装最新版本 由于是最新版本有个稳定性就不得不考虑其中 所以部分场景会存在一些bug这就要求我们安装历史版本 对一些更新频率比较高的三方
  • Window&linux使用换行符的问题总结

    1 Window使用Git时 设置换行符格式 参见 https www jianshu com p 6ef90ce18ba2 2 vi下设置回车换行符等特殊符号 换行方式 在早期的打印机时代 开始新的一行要占用两个字符的时间 如果到了一行的
  • java.lang.UnsatisfiedLinkError

    java lang UnsatisfiedLinkError 原因 jni注册的时候匹配写错了 I B B 如下 static JNINativeMethod methods native getSps I B B void Native
  • Keras保存模型并载入模型继续训练

    我们以MNIST手写数字识别为例 import numpy as np from keras datasets import mnist from keras utils import np utils from keras models
  • PyQt5中的按钮3-QCommandLinkButton

    PyQt5中的按钮3 QCommandLinkButton QCommandLinkButton介绍 QCommandLinkButton举例 QCommandLinkButton介绍 CommandLinkButton 外观像是一个被设置
  • verilog赋多位值_关于verilog 赋值

    1 wire表示直通 即只要输入有变化 输出马上无条件地反映 reg表示一定要有触发 输出才会反映输入 2 只有 lt 表示非阻塞 给沿触发的寄存器赋值 是阻塞赋值 给电平触发的信号赋值 3 不指定就默认为1位wire类型 专门指定出wir
  • 计算机视觉论文-2021-07-19

    本专栏是计算机视觉方向论文收集积累 时间 2021年7月19日 来源 paper digest 欢迎关注原创公众号 计算机视觉联盟 回复 西瓜书手推笔记 可获取我的机器学习纯手推笔记 直达笔记地址 机器学习手推笔记 GitHub地址 1 T
  • 在struts1.1框架下,利用smartupload实现文件的上传(可以是多个文件)

    1 前端页面upload jsp 后台处理程序UplodAction java 2 struts config的配置参数如下 没有设置 ActionForm
  • JAVA的WebService规范(支持)

    SOA Service Oriented Architecture 面向服务架构是一种思想 它将应用程序的不同功能单元通过中立的契约 独立于硬件平台 操作系统和编程语言 联系起来 使得各种形式的功能单元更好的集成 目前来说 WebServi