使用JAXB的部分对象?

使用JAXB的部分对象?,jaxb,partial,Jaxb,Partial,我正在使用JAX-RS创建一些服务,并且对JAXB(实际上是一般的XML)比较陌生,所以请不要假设我知道我可能应该知道的前提条件!问题是:我想发送和接收XML中的“部分”对象。也就是说,假设有一个对象(显然是Java表单)具有: 类对象{intx,String y,Customer z} 我希望能够发送一个XML输出,该输出包含(动态选择的,所以我不能使用XmlTransient)x、z、x和y,但不包含z或适合我的客户机的任何其他组合。很明显,问题的关键是,有时候客户端并不需要所有东西,所以我

我正在使用JAX-RS创建一些服务,并且对JAXB(实际上是一般的XML)比较陌生,所以请不要假设我知道我可能应该知道的前提条件!问题是:我想发送和接收XML中的“部分”对象。也就是说,假设有一个对象(显然是Java表单)具有:

类对象{intx,String y,Customer z}

我希望能够发送一个XML输出,该输出包含(动态选择的,所以我不能使用XmlTransient)x、z、x和y,但不包含z或适合我的客户机的任何其他组合。很明显,问题的关键是,有时候客户端并不需要所有东西,所以我可以节省一些带宽(特别是对于深度复杂对象的列表,本例显然没有说明这一点!)

同样,对于输入,同样的带宽参数也适用;我希望能够让客户端只发送应该在PUT操作中更新的特定字段,而忽略其余字段,然后让服务器将这些新值“合并”到现有对象上,并保持未提及的字段不变

jacksonjson库似乎支持这一点(尽管我还在研究它),但在JAXB中很难找到它。有什么想法吗

我一直在思考的一个问题是,人们是否可以通过地图以某种方式做到这一点。如果我为我要发送的内容创建了一个映射(可能是嵌套映射,用于嵌套的coplex对象),那么JAXB可以用一个合理的结构发送它吗?如果它可以根据输入创建这样一个地图,我想我可以通过它来进行更新。不完美,但也许

是的,我知道到处飞来飞去的“文档”可能不符合模式,缺少字段等等,但我同意,只要基础设施能够正常工作

哦,我知道我可以通过SAX、StAX或DOM解析“手动”完成这项工作,但我希望有一种更自动化的方法,特别是因为JAXB可以轻松地处理整个对象

干杯,
托比

注意:我是专家组的负责人和成员

EclipseLink JAXB(MOXy)通过其对象图扩展提供了这种支持。对象图允许您为编组解组指定属性子集。它们可以在运行时以编程方式创建:

//创建对象图
ObjectGraph contactInfo=JAXBHelper.getJAXBContext(jc.createObjectGraph(Customer.class));
contactInfo.addAttributeNodes(“名称”);
子图位置=contactInfo.addSubgraph(“billingAddress”);
地址:addAttributeNodes(“市”、“省”);
子图simple=contactInfo.addSubgraph(“电话号码”);
简单。添加属性节点(“值”);
//基于对象图的输出XML
setProperty(MarshallerProperties.OBJECT\u图形,contactInfo);
marshaller.marshall(客户、系统、输出);
或通过注释静态地在类上:

@XmlNamedObjectGraph(
name=“联系人信息”,
属性节点={
@XmlNamedAttributeNode(“名称”),
@XmlNamedAttributeNode(value=“billingAddress”,subgraph=“location”),
@XmlNamedAttributeNode(value=“phoneNumbers”,subgraph=“simple”)
},
子图={
@XmlNamedSubgraph(
name=“location”,
属性节点={
@XmlNamedAttributeNode(“城市”),
@XmlNamedAttributeNode(“省”)
}
)
}
)
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
公共类客户{
了解更多信息


谢谢,我想你的资历中暗含着一种自信,那就是没有标准的方法,尽管这让人失望,但知道它总比想知道好!我会看看能否让项目转移到EclipseLink。非常感谢!