MOXy DynamicJAXBContext:自定义值包装器与属性前缀实现问询
问题与需求
我正将业务流程从XML->StaticJAXB->MongoDocument迁移至XML->DynamicJAXB->MongoDocument。为避免信息丢失、确保后续能从MongoDB的JSON/BSON还原出等效XML,需要实现两个核心配置:
- 自定义默认值为“value”的值包装器
- 设置默认无前缀的属性前缀
当前实现代码
我已通过以下代码构建DynamicJAXBContext并完成XML解组:
DynamicJAXBContext dynamicContext = DynamicJAXBContextFactory.createContextFromXSD(xmlSchema, entityResolver, classLoader, properties); JAXBUnmarshaller unmarshaller = dynamicContext.createUnmarshaller(); JAXBElement root = (JAXBElement) unmarshaller.unmarshal(xml);
获取XML根元素的JAXBElement后,我可以递归遍历DynamicEntityImpl.PropertyWrapper来构建对应JSON/BSON文档,但无法区分XML值与属性名称,导致后续无法从JSON/BSON还原XML。
失败的尝试
我曾尝试配置MOXy的JSON相关属性:
unmarshaller.setProperty(UnmarshallerProperties.JSON_VALUE_WRAPPER, "#value"); unmarshaller.setProperty(UnmarshallerProperties.JSON_ATTRIBUTE_PREFIX, "_");
但我的代码本质是XML解组器,并未使用MOXy的JSON抽象,因此该配置无效。
期望解决方案
希望能在构建DynamicJAXBContext时,通过传入的Map properties设置类似XML_VALUE_WRAPPER和XML_ATTRIBUTE_PREFIX的属性,让SAX解析器识别并处理,以此区分XML值与属性,实现后续的XML还原。
内容的提问来源于stack exchange,提问作者user30736319
相关产品推荐
相关产品推荐

