编译器无法接受此 factoryMethod 自定义
Compiler was unable to honor this factoryMethod customization
我需要使用 "factoryMethod" 来解析 "Two declarations cause a collision in the ObjectFactory class."。但是,我收到 "Compiler was unable to honor this factoryMethod customization"。我找不到关于 "factoryMethod" 的信息。看来我没有正确使用它。请查看我的简化架构:
<?xml version='1.0' encoding='UTF-8' ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:jxb="http://java.sun.com/xml/ns/jaxb" jxb:version="2.1">
<xs:element name="UseCase">
<xs:complexType>
<xs:sequence>
<xs:element name="StepAction" >
<xs:annotation>
<xs:appinfo>
<jxb:factoryMethod name="createStepAction" />
</xs:appinfo>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
我用"xjc %schemaname%"生成类。
似乎 jxb:factoryMethod 只能用于 xjc 抱怨的元素。在我的示例中,我必须通过在与 StepAction:
相同级别添加其他元素来导致 "Compiler was unable to honor this factoryMethod customization"
<?xml version='1.0' encoding='UTF-8' ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:jxb="http://java.sun.com/xml/ns/jaxb" jxb:version="2.1">
<xs:element name="UseCase">
<xs:complexType>
<xs:sequence>
<xs:element name="StepAction" >
<xs:annotation>
<xs:appinfo>
<jxb:factoryMethod name="createStepAction" />
</xs:appinfo>
</xs:annotation>
</xs:element>
<xs:element name="Step-Action"/> <!-- causes Compiler was unable to honor this factoryMethod customization -->
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
在这种情况下,XJC 不会抛出 "Compiler was unable to honor this factoryMethod customization"。
我的结论:
- 如果 XJC 不产生 "Two declarations cause a collision in the ObjectFactory class." 错误
,则不能使用 jxb:factoryMethod 更改 ObjectFactory 的 createXXX 方法的名称
- "Two declarations cause a collision in the ObjectFactory class." 当在同一级别(兄弟)有多个名称冲突的元素时会产生。如果他们处于不同的级别,xjc 不会抱怨。名称冲突是指 XJC 转换后名称相同(例如 "Step-Action" 和 "StepAction" 相同)
- jxb:class 注解对 ObjectFactory 的 createXXX 方法没有影响
我需要使用 "factoryMethod" 来解析 "Two declarations cause a collision in the ObjectFactory class."。但是,我收到 "Compiler was unable to honor this factoryMethod customization"。我找不到关于 "factoryMethod" 的信息。看来我没有正确使用它。请查看我的简化架构:
<?xml version='1.0' encoding='UTF-8' ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:jxb="http://java.sun.com/xml/ns/jaxb" jxb:version="2.1">
<xs:element name="UseCase">
<xs:complexType>
<xs:sequence>
<xs:element name="StepAction" >
<xs:annotation>
<xs:appinfo>
<jxb:factoryMethod name="createStepAction" />
</xs:appinfo>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
我用"xjc %schemaname%"生成类。
似乎 jxb:factoryMethod 只能用于 xjc 抱怨的元素。在我的示例中,我必须通过在与 StepAction:
相同级别添加其他元素来导致 "Compiler was unable to honor this factoryMethod customization"<?xml version='1.0' encoding='UTF-8' ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:jxb="http://java.sun.com/xml/ns/jaxb" jxb:version="2.1">
<xs:element name="UseCase">
<xs:complexType>
<xs:sequence>
<xs:element name="StepAction" >
<xs:annotation>
<xs:appinfo>
<jxb:factoryMethod name="createStepAction" />
</xs:appinfo>
</xs:annotation>
</xs:element>
<xs:element name="Step-Action"/> <!-- causes Compiler was unable to honor this factoryMethod customization -->
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
在这种情况下,XJC 不会抛出 "Compiler was unable to honor this factoryMethod customization"。
我的结论:
- 如果 XJC 不产生 "Two declarations cause a collision in the ObjectFactory class." 错误 ,则不能使用 jxb:factoryMethod 更改 ObjectFactory 的 createXXX 方法的名称
- "Two declarations cause a collision in the ObjectFactory class." 当在同一级别(兄弟)有多个名称冲突的元素时会产生。如果他们处于不同的级别,xjc 不会抱怨。名称冲突是指 XJC 转换后名称相同(例如 "Step-Action" 和 "StepAction" 相同)
- jxb:class 注解对 ObjectFactory 的 createXXX 方法没有影响