我在here主题上找到了类似的讨论。但是那里的情况与此完全不同,该解决方案对我不起作用。所以我再次提出这个问题。
我的XSD (sample.xsd)
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="field">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded" minOccurs="0">
<xsd:element maxOccurs="unbounded" minOccurs="0" name="ProgramLevel">
<xsd:complexType>
<xsd:attribute name="value" type="xsd:string" use="optional"/>
<xsd:attribute name="desc" type="xsd:string" use="optional"/>
</xsd:complexType>
</xsd:element>
<xsd:element maxOccurs="unbounded" minOccurs="0" name="Program">
<xsd:complexType>
<xsd:sequence maxOccurs="unbounded" minOccurs="0">
<xsd:element maxOccurs="unbounded" minOccurs="0" name="Level">
<xsd:complexType>
<xsd:attribute name="value" type="xsd:string" use="optional"/>
<xsd:attribute name="desc" type="xsd:string" use="optional"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
我的XML
<field>
<ProgramLevel value="x" />
</field>
<field>
<Program>
<Level value="y" />
</Program>
</field>
在运行xjc命令时出现以下错误
[ERROR] Two declarations cause a collision in the ObjectFactory class.
line 7 of file:/D:/ProgramPractice/CreateXSD/JAXB/sample.xsd
[ERROR] (Related to above error) This is the other declaration.
line 16 of file:/D:/ProgramPractice/CreateXSD/JAXB/sample.xsd
Failed to produce code.
有人知道如何借助绑定文件解决'ProgramLevel'
和'Program->Level'
之间的冲突吗?预先感谢。
答案 0 :(得分:0)
这很简单。
您正在choice
元素类型的定义中使用field
作曲家。
但是choice
意味着在其中包含的所有粒子中,目标XML中可能仅出现一个。因此,根据您的sample.xsd
模式,<ProgramLevel>
和<Program>
可能不会同时显示为<field>
元素的子元素。
只能使用其中之一!
如果两者都需要,则应改用xsd:sequence
作曲家,并按如下所示修改架构:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="field">
<xsd:complexType>
<xsd:sequence maxOccurs="unbounded" minOccurs="0">
...
</xsd:sequence>
</xsd:complexType>
</xsd:element>
然后,您的XML将通过验证(没有冲突)。
请注意,
xsd:sequence
作曲家也有其限制。这意味着其中指定的粒子应严格按照与XML模式中相同的顺序出现在目标XML中。也就是说,以下内容也将是错误的:<field><Program>...</Program><ProgramLevel/></field>
。因此,如果需要,您应该相应地修改架构。但是,如果根本不限制顺序,请使用all
作曲家(或更复杂的结构)。
P.S。 对于使用XML模式和WSDL的人来说,以下链接可能很有趣:
如果您重视我对本网站的参与,请不要删除这些链接!
答案 1 :(得分:0)
通过在绑定文件中添加以下内容,最终解决了该问题:
FormsAuthentication.SetAuthCookie("TESTER", true);
答案 2 :(得分:0)
我通过在 jaxb 插件配置中添加 XautoNameResolution 作为参数解决了这个问题。
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<version>0.14.0</version>
<executions>
<execution>
<id>schema2</id>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<args>
<arg>-XautoNameResolution</arg>
</args>
<schemaLanguage>WSDL</schemaLanguage>
<schemaDirectory>${project.basedir}/src/main/resources/wsdl</schemaDirectory>
<schemaIncludes>
<include>products.wsdl</include>
</schemaIncludes>
<generatePackage>com.suhas.generated</generatePackage>
<generateDirectory>${project.basedir}/src/main/java</generateDirectory>
<cleanPackageDirectories>true</cleanPackageDirectories>
</configuration>
</execution>
</executions>
</plugin>