是否可以从 spring-beans.dtd 生成的 spring-beans.xsd 生成 java 源文件?
我正在尝试生成 Java 类以使用 Castor 将 xml 绑定到对象。我尝试绑定的 xml 片段是一个 spring xml 文件,因此我使用 dtd 并使用提供的工具 Castor 生成了 xsd,但是一旦我尝试生成源文件,我就会收到以下错误
java.lang.IllegalArgumentException: Duplicate name found as a class member: _key
这是 xsd 文件我已经生成了:
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="generated.castor.org">
<element name="entry">
<complexType>
<sequence>
<element ref="key" minOccurs="0" />
<choice minOccurs="0">
<element ref="bean" />
<element ref="ref" />
<element ref="idref" />
<element ref="value" />
<element ref="null" />
<element ref="list" />
<element ref="set" />
<element ref="map" />
<element ref="props" />
</choice>
</sequence>
<attribute name="value-ref" type="string" />
<attribute name="key" type="string" />
<attribute name="value" type="string" />
<attribute name="key-ref" type="string" />
</complexType>
</element>
<element name="arg-type">
<complexType mixed="true">
<attribute name="match" type="string" />
</complexType>
</element>
<element name="bean">
<complexType>
<sequence>
<element ref="description" minOccurs="0" />
<choice minOccurs="0" maxOccurs="unbounded">
<element ref="meta" />
<element ref="constructor-arg" />
<element ref="property" />
<element ref="lookup-method" />
<element ref="replaced-method" />
</choice>
</sequence>
<attribute name="name" type="string" />
<attribute name="id" type="ID" />
<attribute name="class" type="string" />
<attribute name="singleton" default="true">
<simpleType>
<restriction base="NMTOKEN">
<enumeration value="false" />
<enumeration value="true" />
</restriction>
</simpleType>
</attribute>
<attribute name="factory-method" type="string" />
<attribute name="dependency-check" default="default">
<simpleType>
<restriction base="NMTOKEN">
<enumeration value="default" />
<enumeration value="simple" />
<enumeration value="none" />
<enumeration value="objects" />
<enumeration value="all" />
</restriction>
</simpleType>
</attribute>
<attribute name="lazy-init" default="default">
<simpleType>
<restriction base="NMTOKEN">
<enumeration value="default" />
<enumeration value="false" />
<enumeration value="true" />
</restriction>
</simpleType>
</attribute>
<attribute name="autowire-candidate" default="true">
<simpleType>
<restriction base="NMTOKEN">
<enumeration value="false" />
<enumeration value="true" />
</restriction>
</simpleType>
</attribute>
<attribute name="init-method" type="string" />
<attribute name="autowire" default="default">
<simpleType>
<restriction base="NMTOKEN">
<enumeration value="default" />
<enumeration value="no" />
<enumeration value="byName" />
<enumeration value="autodetect" />
<enumeration value="byType" />
<enumeration value="constructor" />
</restriction>
</simpleType>
</attribute>
<attribute name="destroy-method" type="string" />
<attribute name="abstract" default="false">
<simpleType>
<restriction base="NMTOKEN">
<enumeration value="false" />
<enumeration value="true" />
</restriction>
</simpleType>
</attribute>
<attribute name="depends-on" type="string" />
<attribute name="parent" type="string" />
<attribute name="factory-bean" type="string" />
</complexType>
</element>
<element name="prop">
<complexType mixed="true">
<attribute name="key" type="string" use="required" />
</complexType>
</element>
<element name="beans">
<complexType>
<sequence>
<element ref="description" minOccurs="0" />
<choice minOccurs="0" maxOccurs="unbounded">
<element ref="import" />
<element ref="alias" />
<element ref="bean" />
</choice>
</sequence>
<attribute name="default-destroy-method" type="string" />
<attribute name="default-lazy-init" default="false">
<simpleType>
<restriction base="NMTOKEN">
<enumeration value="false" />
<enumeration value="true" />
</restriction>
</simpleType>
</attribute>
<attribute name="default-init-method" type="string" />
<attribute name="default-dependency-check" default="none">
<simpleType>
<restriction base="NMTOKEN">
<enumeration value="simple" />
<enumeration value="none" />
<enumeration value="objects" />
<enumeration value="all" />
</restriction>
</simpleType>
</attribute>
<attribute name="default-autowire" default="no">
<simpleType>
<restriction base="NMTOKEN">
<enumeration value="no" />
<enumeration value="byName" />
<enumeration value="autodetect" />
<enumeration value="byType" />
<enumeration value="constructor" />
</restriction>
</simpleType>
</attribute>
<attribute name="default-merge" default="false">
<simpleType>
<restriction base="NMTOKEN">
<enumeration value="false" />
<enumeration value="true" />
</restriction>
</simpleType>
</attribute>
</complexType>
</element>
<element name="props">
<complexType>
<sequence>
<element ref="prop" minOccurs="0" maxOccurs="unbounded" />
</sequence>
<attribute name="merge" default="default">
<simpleType>
<restriction base="NMTOKEN">
<enumeration value="default" />
<enumeration value="false" />
<enumeration value="true" />
</restriction>
</simpleType>
</attribute>
</complexType>
</element>
<element name="lookup-method">
<complexType>
<attribute name="bean" type="string" />
<attribute name="name" type="string" />
</complexType>
</element>
<element name="replaced-method">
<complexType>
<sequence>
<element ref="arg-type" minOccurs="0" maxOccurs="unbounded" />
</sequence>
<attribute name="name" type="string" />
<attribute name="replacer" type="string" />
</complexType>
</element>
<element name="ref">
<complexType>
<attribute name="bean" type="string" />
<attribute name="local" type="IDREF" />
<attribute name="parent" type="string" />
</complexType>
</element>
<element name="property">
<complexType>
<sequence>
<element ref="description" minOccurs="0" />
<element ref="meta" minOccurs="0" maxOccurs="unbounded" />
<choice minOccurs="0">
<element ref="bean" />
<element ref="ref" />
<element ref="idref" />
<element ref="value" />
<element ref="null" />
<element ref="list" />
<element ref="set" />
<element ref="map" />
<element ref="props" />
</choice>
</sequence>
<attribute name="name" type="string" use="required" />
<attribute name="ref" type="string" />
<attribute name="value" type="string" />
</complexType>
</element>
<element name="import">
<complexType>
<attribute name="resource" type="string" use="required" />
</complexType>
</element>
<element name="meta">
<complexType>
<attribute name="key" type="string" use="required" />
<attribute name="value" type="string" use="required" />
</complexType>
</element>
<element name="set">
<complexType>
<choice minOccurs="0" maxOccurs="unbounded">
<element ref="bean" />
<element ref="ref" />
<element ref="idref" />
<element ref="value" />
<element ref="null" />
<element ref="list" />
<element ref="set" />
<element ref="map" />
<element ref="props" />
</choice>
<attribute name="value-type" type="string" />
<attribute name="merge" default="default">
<simpleType>
<restriction base="NMTOKEN">
<enumeration value="default" />
<enumeration value="false" />
<enumeration value="true" />
</restriction>
</simpleType>
</attribute>
</complexType>
</element>
<element name="null">
<complexType mixed="true" />
</element>
<element name="alias">
<complexType>
<attribute name="name" type="string" use="required" />
<attribute name="alias" type="string" use="required" />
</complexType>
</element>
<element name="value">
<complexType mixed="true">
<attribute name="type" type="string" />
</complexType>
</element>
<element name="constructor-arg">
<complexType>
<sequence>
<element ref="description" minOccurs="0" />
<choice minOccurs="0">
<element ref="bean" />
<element ref="ref" />
<element ref="idref" />
<element ref="value" />
<element ref="null" />
<element ref="list" />
<element ref="set" />
<element ref="map" />
<element ref="props" />
</choice>
</sequence>
<attribute name="index" type="string" />
<attribute name="type" type="string" />
<attribute name="ref" type="string" />
<attribute name="value" type="string" />
</complexType>
</element>
<element name="description">
<complexType mixed="true" />
</element>
<element name="list">
<complexType>
<choice minOccurs="0" maxOccurs="unbounded">
<element ref="bean" />
<element ref="ref" />
<element ref="idref" />
<element ref="value" />
<element ref="null" />
<element ref="list" />
<element ref="set" />
<element ref="map" />
<element ref="props" />
</choice>
<attribute name="value-type" type="string" />
<attribute name="merge" default="default">
<simpleType>
<restriction base="NMTOKEN">
<enumeration value="default" />
<enumeration value="false" />
<enumeration value="true" />
</restriction>
</simpleType>
</attribute>
</complexType>
</element>
<element name="map">
<complexType>
<sequence>
<element ref="entry" minOccurs="0" maxOccurs="unbounded" />
</sequence>
<attribute name="value-type" type="string" />
<attribute name="key-type" type="string" />
<attribute name="merge" default="default">
<simpleType>
<restriction base="NMTOKEN">
<enumeration value="default" />
<enumeration value="false" />
<enumeration value="true" />
</restriction>
</simpleType>
</attribute>
</complexType>
</element>
<element name="idref">
<complexType>
<attribute name="bean" type="string" />
<attribute name="local" type="IDREF" />
</complexType>
</element>
<element name="key">
<complexType>
<choice>
<element ref="bean" />
<element ref="ref" />
<element ref="idref" />
<element ref="value" />
<element ref="null" />
<element ref="list" />
<element ref="set" />
<element ref="map" />
<element ref="props" />
</choice>
</complexType>
</element>
有没有人遇到类似的问题并且知道有什么方法可以解决这个问题?
I am trying to generate Java classes to bind xml to objects using castor. The piece of xml that I am trying to bind is a spring xml file so i took the dtd and generated the xsd using the tools castor provided, but once I attempt to generate the source files i recieve the following error
java.lang.IllegalArgumentException: Duplicate name found as a class member: _key
Here is the xsd file that I have generated:
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="generated.castor.org">
<element name="entry">
<complexType>
<sequence>
<element ref="key" minOccurs="0" />
<choice minOccurs="0">
<element ref="bean" />
<element ref="ref" />
<element ref="idref" />
<element ref="value" />
<element ref="null" />
<element ref="list" />
<element ref="set" />
<element ref="map" />
<element ref="props" />
</choice>
</sequence>
<attribute name="value-ref" type="string" />
<attribute name="key" type="string" />
<attribute name="value" type="string" />
<attribute name="key-ref" type="string" />
</complexType>
</element>
<element name="arg-type">
<complexType mixed="true">
<attribute name="match" type="string" />
</complexType>
</element>
<element name="bean">
<complexType>
<sequence>
<element ref="description" minOccurs="0" />
<choice minOccurs="0" maxOccurs="unbounded">
<element ref="meta" />
<element ref="constructor-arg" />
<element ref="property" />
<element ref="lookup-method" />
<element ref="replaced-method" />
</choice>
</sequence>
<attribute name="name" type="string" />
<attribute name="id" type="ID" />
<attribute name="class" type="string" />
<attribute name="singleton" default="true">
<simpleType>
<restriction base="NMTOKEN">
<enumeration value="false" />
<enumeration value="true" />
</restriction>
</simpleType>
</attribute>
<attribute name="factory-method" type="string" />
<attribute name="dependency-check" default="default">
<simpleType>
<restriction base="NMTOKEN">
<enumeration value="default" />
<enumeration value="simple" />
<enumeration value="none" />
<enumeration value="objects" />
<enumeration value="all" />
</restriction>
</simpleType>
</attribute>
<attribute name="lazy-init" default="default">
<simpleType>
<restriction base="NMTOKEN">
<enumeration value="default" />
<enumeration value="false" />
<enumeration value="true" />
</restriction>
</simpleType>
</attribute>
<attribute name="autowire-candidate" default="true">
<simpleType>
<restriction base="NMTOKEN">
<enumeration value="false" />
<enumeration value="true" />
</restriction>
</simpleType>
</attribute>
<attribute name="init-method" type="string" />
<attribute name="autowire" default="default">
<simpleType>
<restriction base="NMTOKEN">
<enumeration value="default" />
<enumeration value="no" />
<enumeration value="byName" />
<enumeration value="autodetect" />
<enumeration value="byType" />
<enumeration value="constructor" />
</restriction>
</simpleType>
</attribute>
<attribute name="destroy-method" type="string" />
<attribute name="abstract" default="false">
<simpleType>
<restriction base="NMTOKEN">
<enumeration value="false" />
<enumeration value="true" />
</restriction>
</simpleType>
</attribute>
<attribute name="depends-on" type="string" />
<attribute name="parent" type="string" />
<attribute name="factory-bean" type="string" />
</complexType>
</element>
<element name="prop">
<complexType mixed="true">
<attribute name="key" type="string" use="required" />
</complexType>
</element>
<element name="beans">
<complexType>
<sequence>
<element ref="description" minOccurs="0" />
<choice minOccurs="0" maxOccurs="unbounded">
<element ref="import" />
<element ref="alias" />
<element ref="bean" />
</choice>
</sequence>
<attribute name="default-destroy-method" type="string" />
<attribute name="default-lazy-init" default="false">
<simpleType>
<restriction base="NMTOKEN">
<enumeration value="false" />
<enumeration value="true" />
</restriction>
</simpleType>
</attribute>
<attribute name="default-init-method" type="string" />
<attribute name="default-dependency-check" default="none">
<simpleType>
<restriction base="NMTOKEN">
<enumeration value="simple" />
<enumeration value="none" />
<enumeration value="objects" />
<enumeration value="all" />
</restriction>
</simpleType>
</attribute>
<attribute name="default-autowire" default="no">
<simpleType>
<restriction base="NMTOKEN">
<enumeration value="no" />
<enumeration value="byName" />
<enumeration value="autodetect" />
<enumeration value="byType" />
<enumeration value="constructor" />
</restriction>
</simpleType>
</attribute>
<attribute name="default-merge" default="false">
<simpleType>
<restriction base="NMTOKEN">
<enumeration value="false" />
<enumeration value="true" />
</restriction>
</simpleType>
</attribute>
</complexType>
</element>
<element name="props">
<complexType>
<sequence>
<element ref="prop" minOccurs="0" maxOccurs="unbounded" />
</sequence>
<attribute name="merge" default="default">
<simpleType>
<restriction base="NMTOKEN">
<enumeration value="default" />
<enumeration value="false" />
<enumeration value="true" />
</restriction>
</simpleType>
</attribute>
</complexType>
</element>
<element name="lookup-method">
<complexType>
<attribute name="bean" type="string" />
<attribute name="name" type="string" />
</complexType>
</element>
<element name="replaced-method">
<complexType>
<sequence>
<element ref="arg-type" minOccurs="0" maxOccurs="unbounded" />
</sequence>
<attribute name="name" type="string" />
<attribute name="replacer" type="string" />
</complexType>
</element>
<element name="ref">
<complexType>
<attribute name="bean" type="string" />
<attribute name="local" type="IDREF" />
<attribute name="parent" type="string" />
</complexType>
</element>
<element name="property">
<complexType>
<sequence>
<element ref="description" minOccurs="0" />
<element ref="meta" minOccurs="0" maxOccurs="unbounded" />
<choice minOccurs="0">
<element ref="bean" />
<element ref="ref" />
<element ref="idref" />
<element ref="value" />
<element ref="null" />
<element ref="list" />
<element ref="set" />
<element ref="map" />
<element ref="props" />
</choice>
</sequence>
<attribute name="name" type="string" use="required" />
<attribute name="ref" type="string" />
<attribute name="value" type="string" />
</complexType>
</element>
<element name="import">
<complexType>
<attribute name="resource" type="string" use="required" />
</complexType>
</element>
<element name="meta">
<complexType>
<attribute name="key" type="string" use="required" />
<attribute name="value" type="string" use="required" />
</complexType>
</element>
<element name="set">
<complexType>
<choice minOccurs="0" maxOccurs="unbounded">
<element ref="bean" />
<element ref="ref" />
<element ref="idref" />
<element ref="value" />
<element ref="null" />
<element ref="list" />
<element ref="set" />
<element ref="map" />
<element ref="props" />
</choice>
<attribute name="value-type" type="string" />
<attribute name="merge" default="default">
<simpleType>
<restriction base="NMTOKEN">
<enumeration value="default" />
<enumeration value="false" />
<enumeration value="true" />
</restriction>
</simpleType>
</attribute>
</complexType>
</element>
<element name="null">
<complexType mixed="true" />
</element>
<element name="alias">
<complexType>
<attribute name="name" type="string" use="required" />
<attribute name="alias" type="string" use="required" />
</complexType>
</element>
<element name="value">
<complexType mixed="true">
<attribute name="type" type="string" />
</complexType>
</element>
<element name="constructor-arg">
<complexType>
<sequence>
<element ref="description" minOccurs="0" />
<choice minOccurs="0">
<element ref="bean" />
<element ref="ref" />
<element ref="idref" />
<element ref="value" />
<element ref="null" />
<element ref="list" />
<element ref="set" />
<element ref="map" />
<element ref="props" />
</choice>
</sequence>
<attribute name="index" type="string" />
<attribute name="type" type="string" />
<attribute name="ref" type="string" />
<attribute name="value" type="string" />
</complexType>
</element>
<element name="description">
<complexType mixed="true" />
</element>
<element name="list">
<complexType>
<choice minOccurs="0" maxOccurs="unbounded">
<element ref="bean" />
<element ref="ref" />
<element ref="idref" />
<element ref="value" />
<element ref="null" />
<element ref="list" />
<element ref="set" />
<element ref="map" />
<element ref="props" />
</choice>
<attribute name="value-type" type="string" />
<attribute name="merge" default="default">
<simpleType>
<restriction base="NMTOKEN">
<enumeration value="default" />
<enumeration value="false" />
<enumeration value="true" />
</restriction>
</simpleType>
</attribute>
</complexType>
</element>
<element name="map">
<complexType>
<sequence>
<element ref="entry" minOccurs="0" maxOccurs="unbounded" />
</sequence>
<attribute name="value-type" type="string" />
<attribute name="key-type" type="string" />
<attribute name="merge" default="default">
<simpleType>
<restriction base="NMTOKEN">
<enumeration value="default" />
<enumeration value="false" />
<enumeration value="true" />
</restriction>
</simpleType>
</attribute>
</complexType>
</element>
<element name="idref">
<complexType>
<attribute name="bean" type="string" />
<attribute name="local" type="IDREF" />
</complexType>
</element>
<element name="key">
<complexType>
<choice>
<element ref="bean" />
<element ref="ref" />
<element ref="idref" />
<element ref="value" />
<element ref="null" />
<element ref="list" />
<element ref="set" />
<element ref="map" />
<element ref="props" />
</choice>
</complexType>
</element>
Has anyone run into a similiar problem and know of any way to fix this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我想,对于混凝土脚轮问题,您应该提供更多信息。似乎有一个重复的字段,因此请继续将每个“键”属性一一删除,直到它开始工作。
但你想做的事情很奇怪。 Spring 的 DTD/XSD 旨在提供 XML 配置 - 它们不应该表示对象。如果你想使用代码而不是xml配置spring,请使用 javaconfig.
For the concrete castor problem you should provide more information, I guess. It seems there's a duplicate field, so go ahead and remove each "key" attribute one by one until it starts working.
But it is a strange thing you are trying to do. Spring's DTD/XSD are meant to provide XML configuration - they aren't supposed to represent objects. If you want to configure spring with code rather than xml, use javaconfig.