使用GlassFish 4.0测试驱动Java API以处理JSON

编写规范并为其做出贡献是一回事。 如果您想提供宝贵的反馈意见,请使用它并研究真实的示例。 最新推广的GlassFish构建包含重命名为4.0,我认为现在是对Java处理JSON(JSON-P)API进行测试的好时机。

获取启用了Java EE 7的GlassFish 4.0

首先要做的是从升级的版本中获取最新的启用Java EE 7的GlassFish 4.0的副本。 我正在使用GlassFish Server开源版4.0(内部版本77 ),它似乎非常稳定。 但是总的来说,如果您要尝试这样做,请记住,升级后的版本基本上是开发版本和不稳定版本的
GlassFish 4.0正在进行的工作。 抱怨他们没有多大意义。 将下载文件解压缩到合适的位置。 对于后续步骤,您需要更新modules目录中的JSON-P RI。 遵循Arun的博客,了解如何获取和构建JSON-P RI ,并将jsonp〜git \ impl \ target \ javax.json-1.0-SNAPSHOT.jar复制到glassfish4 \ glassfish \ modules \ javax.json.jar。 如果在此步骤中做错了什么,请确保制作一份原件的副本。 如果您对此感到不舒服,也可以稍后跳过它并选择其他依赖项……事实是,JSON-P API在过去几个月中发生了很大变化,GlassFish包含的b02不再适合给你看任何东西。 因此,现在,我们必须对其进行一些调整。 之后,您将可以将全新的GlassFish安装集成到您最喜欢的IDE(可能是NetBeans)中 。

创建一个新的Java EE 7项目

Java EE 7原型位于codehaus.org快照存储库中。 为了通过NetBeans有效地使用它,您必须在“ Maven存储库”下的“服务”选项卡上配置存储库。 存储库URL为https://nexus.codehaus.org/content/repositories/snapshots/。 处理索引可能需要一段时间。 之后,继续执行“新建项目> Maven>来自原型的项目”向导,并在搜索框中输入“ webapp-javaee7”。 选择0.1-快照,然后单击“完成”。 另外,您始终可以使用以下命令行:

mvn -DarchetypeGroupId=org.codehaus.mojo.archetypes -DarchetypeArtifactId=webapp-javaee7 -DarchetypeVersion=0.1-SNAPSHOT -DarchetypeRepository=https://nexus.codehaus.org/content/repositories/snapshots/ -DgroupId=net.eisele.sample -DartifactId=javaee7-jsonp -Dversion=1.0-SNAPSHOT -Dpackage=net.eisele.javaee7jsonp -Darchetype.interactive=false --batch-mode --update-snapshots archetype:generate

现在打开项目并编辑pom.xml。 将javaee-web-api的范围更改为提供的范围,并添加json-api依赖项,如下所示:

<dependencies><dependency><groupId>javax.json</groupId><artifactId>javax.json-api</artifactId><version>1.0-SNAPSHOT</version><scope>provided</scope></dependency><dependency><groupId>javax</groupId><artifactId>javaee-web-api</artifactId><version>7.0-b72</version><scope>provided</scope></dependency></dependencies>

请确保使用版本1.0-SNAPSHOT和_not_正式记录的1.0-b02 。 我们希望将第一段中构建的最新快照与所有新API一起使用。如果您决定不采用“以自己的方式构建”,则可以简单地使用maven Central的1.0-b04。 这也有效。 请确保完全具有此依存关系顺序。 如果没有,您将使用javaee-web-api依赖项随附的旧b02。 有人说过,Maven很简单吗? 现在就这样。 让我们创建一个简单的JAX-RS端点。

添加JAX-RS人员资源

首先要做的是编写基本的JAX-RS资源。 您可以通过NetBeans的“来自Pattern的RESTful Web服务”向导来完成此操作,也可以自己概述以下简短类:

