MOXy的对象图– XML和JSON的输入/输出局部模型

假设您有一个要公开为RESTful服务的域模型。 问题是您只想输入/输出部分数据。 以前,您将创建一个代表子集的单独模型,然后使用代码在模型之间移动数据。 在EclipseLink 2.5.0中,我们有一个称为“对象图”的新功能,使您能够轻松地在模型上定义局部视图。

您可以从2013年3月24日开始从每晚下载EclipseLink 2.5.0每晚下载,以尝试这一点:

  • http://www.eclipse.org/eclipselink/downloads/nightly.php

Java模型

以下是我们将用于此示例的Java模型。 该模型表示客户数据。 我们将使用对象图来输出足够的信息,以便有人可以通过电话与客户联系。

顾客

@XmlNamedObjectGraph扩展用于指定我们希望编组/解组的模型的子集。 通过指定一个或多个@XmlNamedAttributeNode批注来完成。 如果要将对象图应用于属性,则可以为其指定子图。 可以将子图定义为目标类上的@XmlNamedSubgraph@XmlNamedObjectGraph

package blog.objectgraphs.metadata;import java.util.List;
import javax.xml.bind.annotation.*;
import org.eclipse.persistence.oxm.annotations.*;@XmlNamedObjectGraph(name='contact info',attributeNodes={@XmlNamedAttributeNode('name'),@XmlNamedAttributeNode(value='billingAddress', subgraph='location'),@XmlNamedAttributeNode(value='phoneNumbers', subgraph='simple')},subgraphs={@XmlNamedSubgraph(name='location',attributeNodes = { @XmlNamedAttributeNode('city'),@XmlNamedAttributeNode('province')})}
)
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Customer {@XmlAttributeprivate int id;private String name;private Address billingAddress;private Address shippingAddress;@XmlElementWrapper@XmlElement(name='phoneNumber')private List<PhoneNumber> phoneNumbers;}

地址

因为我们将Address类的对象图定义为Customer类的子图,所以我们在这里不需要做任何事情。

package blog.objectgraphs.metadata;import javax.xml.bind.annotation.*;@XmlAccessorType(XmlAccessType.FIELD)
public class Address {private String street;private String city;private String province;private String postalCode;}

电话号码

对于Customer类的phoneNumbers属性,我们指定应使用一个名为simple的对象图来限定数据范围。 我们将在PhoneNumber类上定义此对象图。 这种方法的优点是它使对象图更易于重用。

package blog.objectgraphs.metadata;import javax.xml.bind.annotation.*;
import org.eclipse.persistence.oxm.annotations.*;@XmlNamedObjectGraph(name='simple',attributeNodes={@XmlNamedAttributeNode('value'),}
)
@XmlAccessorType(XmlAccessType.FIELD)
public class PhoneNumber {@XmlAttributeprivate String type;@XmlValueprivate String value;}

示范代码

演示版

在下面的演示代码中,我们将阅读一个XML文档以完全填充我们的Java模型。 在将其编组起来以证明所有内容都已完全映射之后,我们将在封送处理程序上指定一个对象图(第22行),并将子集输出到XML和JSON。

