【问题标题】:Change WSDL xsd:complexType name with Apache CXF使用 Apache CXF 更改 WSDL xsd:complexType 名称
【发布时间】:2013-09-01 08:56:32
【问题描述】:

我使用 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 以使用 &lt;xs:complexType name="ProtocolItem"&gt; 之类的内容?

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

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

【问题讨论】:

    标签: java web-services soap wsdl cxf


    【解决方案1】:

    试试这个:

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

    希望这会有所帮助。

    【讨论】:

    • 谢谢,这似乎有效!有没有办法更改默认命名约定,或者我必须用 @XmlType 注释我的所有类?
    • 是的!您应该使用@XmlTyp(name = "name") 注释类,使用@XmlElement(name = "name") 注释成员。
    • 感谢您的帮助,由于您的解决方案运行良好(尽管我更喜欢使用 Aegis),我很高兴奖励您。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多