gpt4 book ai didi

dtd 文件的 JAXB 绑定(bind)模式

转载 作者:行者123 更新时间:2023-12-04 14:38:38 26 4
gpt4 key购买 nike

一个菜鸟问题。我正在从 dtd 文件 (USPTO dtd) 生成 Java 代码。 DTD 指定根元素如下:

<!ELEMENT us-patent-grant (doc-page+ | (us-bibliographic-data-grant , abstract* , drawings? , description , us-sequence-list-doc? , us-megatable-doc?,table-external-doc* , us-chemistry* , us-math* ,us-claim-statement , claims))>

当我使用以下绑定(bind)模式运行 xjc
    <?xml version="1.0"?>
<xml-java-binding-schema version="1.0ea2">
<element name="us-patent-grant" type="class" root="true"></element>
</xml-java-binding-schema>

我看到生成了以下 Java 对象
    @XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"docPageOrUsBibliographicDataGrantOrAbstractOrDrawingsOrDescriptionOrUsSequenceListDocOrUsMegatableDocOrTableExternalDocOrUsChemistryOrUsMathOrUsClaimStatementOrClaims"
})
@XmlRootElement(name = "us-patent-grant")
public class UsPatentGrant {
....

@XmlElements({
@XmlElement(name = "doc-page", required = true, type = DocPage.class),
@XmlElement(name = "us-bibliographic-data-grant", required = true, type = UsBibliographicDataGrant.class),
@XmlElement(name = "abstract", required = true, type = Abstract.class),
@XmlElement(name = "drawings", required = true, type = Drawings.class),
@XmlElement(name = "description", required = true, type = Description.class),
@XmlElement(name = "us-sequence-list-doc", required = true, type = UsSequenceListDoc.class),
@XmlElement(name = "us-megatable-doc", required = true, type = UsMegatableDoc.class),
@XmlElement(name = "table-external-doc", required = true, type = TableExternalDoc.class),
@XmlElement(name = "us-chemistry", required = true, type = UsChemistry.class),
@XmlElement(name = "us-math", required = true, type = UsMath.class),
@XmlElement(name = "us-claim-statement", required = true, type = UsClaimStatement.class),
@XmlElement(name = "claims", required = true, type = Claims.class)
})
protected List<Object> docPageOrUsBibliographicDataGrantOrAbstractOrDrawingsOrDescriptionOrUsSequenceListDocOrUsMegatableDocOrTableExternalDocOrUsChemistryOrUsMathOrUsClaimStatementOrClaims;

.........

public List<Object> getDocPageOrUsBibliographicDataGrantOrAbstractOrDrawingsOrDescriptionOrUsSequenceListDocOrUsMegatableDocOrTableExternalDocOrUsChemistryOrUsMathOrUsClaimStatementOrClaims() {
if (docPageOrUsBibliographicDataGrantOrAbstractOrDrawingsOrDescriptionOrUsSequenceListDocOrUsMegatableDocOrTableExternalDocOrUsChemistryOrUsMathOrUsClaimStatementOrClaims == null) {
docPageOrUsBibliographicDataGrantOrAbstractOrDrawingsOrDescriptionOrUsSequenceListDocOrUsMegatableDocOrTableExternalDocOrUsChemistryOrUsMathOrUsClaimStatementOrClaims = new ArrayList<Object>();
}
return this.docPageOrUsBibliographicDataGrantOrAbstractOrDrawingsOrDescriptionOrUsSequenceListDocOrUsMegatableDocOrTableExternalDocOrUsChemistryOrUsMathOrUsClaimStatementOrClaims;
}

所以我的问题是如何更改长 setter/getter 的名称
getDocPageOrUsBibliographicDataGrantOrAbstractOrDrawingsOrDescriptionOrUsSequenceListDocOrUsMegatableDocOrTableExternalDocOrUsChemistryOrUsMathOrUsClaimStatementOrClaims

在绑定(bind)模式中?

先感谢您。

最佳答案

这与其说是一个答案,不如说是你所怀疑的证据。

JAXB/XJC com.sun.tools.xjc.reader.dtd.Element 的来源, 在 bind()方法,你可以看到这个摘录,遍历子 elementsElement :

if(b.isRepeated || b.elements.size()>1) {
// collection
StringBuilder name = new StringBuilder();
for( Element e : b.elements ) {
if(name.length()>0)
name.append("Or");
name.append(owner.model.getNameConverter().toPropertyName(e.name));
}
...
} else {
// single property
String name = b.elements.iterator().next().name;
String propName = owner.model.getNameConverter().toPropertyName(name);
...
}

看起来它几乎没有机会改变 "Or" 的顺序。有多个子元素的分隔符。

你可以看到 bindInfo允许在 Element 中的其他地方自定义名称,但不在这附近。除非其他人能发现它,否则重命名事物的机会似乎就到此为止了。简而言之, CElementPropertyInfo此输出导致 BeanGenerator.fields , 这导致 JDefinedClass.fields然后由 JDefinedClass.declareBody() 直接输出.

作为 XJC docs比如说,DTD 支持仍处于试验阶段......

关于dtd 文件的 JAXB 绑定(bind)模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18667358/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com