@Path('person')
public class PersonResource {public PersonResource() {}@GET@Produces('application/json')public String getJson() {return '[]';}

该课程需要注册。 您可以使用Jerseys servlet机制来执行此操作,也可以使用特定于应用程序的ApplicationConfig自己注册它:

@javax.ws.rs.ApplicationPath('webresources')
public class ApplicationConfig extends Application {@Overridepublic Set<Class<?>> getClasses() {Set<Class<?>> resources = new java.util.HashSet<>();resources.add(net.eisele.javaee7jsonp.PersonResource.class);return resources;}
}

哇..这应该是目前为止。 您应该给它试驾。 将其部署到您的域,然后尝试http:// localhost:8080 / javaee7-jsonp / webresources / person。 它应该只打印空括号[]。 现在是时候添加一些JSON-P了。

使用JSON-P构建JSON对象

我们将使用基于DOM的API构建人的JSON表示形式。 用以下代码替换PersonResource中的return语句:

JsonObjectBuilder builder = Json.createObjectBuilder();builder.add('person', Json.createObjectBuilder().add('firstName', 'Markus').add('lastName', 'Eisele'));JsonObject result = builder.build();StringWriter sw = new StringWriter();try (JsonWriter writer = Json.createWriter(sw)) {writer.writeObject(result);}return sw.toString();

现在,让我们使用我最喜欢的Chrome扩展程序来看看我们拥有的功能:


显然可以。 反过来,这将意味着读取传入的JSON。 看起来可能如下所示:

String json = '{\n'+ '    \'person\': {\n'+ '        \'firstName\': \'Markus\',\n'+ '        \'lastName\': \'Eisele\'\n'+ '    }\n'+ '}';JsonReader jr = Json.createReader(new StringReader(json));JsonValue value = jr.readObject();jr.close();

除了DOM-API之外,您还拥有一个Streaming-API,该API使用

JsonGenerator generator = Json.createGenerator(new FileWriter(..))JsonParser parser = Json.createParser(new StringReader(...));

生成和解析JSON。 请查看最新的JavaDoc以获取完整参考。 继续尝试自己开车。

参考:来自JCG合作伙伴 Markus Eisele在企业软件开发和Java博客上测试了用于驱动GlassFish 4.0处理JSON的Java API 。

翻译自: https://www.javacodegeeks.com/2013/02/test-driving-java-api-for-processing-json-with-glassfish-4-0.html

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

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

相关文章

查询已有链表的hashmap_原创 | 面试不再慌,看完这篇保证让你写HashMap跟玩一样...

点击上方蓝色小字&#xff0c;关注“码农小黑屋”重磅干货&#xff0c;第一时间送达今天这篇文章给大家讲讲hashmap&#xff0c;这个号称是所有Java工程师都会的数据结构。为什么说是所有Java工程师都会呢&#xff0c;因为很简单&#xff0c;他们不会这个找不到工作。几乎所有面…

华为p40手机自带计算机,华为p40pro支持PC模式吗_华为p40pro能连接至电脑模式吗

华为p40pro支持PC模式吗&#xff1f;华为p40pro能连接至电脑模式吗&#xff1f;从前几年开始&#xff0c;就有部分华为手机可以支持PC模式了。这个模式在出差的时候还是很实用的&#xff0c;可以直接将手机上的内容投屏到投影仪等大屏设备上&#xff0c;不需要带笔记本电脑&…

工欲善其事

持续补充更新中....... 工具箱汇总 娄老师的超强百宝箱 &#xff08;必看&#xff01;&#xff01;&#xff09;张老师 的总结 在博客中插入代码作业高分博客指南冲刺博客指南环境搭建 Git和Github教程Git简明指南猴子都能懂的GIT入门Coding使用方法如何使用Git和码云转载于:ht…

在Bootstrap框架中,form-control的效果

在Bootstrap框架中&#xff0c;通过定制了一个类名form-control&#xff0c;也就是说&#xff0c;如果这几个元素使用了类名“form-control”&#xff0c;将会实现一些设计上的定制效果。 1、宽度变成了100% 2、设置了一个浅灰色&#xff08;#ccc&#xff09;的边框 3、具有…

ubuntu 使用apt-get install 安装php5.6--php7

使用ppa增加源:$ sudo apt-get install python-software-properties $ sudo add-apt-repository ppa:ondrej/php $ sudo apt-get update $ sudo apt-get install -y php7.0 php7.0-mysql php7.0-curl php7.0-json php7.0-cgi然后可以查看php版本:php -v关于php5.4--php5.6版本 …

实体管理器的类型:应用程序管理的EntityManager

JPA规范定义了几种类型的EntityManagers / Persistence Context。 我们可以有&#xff1a; 扩展的和事务范围的EntityManager&#xff0c; 容器管理或应用程序管理的EntityManager。 JTA或本地资源EntityManager&#xff0c; 除了上述区别外&#xff0c;我们还可以在其中存…

的内怎么放_汽车后备箱的“四不放”原则,你知道吗?网友:怎么不早说

汽车已经开始存在在越来越多的家庭当中了&#xff0c;也正是因为这样&#xff0c;很多人会把汽车当做一个自己的家庭成员&#xff01;而在汽车的使用过程当中&#xff0c;汽车的后备箱往往是放的特别满的&#xff0c;以为这样可以备不时之需&#xff0c;但是老司机也告知大家&a…

as3 访问远程计算机,本地swf不能访问网络的解决办法

本地swf不能访问网络的解决办法作者&#xff1a;小龙博客 2011年03月21日  4条评论 分类&#xff1a;AS3 学习 flash 软件本地swf不能访问网络的解决办法&#xff1a;学习过http://www.lxlong.com/blog“)这样的代码&#xff0c;在测试影片时可以通过navigateToURL方法打开…

Compatibility Telemetry(CompatTelRunner.exe) 占用硬盘100%困扰

Compatibility Telemetry(CompatTelRunner.exe) 占用硬盘100%困扰&#xff0c;Compatibility Telemetry翻译过来就是“微软兼容性检测”的意思&#xff0c;找了半天终于找到了干掉这个兼容性检测的办法。 禁用服务 控制面板–管理工具 — 服务 — 手动&#xff08;或者禁止&…

Java基础知识学习04-自定义类、ArrayList集合

类与对象 类是一个模子&#xff0c;确定对象将会拥有的特征&#xff08;属性&#xff09;和行为&#xff08;方法&#xff09;。 类的特征&#xff1a;类是对象的类型 具有相同属性和方法的一组对象的集合 类的组成&#xff1a;属性和方法 定义一个类&#xff1a;public class …

监视和管理GlassFish 3的多种方法

GlassFish 3支持多种监视和管理方法。 在本文中&#xff0c;我将简要介绍GlassFish提供的管理&#xff0c;监视和管理方法。 GlassFish管理控制台 GlassFish基于Web的管理控制台GUI可能是GlassFish管理最著名的界面。 默认情况下&#xff0c;运行GlassFish后&#xff0c;可通过…

幸运抽奖

var oPointerdocument.getElementsByTagName("img")[0];var oTurnabledocument.getElementsByTagName("img")[1];var cat15;//每个区域15度&#xff0c;一共24个区域var num0;var offOntrue;//是否正在抽奖//指针点击事件&#xff0c;开始抽奖oPointer.onc…

linux usleep 线程控制权_linux多线程同步—信号量

linux多线程编程-信号量信号量机制锁机制使用是有限制的&#xff0c;锁只有两种状态&#xff0c;即加锁和解锁&#xff0c;对于互斥的访问一个全局变量&#xff0c;这样的方式还可以对付&#xff0c;但是要是对于其他的临界资源&#xff0c;比如说多台打印机等&#xff0c;这种…

标题 计算机构自由度时主要步骤有哪些,2010年1月全国自考混凝土结构设计试题和答案...

全国2010年1月自学考试商品混凝土结构设计试题课程代码&#xff1a;02440一、单项选择题(本大题共20小题&#xff0c;每小题2分&#xff0c;共40分)在每小题列出的四个备选项中只有一个是符合题目要求的&#xff0c;请将其代码填写在题后的括号内。错选、多选或未选均无分。1.一…

Django字段类型介绍

一&#xff0c;通过makemigrations&#xff0c;migrate来修改数据&#xff0c; 1.Django的ORM支持修改表结构&#xff0c;修改完以后&#xff0c;执行 python manage.py makemigrations python manage.py migrate 这两句&#xff0c;就会看到更新了。超过长度的数据就会丢了。…

input输入框的input事件和change事件

input输入框的onchange事件&#xff0c;要在 input 失去焦点的时候才会触发&#xff1b; 在输入框内容变化的时候不会触发change&#xff0c;当鼠标在其他地方点一下才会触发&#xff1b; onchange 事件也可用于单选框与复选框改变后触发的事件。 demo如下&#xff1a; <sc…

单例设计模式–内省和最佳实践

定义&#xff1a; Singleton是“ 四人帮”设计模式的一部分&#xff0c;它属于创新设计模式。 在本文中&#xff0c;我们将更深入地研究Singleton模式的用法。 就建模而言&#xff0c;它是最简单的设计模式之一&#xff0c;但另一方面&#xff0c;就使用的复杂性而言&#xff0…

修改用户名_Word办公技巧:如何更改文档修订者的用户名?

在一份文档需要多人参与修订的时候,每个审阅者将用户名改为自己的名字就可以方便地看出具体哪个参与者做了哪些改动。下面我们来学习一下更改修订者用户名的办法。 应用场景 下图文档中默认修订者用户名为"AutoBVT",接下来我们想将其改为"李小白"。 操作…

响应式布局 max-device-width 与 max-width 的区别

闲来没事&#xff0c;研究了一下多屏适配和响应式布局的 CSS。 第一种写法 1 media screen and (max-device-width: 320px) {2 3 }4 5 media screen and (min-device-width: 321px) and (max-device-width: 640px) {6 7 }8 9 media screen and (min-device-width: 641px) and…

springboot,修改配置文件不起作用

今天碰到一个奇怪的问题&#xff0c;明明配置了端口&#xff0c;但是每次启动还是用的8080端口&#xff0c;查了下估计是配置文件没生效&#xff0c;然后就去路径配置中把资源文件先移除&#xff0c;再添加&#xff0c;就正常了。 回忆下自己干了啥&#xff0c;发现时在pom.xml…