WADL中的JSON模式

在其他工作之间,我最近一直在审查WADL规范,以解决一些文档问题,以生成更新版本。 因为显而易见的一件事是缺少对XML以外的语言的语法支持-是的,您可以使用JSON <-> XML Schema的映射,但这对于JSON纯粹主义者而言并不令人满意。

因此,我开始研究如何在服务的WADL描述中附加JSON文档的JSON-Schema语法。 这还不是一个规范。 但是有关它可能如何始终如一地工作的建议。

现在,我主要使用Jersey,因此,请考虑Jersey当前将为返回XML和JSON的服务生成什么。 因此,此处的服务是使用JAX-B绑定实现的,因此它们都使用与include的XML-Schema参考定义的结构类似的结构。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<application xmlns="http://wadl.dev.java.net/2009/02"><doc xmlns:jersey="http://jersey.java.net/" jersey:generatedBy="Jersey: 1.16-SNAPSHOT 10/26/2012 09:28 AM"/><grammars><include href="xsd0.xsd"><doc title="Generated" xml:lang="en"/></include></grammars><resources base="http://localhost/"><resource path="/root"><method id="hello" name="PUT"><request><representation xmlns:m="urn:message" element="m:requestMessage"  mediaType="application/json" /><representation xmlns:m="urn:message" element="m:requestMessage" mediaType="application/xml" /></request><response><representation xmlns:m="urn:message" element="m:responseMessage" mediaType="application/json"/><representation xmlns:m="urn:message" element="m:responseMessage" mediaType="application/xml" /></response></method></resource></resources>
</application>

因此,我们考虑的第一件事是在表示形式元素上重用现有的元素属性(定义为QName),以引用导入的JSON-Schema。 除了没有元素的XML元素外,这里还显示了一个和另一个任意的名字空间。

<grammars><include href="xsd0.xsd" /><include href="application.wadl/responseMessage" /></grammars><representation element="responseMessage" mediaType="application/json"/>Orxmlns:json="http://wadl.dev.java.net/2009/02/json" <representation element="json:responseMessage" mediaType="application/json" />

问题在于,目前的JSON-Schema规范没有“ name”属性的概念,因此每个JSON-Schema都由其URI唯一标识。 同样,从我阅读的规范中,每个JSON-Schema最多包含一个文档的定义-而不是XML-Schema中可以包含的多个类型/文档。

因此,下一个最佳建议是仅使用URI的“文件名”部分作为URI的代理。 但是当然这不一定是唯一的。 例如,我可以看到美国政府和雅虎都在这里发布了自己的“地址”微格式。

解决此问题的更好方法是引入一个新属性,幸运的是,WADL规范是在考虑到这一点而设计的,它是URI类型,可用于直接引用JSON-Schema定义。 因此,与上一个示例中的直接导入不同,我们在元素本身上具有URI属性。 “ describeby”属性名称来自JSON-Schema建议,并且与规范中原子链接上使用的rel一致。

xmlns:json="http://wadl.dev.java.net/2009/02/json-schema" xmlns:m="urn:message" <grammars><include href="xsd0.xsd" /></grammars><representation mediaType="application/json"element="m:responseMessage" json:describedby="application.wadl/responseMessage" />

的第二个优点是,该格式与依赖XML-Schema语法的工具向后兼容。 尽管对于像我这样从事工具/测试工具的人们来说,这可能只是有趣的事情。

一旦有了JSON-Schema定义,那么一些用户将想一起废除XML,因此,最后这里是WADL到仅包含JSON-Schema信息的JSON文档的简单映射。 Sergey Breyozkin已建议JSON映射仅显示json语法,而我正在考虑这种思维方式。 我很想听到一个想要访问XML Schema的JSON映射用例。

{"doc":{"@generatedBy":"Jersey: 1.16-SNAPSHOT 10/26/2012 09:28 AM"},"resources":{"@base":"http://localhost/","resource":{"@path":"/root","method":{"@id":"hello","@name":"PUT","request":{"representation":[{"@mediaType":"application/json","@describedby":"application.wadl/requestMessage"}]},"response":{"representation":[{"@mediaType":"application/json","@describedby":"application.wadl/responseMessage"}]}}}}
}

我目前正在使用“ application / vnd.sun.wadl + json”的MIME类型来使此映射与默认的WADL MIME类型一致。 我怀疑我们将来会希望改变这种情况; 但这对初学者来说确实有用。

