4

我使用 Apache CXF 发布 Web 服务,“即时”生成 WSDL。这很好用,但我想更改生成类型的命名约定。由于服务客户端 (C#) 基于 WSDL 生成代码,默认的 xsd:complexType 命名导致类型名称以小写字母开头。

以下是生成的 WSDL 的摘录:

<xs:complexType name="protocolItem">
<xs:sequence>
  <xs:element minOccurs="0" name="data" type="tns:protocolItemData"/>
  <xs:element maxOccurs="unbounded" minOccurs="0" name="elements" nillable="true" type="tns:protocolElement"/>
  <xs:element minOccurs="0" name="meta" type="tns:protocolItemMeta"/>
</xs:sequence>
</xs:complexType>

这是生成上述 WSDL 片段的 Java 代码:

@RooJavaBean
public class ProtocolItem {

    private ProtocolItemData data;
    private ProtocolItemMeta meta;
    private List<ProtocolElement> elements;

}

如何更改生成的 WSDL 以使用类似的东西<xs:complexType name="ProtocolItem">

希望我没有遗漏一个明显的注释......谢谢!

编辑:感谢第一个答案!所以有一种方法可以“按类”执行此操作——我可以配置 CXF 命名约定吗?如果我不需要注释所有类会很好。

4

2 回答 2

6

尝试这个:

@XmlType(name="ProtocolItem")
public class ProtocolItem {
   ...
}

希望这可以帮助。

于 2013-09-15T07:10:01.027 回答
1

在 Apache CXF 中使用Aegis数据绑定而不是 JAXB 数据绑定有助于:这改变了命名约定。不幸的是,我在添加了所有 @XmlType 注释后才意识到这一点,所以我再次删除了它们......

在搜索集合/数组的解决方案时,我偶然发现了 Aegis - 它们不是用 JAXB 包装的,而是用 Aegis 包装的,这是正确生成客户端代码(类型化集合而不是数组)所必需的。

于 2013-09-18T10:36:33.733 回答