gpt4 book ai didi

java - 如何为使用 xjc :javaType 自定义的元素生成 @XmlSchemaType

转载 作者:行者123 更新时间:2023-12-01 12:28:21 24 4
gpt4 key购买 nike

我想在使用 XmlJavaTypeAdapter 的同时使用 xjc 生成 JAXB 对象

我目前在全局绑定(bind)中使用以下内容:

<xjc:javaType name="java.lang.Boolean" 
xmlType="xsd:boolean"
adapter="path.to.my.CustomBooleanAdapter"/>

它生成以下代码:

 @XmlJavaTypeAdapter(CustomBooleanAdapter.class)
@XmlElement(type=String.class)
private Boolean finished;

但是我希望代码具有 boolean 类型的 @XmlSchemaType 并且没有 @XmlElement 类型 String

@XmlJavaTypeAdapter(BooleanAdapter.class)
@XmlSchemaType(name = "boolean")
private Boolean finished;

适配器代码:

public class CustomBooleanAdapter extends XmlAdapter<String, Boolean> {
@Override
public Boolean unmarshal(String s) {
if("true".equals(s) || "false".equals(s)){
return Boolean.valueOf(s);
}
return null;

}

@Override
public String marshal(Boolean c) {
return c == null ? null : c.toString();
}
}

有没有办法告诉xjc生成@XmlSchemaType注释并删除String类型的@XmlElement

最佳答案

好的,按照 promise 。

Annotate plugin允许您向生成的代码添加注释。

免责声明:我是作者。

文档是 here .

Example :

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:annox="http://annox.dev.java.net"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
jaxb:extensionBindingPrefixes="annox xjc"
jaxb:version="1.0">

<xs:annotation>
<xs:appinfo>
<jaxb:globalBindings>
<xjc:javaType name="java.lang.Boolean" xmlType="xs:boolean" adapter="org.jvnet.jaxb2_commons.tests.one.CustomBooleanAdapter"/>
</jaxb:globalBindings>
</xs:appinfo>
</xs:annotation>

<xs:complexType name="javaTypeExample">
<xs:sequence>
<xs:element name="customBooleanProperty" type="xs:boolean" minOccurs="0">
<xs:annotation>
<xs:appinfo>
<annox:annotate target="field">@javax.xml.bind.annotation.XmlElement(type=java.lang.Boolean.class)</annox:annotate>
<annox:annotate target="field">@javax.xml.bind.annotation.XmlSchemaType(name="boolean")</annox:annotate>
</xs:appinfo>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:schema>

生成:

@XmlElement(type = Boolean.class)
@XmlJavaTypeAdapter(CustomBooleanAdapter.class)
@XmlSchemaType(name = "boolean")
protected Boolean customBooleanProperty;

一些使用注意事项:

  • 请注意,您必须说 target="field"因为您必须将注释放在字段上,否则它们将默认添加到 getter 中。
  • 语法是 Java,但是...
  • ...您必须对所有内容使用完全限定的类名(注释、注释字段中的类等)
  • 您无法删除 @XmlElement注释(没有这样的功能),但您可以用 @XmlElement(type=Boolean.class) 覆盖它.

我还添加了一个小test case .

关于java - 如何为使用 xjc :javaType 自定义的元素生成 @XmlSchemaType,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26147085/

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