因此,这都是非常有趣的,但是除非有示例实现,否则您将无法使用它。 我在Jersey和wadl2java中分别为服务器端和Java客户端生成器工作,这将是我下一篇文章的主题。 我一直在泽西团队的Pavel Bucek上研究这些实现和WADL提案,非常感谢他的支持。

参考:来自Gerard Davison博客博客的JCG合作伙伴 Gerard Davison提供的WADL中的JSON-Schema 。

翻译自: https://www.javacodegeeks.com/2012/11/json-schema-in-wadl.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/370727.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怎么用python自制计算公式_如何使用Python和Numpy计算r平方?

我最初发布下面的基准是为了推荐numpy.corrcoef&#xff0c;愚蠢地没有意识到原来的问题已经使用了corrcoef&#xff0c;实际上是在询问高阶多项式拟合。我已经使用statsmodels为多项式r-squared问题添加了一个实际的解决方案&#xff0c;并且我已经离开了原始的基准测试&#…

ASP .NET SVN emmet 插件

学习 ASP .NET 时间的第三周&#xff1a; 来讲讲如何在 visual studio 2013...上搭载 SVN吧: 废话不多说&#xff1a; One Step&#xff1a; 电脑上已安装 visual studio 2013 等版本&#xff08;未安装时 红色区域是不存在的&#xff09; Two Step&#xff1a; 从官网上下载对…

Python之路3【知识点】白话Python编码和文件操作(截载)

无意发现这篇文章讲的比较好&#xff0c;存下来供参考&#xff1a; http://www.cnblogs.com/luotianshuai/p/5735051.html转载于:https://www.cnblogs.com/shikaihong/p/7778880.html

Http协议入门

[在此处输入文章标题] 1 web web入门 1&#xff09;web服务软件作用: 把本地资源共享给外部访问 2&#xff09;tomcat服务器基本操作 &#xff1a; 启动: %tomcat%/bin/startup.bat 关闭&#xff1a; %tomcat%/bin/shutdown.bat 访问tomcat主页&#xff1a; http://loca…

计算机硬件系统都是看得见的,计算机组成硬件系统).doc

计算机组成硬件系统)各位计算机协会的成员大家好&#xff0c;很高兴大家能陪我们走过这段难忘的时光。为了让大家更好的学到东西&#xff0c;我们特地将计算机方面的东西整理成技术文档&#xff0c;共大家使用&#xff0c;祝大家学得愉快&#xff01;湘信院计算机协会一&#x…

Google Guava –期货

这篇文章是我在Google Guava上的系列文章的延续&#xff0c;这次涵盖了Future。 Futures类是用于使用Future / ListenableFuture接口的静态实用程序方法的集合。 Future是提交给ExecutorService的异步任务&#xff08;可运行或可调用&#xff09;的句柄。 Future界面提供以下方…

iptables 配置后连接不上数据库_Linux服务器配置-VSFTP服务配置(三)

上文&#xff1a;Linux服务器配置-VSFTP服务配置(二)一、vsftpd服务防火墙配置1、主动(POST)模式 FTP 防火墙配置CentOS6 系统 iptables 的配置iptables -t filter --line-number -nL INPUT#显示现有防火墙规则&#xff0c;查看是否开启20、21号端口。iptables -t filter -I IN…

下标索引必须为正整数类型或逻辑类型_Python3 基本数据类型

Python中的变量不需要声明。每个变量在使用前都必须赋值&#xff0c;变量赋值以后该变量才会被创建。在Python中&#xff0c;变量就是变量&#xff0c;它没有类型&#xff0c;我们所说的"类型"是变量所指的内存中对象的类型。Python 3中有六个标准的数据类型&#xf…

noip模拟赛 写代码

分析&#xff1a;这其实就是括号匹配题&#xff0c;一眼贪心题&#xff0c;不过一开始贪错了&#xff0c;以为([)]是合法的......其实括号之间不能嵌套. 一开始的想法是尽量往左边填左括号&#xff0c;因为每种括号的数量都确定了&#xff0c;那么左括号和右括号的数量也就确定…

[CF797C] Minimal string(贪心,栈)

题目链接&#xff1a;http://codeforces.com/contest/797/problem/C 题意&#xff1a;给个字符串&#xff0c;求字典序最小的出栈顺序。 一开始想用优先队列记录全局最小的字符&#xff0c;然后每次入栈的时候检查当前字符是不是最小的&#xff0c;如果是那么同时pop。这样做的…

