【问题标题】:JAXB case sensitive class generationJAXB 区分大小写的类生成
【发布时间】:2017-08-02 20:33:24
【问题描述】:

我想从标准架构 learning object model 创建类。由于小写类型,该架构似乎已损坏。有什么方法可以在“不区分大小写”模式下使用 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”,并且我也更改了引用并且它有效。

谢谢!

【问题讨论】:

  • “模式似乎由于小写类型而被破坏”是什么意思。您能否提供(可能是简化的)示例什么不适合您?
  • 有一种复杂类型称为“Duration”,另一种扩展它称为“duration”。 Jaxb 显示错误:(与上述错误相关)从此处生成另一个“持续时间”。

标签: java jaxb standards case-sensitive


【解决方案1】:

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

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

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

(我已经简化了示例中的类型)。无论如何,希望您能找到更好的解决方案。

【讨论】:

  • 谢谢你,我已经这样做了,它有效。我想知道为什么 Jaxb 没有任何不区分大小写的标志,我可以在其中生成两个类:“Duration.java”和“duration.java”。再次感谢
  • 我认为这很复杂,因为这不符合 Java 代码约定。几周前我开始使用 JABX,遇到过像你这样的问题。我觉得很多现有的 WSDL 都没有为 JAX-WS 做准备
【解决方案2】:

这已经得到回答,但希望这对其他人有帮助,使用 -XautoNameResolution 以便在遇到两个具有相同名称的元素时生成新类(不区分大小写)。我使用它如下

xjc -d src -p com.sample -wsdl somewsdl.wsdl -XautoNameResolution

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2012-06-09
  • 2013-04-08
  • 2012-12-01
  • 2013-03-06
  • 2020-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多