如何防止 groovy 创建小写(元)属性名称?
Posted
技术标签:
【中文标题】如何防止 groovy 创建小写(元)属性名称?【英文标题】:How to prevent groovy from creating lowercase (meta) property names? 【发布时间】:2011-05-02 07:19:09 【问题描述】:我有问题。 我希望有很好的动态 groovy 类来表示丑陋的 XML 结构(不幸的是,JAXB、XmlBeans 等是不可能的)。 为此,我需要区分大小写的属性来将元素值从 XML 映射到我的类。
但由于 JavaBeans 规范,Groovy 会自动生成小写的属性名称。
我可以覆盖此功能并保留我的属性吗?
谢谢
这是一个例子:
源 XML 如下所示:
<data>
<document>
<linked name="MyDataObject">
<datarow>
<element name="Name"></element>
<element name="CurrentTime"></element>
<element name="abc"></element>
<element name="UID"></element>
</datarow>
</linked>
<!--
Here are a lot of more of <element> and <linked>
-->
</document>
</data>
我用 XmlParser 解析它并让一些类在单独的节点上工作。
class XMLMyDataObject extends MyXMLNodeBaseClassWithDynamicFunctionality
String Name
String CurrentTime
String abc
String UID
这个例子中由于小写名称导致的结果:我只能找到 2 个元素。
XMLMyDataObject.metaClass.properties ...
name cannot find XML-Element
currentTime cannot find XML-Element
abc find XML-Element
UID find XML-Element
我现在的情况:
我正在使用我的类的纯 Java 部分来获取调用 getDeclaredFields 方法的属性名称。
但是这个问题还是很有趣的。
【问题讨论】:
你有一个 xml 示例,你尝试了什么? 你就不能这样做吗:myDataObject.Name
?
没有。您必须使用元素名称。 myDataObject.datarow.element 并使用返回的列表。
【参考方案1】:
不确定你在做什么。通常你会使用 XmlParser 或 XmlSlurper 在 Groovy 中解析 xml,这些都不会将你的属性名称更改为小写。
例子:
def xml = """<person>
<ADRESS>
<PostalCode>43</PostalCode>
</ADRESS>
</person>"""
new XmlParser().parseText(xml).ADRESS.PostalCode.text()
【讨论】:
是的,你是对的。我必须使用这种 XML 结构(如上)。我不能只使用 XmlParser-result。两周后我再也看不懂我的代码了。 ;) 好的,那我明白你的问题了。很遗憾,我没有为你解决这个问题。以上是关于如何防止 groovy 创建小写(元)属性名称?的主要内容,如果未能解决你的问题,请参考以下文章
GroovyMOP 元对象协议与元编程 ( 使用 Groovy 元编程进行函数拦截 | 属性缺失 propertyMissing 函数回调 | 方法缺失 methodMissing 函数回调 )
Groovy编译时元编程 ( AST 语法树分析 | ClassNode 根节点 | 方法 Methods 节点 | 字段 Fields 节点 | 属性 Properties 节点 )