让我们紧缩大数据

作为开发人员&#xff0c;我们的重点是简单&#xff0c;有效的解决方案&#xff0c;因此&#xff0c;最有价值的原则之一就是“保持简单和愚蠢”。 但是使用Hadoop map-reduce很难坚持这一点。 如果我们要评估多个Map Reduce作业中的数据&#xff0c;那么最终将得到与业务无关但…

行内元素和块元素以及行内块元素的特点

一、背景 初学html&#xff0c;接触很多标签 <h1>、<p>、<span>、<ul>、<em>等&#xff0c;当写出简单的小页面的时候&#xff0c;例如仅仅是一篇带有标题的文章&#xff0c;标题 <h1>标签单独一行&#xff0c;不管后面有多大的空间&…

软件测试的功能测试和性能测试,大型软件的功能测试流程及性能测试流程

大型软件具有涉及子模块繁多、建设过程复杂、功能全面、性能具有较高要求的特点。依据ISO/IEC 9126软件产品评估标准&#xff0c;需要对软件的功能性、可靠性、可用性、效率、可维护性、可移植性等方面进行评估。因此&#xff0c;需要有一种方法能够对大型软件进行测试&#xf…

vue 分模块打包 脚手架_Vue面试官最爱的底层源码问题,你可以这样回答!

最近看到身边很多人都在投简历&#xff0c;有因为企业裁员的&#xff0c;有因为自己想跳槽的&#xff0c;原因不一&#xff0c;但是最终大家都会需要接触到面试这个事情。但是很多人对待面试不够认真&#xff0c;只会等待结果&#xff0c;不去努力。所以这边想整理一些懒人面试…

re.containerbase.startinternal 子容器启动失败_Python项目容器化实践(二) Docker Machine和Docker Swarm...

前言这篇文章介绍Docker生态中的常被提到的Engine、Machine和Swarm&#xff0c;大家以了解为主&#xff0c;工作需要再深入。EngineDocker Engine其实就是我们常说的「Docker」&#xff0c;它是一个C/S模型(Client/Server)的应用&#xff0c;包含如下组件:Daemon。守护进程&…

基于设备树的TQ2440的中断(2)

下面以按键中断为例看看基于设备数的中断的用法&#xff1a; 设备树&#xff1a; tq2440_key {compatible "tq2440,key";interrupt-parent <&gpf>;interrupts <0 IRQ_TYPE_EDGE_FALLING>, <1 IRQ_TYPE_EDGE_FALLING>;key_3 <&gpf 2…

计算机里有个不能进入的磁盘分区,新电脑只有一个分区怎么办? 教你们如何不进pe给硬盘创建新分区!...

很多朋友新电脑刚买回来打开发现明明自己机械硬盘1T或者1T机械加128G固态&#xff0c;但是却只有一个或者两个分区&#xff0c;但是又不会分区现在教大家如何不用老毛桃大白菜之类的进pe系统里面就能直接创建新分区1 WinR输入diskmgmt.msc2进入磁盘管理可以查看本机的C盘与E盘的…

OSGi中的权限

在上一篇文章中 &#xff0c;我们介绍了为Java应用程序实现沙箱的方法&#xff0c;在其中我们可以安全地运行移动代码 。 这篇文章探讨了如何在OSGi环境中执行相同的操作。 OSGi OSGi规范 为Java定义了一个动态模块系统 。 因此&#xff0c;它是实施那种可以使您的应用程序动…

HTTP简单教程

目录 HTTP简介 HTTP工作原理 HTTP消息结构 客户端请求消息服务器响应消息实例 HTTP请求方法HTTP响应头信息HTTP状态码 HTTP状态码分类HTTP状态码列表 HTTP content-type对照表 HTTP简介 HTTP协议是Hyper Text Transfer Protocol&#xff08;超文本传输协议&#xff09;的缩写&…

Reversed-Z详解

在3D渲染管线中&#xff0c;Z这个家伙几乎无处不在&#xff0c;如Z-Buffer&#xff0c;Early-Z&#xff0c;Z-Cull&#xff0c;Z-Test&#xff0c;Z-Write等等&#xff0c;稍有接触图形学的人都会对这些术语有所耳闻。 那么Z到底是什么呢&#xff1f;首先Z当然可以是任意坐标系…