JAXB大小写敏感类生成

3
我希望能从标准模式学习对象模型中创建类。该模式似乎由于小写类型而损坏。有没有办法在jaxb中以“不区分大小写”的模式生成类?
以下是冲突出现的问题:
<xs:complexType name="Duration">
  <xs:choice minOccurs="0" maxOccurs="unbounded">
     <xs:element name="duration" type="DurationValue"/>
     <xs:element name="description" type="description"/>
     <xs:group ref="ex:customElements"/>
    </xs:choice>
 </xs:complexType> 

<xs:complexType name="duration">
    <xs:complexContent>
      <xs:extension base="Duration">
        <xs:attributeGroup ref="ag:duration"/>
       <xs:attributeGroup ref="ex:customAttributes"/>
     </xs:extension>
    </xs:complexContent>
 </xs:complexType>

我已将“duration”标签更名为“customDuration”,并且我也更改了引用,现在它可以正常工作。
谢谢!

1
“schema appears to be broken due to a lowercased type” 是什么意思?你能提供一个(可能是简化的)例子,说明哪里出了问题吗? - maximdim
有一个复杂类型叫做“Duration”,另一个扩展它的也叫做“duration”。JAXB 显示错误:(与上述错误相关)另一个“Duration”是从这里生成的。 - pokeRex110
2个回答

2

我认为你应该更改架构,使其具有Durationduration_,生成JAXB对象,然后更改生成的JAXB类以适应原始WSDL。例如,在Java中:

@XmlElement(name = "Duration")
protected String duration;

@XmlElement(name = "duration")
protected String duration_;

(我已经在示例中简化了类型)。希望你能找到更好的解决方案。


谢谢,我已经完成了并且它可以工作。我想知道为什么Jaxb没有任何不区分大小写的标志,我可以生成两个类:"Duration.java"和"duration.java"。再次感谢。 - pokeRex110
我认为这很复杂,因为这与Java代码约定不一致。几周前我开始使用JABX工具,也遇到了和你类似的问题。我感觉很多现有的WSDL文件并没有为JAX-WS做好准备。 - jddsantaella

1
这个问题已经有答案了,但希望这能对其他人有所帮助。使用-XautoNameResolution参数,这样每当它遇到两个名称相同的元素(不区分大小写)时,就会生成新的类。我是这样使用的:
xjc -d src -p com.sample -wsdl somewsdl.wsdl -XautoNameResolution

这个参数的用法(也适用于Maven)在这里:https://gist.github.com/barbietunnie/69310de4366039411ad11e367542155e - user2590805

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接