gpt4 book ai didi

java - 使用 MOXy 使用默认的 minOccurs 生成模式

转载 作者:行者123 更新时间:2023-11-30 11:56:25 25 4
gpt4 key购买 nike

我正在尝试使用 EclipseLink MOXy 2.1.2 和 Java 1.6 生成基于我的域类的模式,遵循以下示例:http://wiki.eclipse.org/EclipseLink/Examples/MOXy/JAXB/GenerateSchema

但是默认的 minOccurs 值存在问题。如果注释 @XmlElement 没有指定必需的属性,它应该默认为 false,这意味着在生成模式时 minOccurs 应该为 0。这与 Sun 的 JAXB 实现一样有效。但是,当使用 Moxy 时,不会生成 minOccurs,默认值为 1。

例如,

public Integer getDuration() {
return duration;
}

应该生成

<xs:element name="duration" type="xsd:int" minOccurs="0"/>

相反,如果使用 Moxy,它会生成

<xsd:element name="duration" type="xsd:int"/>

这意味着 minOccurs="1"因为这是默认值。这是一个错误吗?有什么解决方法吗?

提前致谢!

最佳答案

您是否有机会使用 EclipseLink 2.1.2 的预发布版本? EclipseLink 2.1.2 的发布版本可以在这里获得:

当我运行以下示例时:

package minoccurs;

import java.io.IOException;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.SchemaOutputResolver;
import javax.xml.transform.Result;
import javax.xml.transform.stream.StreamResult;

import org.eclipse.persistence.Version;

public class Demo {

public static class Root {

private Integer duration;

public Integer getDuration() {
return duration;
}

public void setDuration(Integer duration) {
this.duration = duration;
}

}

public static class MySchemaOutputResolver extends SchemaOutputResolver {

@Override
public Result createOutput(String namespaceUri, String suggestedFileName) throws IOException {
StreamResult result = new StreamResult(System.out);
result.setSystemId(suggestedFileName);
return result;
}

}

public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Root.class);
System.out.println(jc);
System.out.println(Version.getVersionString());
jc.generateSchema(new MySchemaOutputResolver());
}
}

我得到:

org.eclipse.persistence.jaxb.JAXBContext@16cd7d5
2.1.2.v20101206-r8635
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:complexType name="root">
<xsd:sequence>
<xsd:element name="duration" type="xsd:int" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>

更新#1

基于您的 update ,这是一个问题。我已经打开了以下 EclipseLink MOXy 错误:

更新#2

我们已经解决了 EclipseLink 2.2 流中的这个错误。可以从 12 月 21 日开始的夜间下载中获取修复程序:

此修复最终也将包含在 2.1.3 补丁中。

关于java - 使用 MOXy 使用默认的 minOccurs 生成模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4460158/

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