package blog.objectgraphs.metadata;import java.io.File;
import javax.xml.bind.*;
import org.eclipse.persistence.jaxb.MarshallerProperties;public class Demo {public static void main(String[] args) throws Exception {JAXBContext jc = JAXBContext.newInstance(Customer.class);Unmarshaller unmarshaller = jc.createUnmarshaller();File xml = new File('src/blog/objectgraphs/metadata/input.xml');Customer customer = (Customer) unmarshaller.unmarshal(xml);// Output XMLMarshaller marshaller = jc.createMarshaller();marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);marshaller.marshal(customer, System.out);// Output XML - Based on Object Graphmarshaller.setProperty(MarshallerProperties.OBJECT_GRAPH, 'contact info');marshaller.marshal(customer, System.out);// Output JSON - Based on Object Graphmarshaller.setProperty(MarshallerProperties.MEDIA_TYPE, 'application/json');marshaller.setProperty(MarshallerProperties.JSON_INCLUDE_ROOT, false);marshaller.setProperty(MarshallerProperties.JSON_WRAPPER_AS_ARRAY_NAME, true);marshaller.marshal(customer, System.out);}}

input.xml /输出

我们将使用以下文档来填充我们的域模型。 我们还将撤回封送它,以证明所有内容均已实际映射。

<?xml version='1.0' encoding='UTF-8'?>
<customer id='123'><name>Jane Doe</name><billingAddress><street>1 A Street</street><city>Any Town</city><province>Ontario</province><postalCode>A1B 2C3</postalCode></billingAddress><shippingAddress><street>2 B Road</street><city>Another Place</city><province>Quebec</province><postalCode>X7Y 8Z9</postalCode></shippingAddress><phoneNumbers><phoneNumber type='work'>555-1111</phoneNumber><phoneNumber type='home'>555-2222</phoneNumber></phoneNumbers>
</customer>

基于对象图的XML输出

下面的XML由与先前XML文档完全相同的模型生成。 不同之处在于,我们利用命名对象图来选择映射内容的子集。

<?xml version='1.0' encoding='UTF-8'?>
<customer><name>Jane Doe</name><billingAddress><city>Any Town</city><province>Ontario</province></billingAddress><phoneNumbers><phoneNumber>555-1111</phoneNumber><phoneNumber>555-2222</phoneNumber></phoneNumbers>
</customer>

基于对象图的JSON输出

以下是与先前以JSON表示的XML文档相同的子集。 我们已经使用了新的
JSON_WRAPPER_AS_ARRAY_NAME属性(请参阅绑定到JSON&XML –处理集合 ),以改善集合值的表示形式。

{'name' : 'Jane Doe','billingAddress' : {'city' : 'Any Town','province' : 'Ontario'},'phoneNumbers' : [ '555-1111', '555-2222' ]
}

外部元数据

MOXy还提供了一个外部绑定文档,使您可以为第三方对象提供元数据或为模型应用备用映射(请参阅:将对象映射到多个XML模式–天气示例 )。 以下是此示例的映射文档。

<?xml version='1.0'?>
<xml-bindings xmlns='http://www.eclipse.org/eclipselink/xsds/persistence/oxm'package-name='blog.objectgraphs.metadata'xml-accessor-type='FIELD'><java-types><java-type name='Customer'><xml-named-object-graphs><xml-named-object-graph name='contact info'><xml-named-attribute-node name='name'/><xml-named-attribute-node name='billingAddress' subgraph='location'/><xml-named-attribute-node name='phoneNumbers' subgraph='simple'/><xml-named-subgraph name='location'><xml-named-attribute-node name='city'/><xml-named-attribute-node name='province'/></xml-named-subgraph></xml-named-object-graph></xml-named-object-graphs><xml-root-element/><java-attributes><xml-attribute java-attribute='id'/><xml-element java-attribute='phoneNumbers' name='phoneNumber'><xml-element-wrapper/></xml-element></java-attributes></java-type><java-type name='PhoneNumber'><xml-named-object-graphs><xml-named-object-graph name='simple'><xml-named-attribute-node name='value'/></xml-named-object-graph></xml-named-object-graphs><java-attributes><xml-attribute java-attribute='type'/><xml-value java-attribute='value'/></java-attributes></java-type></java-types>
</xml-bindings>

参考:来自Java的 JCG合作伙伴 Blaise Doughan的MOXy的对象图– XML和JSON的输入/输出局部模型,位于Java XML&JSON绑定博客中。

翻译自: https://www.javacodegeeks.com/2013/03/moxys-object-graphs-inputoutput-partial-models-to-xml-json.html

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

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

相关文章

iframe的缺点

一、iframe会阻塞主页面的onload事件&#xff1b; 二、搜索引擎检索程序无法解读这种页面&#xff0c;不利于SEO&#xff1b; 三、会影响页面的并行加载。 并行加载&#xff1a;同一时间对同一域名下的加载数量是有限制的&#xff1a; 解决方法&#xff1a; 使用js动态给ifr…

使用可视化工具redisclient连接redis

可视化工具推荐&#xff1a;http://database.51cto.com/art/201505/477692.htm 1.连接redis服务端 1.1 设置连接密码&#xff1a;在redis根目录下&#xff0c;双击redis-cli.exe&#xff0c; 输入命令&#xff1a;redis-cli.exe -h 127.0.0.1 -p 6379 -n 1 1就是密码 1.2 使…

android 蓝牙项目代码,Android蓝牙聊天开源项目

前言基于Android Classic Bluetooth的蓝牙聊天软件&#xff0c;目前仅支持一对一实时通信、文件传输、好友添加、好友分组、好友在线状态更新等功能&#xff0c;其中消息发送支持文本、表情等方式。前景蓝牙技术作为一种小范围无线连接技术&#xff0c;能够在设备间实现方便快捷…

你必须知道的.NET之特性和属性(转)

你必须知道的.NET之特性和属性2008-10-13 来源&#xff1a;网络 1. 引言 attribute是.NET框架引入的有一技术亮点&#xff0c;因此我们有必要花点时间走进一个发现attribute登堂入室的入口。因为.NET Framework中使用了大量的定制特性来完成代码约定&#xff0c;[Serializable]…

宽带阻抗匹配的工程实现-第一步,端口驻波仿真

概要 ADS仿真&#xff0c;Matlab仿真&#xff0c;宽带阻抗匹配&#xff0c;smith圆图。 其实阻抗匹配我工作以来经常说&#xff0c;也经常做&#xff0c;但是基本上都是直接在印制板上进行调试。现在想先用仿真软件直接设计出来&#xff0c;才发现很多东西嘴上说容易&#xf…

Hamcrest Matchers,Guava谓词和Builder设计模式

通常&#xff0c;在编码时&#xff0c;我们必须处理其中包含数十个字段的一些POJO对象。 很多时候&#xff0c;我们通过一个带有数十个参数的构造函数来初始化这些类&#xff0c;这以任何可能的想象的方式都是可怕的。 除此之外&#xff0c;使用这些构造函数的函数几乎不可测试…

学web前端一定要这样学,不然学完找不到工作哭都来不及!

因为工作原因&#xff0c;经常关注有关互联网行业的最新动态。这不&#xff0c;刚送走了高考&#xff0c;又迎来了每年的毕业季&#xff0c;看到好多人都说今年的前端工作不好找&#xff0c;很多童鞋简历投了一大堆&#xff0c;也没有回应&#xff0c;发现连实习的机会都没有&a…

面向对象的数据存储方式

目前由于项目接入redies&#xff0c;数据可持久化&#xff0c;而以何种存储数据的格式又是一个问题&#xff0c;因为数据格式在 决定之后就应该成为规范&#xff0c;所以一个简单的好用的数据格式是优先考虑的&#xff0c;而从前端的角度&#xff0c;就是命名 空间&#xff0c;…

修改linux文件权限命令:chmod

Linux系统中的每个文件和目录都有访问许可权限&#xff0c;用它来确定谁可以通过何种方式对文件和目录进行访问和操作。  文件或目录的访问权限分为只读&#xff0c;只写和可执行三种。以文件为例&#xff0c;只读权限表示只允许读其内容&#xff0c;而禁止对其做任何的更改操…

android视频通信和web端,探讨用webrtc在手机和浏览器之间实现音视频实时通信的实施环境...

探讨用webrtc在手机和浏览器之间实现音视频实时通信的实施环境Walker.Xuproduct/develop flow&#xff1a;技术需求&#xff1a;任务拆解:1.android客户端2.前端js网页客户端技术产品&#xff1a;落地&#xff0c;实施在实际应用环境中1.技术因素2.非技术因素选择浏览器的标准&…

XStream – XStreamely使用Java中的XML数据的简便方法

有时候&#xff0c;我们不得不处理XML数据。 而且大多数时候&#xff0c;这不是我们一生中最快乐的一天。 甚至有一个术语“ XML地狱”描述了程序员必须处理许多难以理解的XML配置文件时的情况。 但是&#xff0c;不管喜欢与否&#xff0c;有时我们别无选择&#xff0c;这主要是…

jQuery 一些操作

1.监听输入框输入 $("#email").bind("input propertychange change", function (event) { console.log($("#email").val()) }); 2.获取输入框内容 $(" #test ").val()$(" input[ nametest ] ").val()$(" input[ typet…

@media兼容iphone4、5、6

在网页中&#xff0c;pixel与point比值称为device-pixel-ratio&#xff0c;普通设备都是1&#xff0c;iPhone 4是2&#xff0c;有些Android机型是1.5。 那么-webkit-min-device-pixel-ratio:2可以用来区分iphone(4/4s/5)和其它的手机 iPhone4/4s的分辨率为640*960 pixels&#…

前端微信小程序实战篇

电商底部导航栏的制作 我想大家对电商一定不陌生&#xff0c;一般电商的底部导航栏有以下几个首页、分类、购物车、个人中心。 app.json是用来配置page路径以及导航栏属性的&#xff0c;那我们要做首页、分类、购物车、个人中心界面就要在page也添加这几个界面&#xff0c;所…

Spring MVC –使用@ResponseBody轻松实现基于REST的JSON服务

Spring 3使JSON REST服务非常容易。 本教程将通过几个步骤向您展示如何进行。 您可以在GitHub上获取代码。 先决条件 您应该有一个运行中的Spring MVC应用程序。 如果尚未设置正常的Spring MVC应用程序&#xff0c;请按照本教程进行操作 。 我们将定义三个REST服务&#xff1a…

android 勿扰模式代码,Android N Zen Mode (勿扰模式)设置流程

Android N去除了情景模式&#xff0c;取而代之的是勿扰模式。勿扰模式的入口有两处&#xff0c;下拉栏和设置声音里面。下面我们就从设置声音入口&#xff0c;看看勿扰模式的设置流程。首先&#xff0c;勿扰模式的首页有三种选项&#xff0c;分别是仅允许优先打扰内容、自动规则…

一个edit的学习笔记

https://blog.csdn.net/woshizoe/article/details/51555396转载于:https://www.cnblogs.com/strongdady/p/9060760.html

VM12虚拟机Centos7配置动态IP的网络设置

1.控制面板->网络和Internet->网络连接->本地连接->属性->共享->共享给VMnet8 2.VM虚拟机->编辑->虚拟网络编辑器->NAT模式 将所有IP设置为Windows下的CMD->ipconfig下的VMnet8一样的IP 3. 1 vi /etc/sysconfig/network-script/ifcfg-ens33 PS:e…

使用display:none和visibility:hidden隐藏的区别

今天做毕设时遇到了一个小问题&#xff0c;我做了一个tab导航栏&#xff0c;点击一个tab页其它tab页隐藏&#xff0c;这时候第一想法是使用display&#xff1a;none来控制显示隐藏&#xff0c;写了之后发现使用display会有一个问题&#xff0c;就是第二个tab页的轮播图是在页面…

Java 8 Lambdas –缺少脱离Java的链接

我学习了函数式编程&#xff0c;但是后来我决定我更喜欢命令式编程&#xff0c;于是我转回去。 —没人 从命令式编程过渡到函数式编程是当今非常普遍的事情。 互联网上的博客文章充斥着关于它的证词。 我读过的所有内容以及与我交谈过的每个人&#xff08;包括我自己&#xf…