【问题标题】:Use same ComplexType in different WSDL files在不同的 WSDL 文件中使用相同的 ComplexType
【发布时间】:2011-01-06 21:18:08
【问题描述】:

我想在两个不同的 WSDL 中使用相同的 ComplexType。如何定义和包含这些 ComplexType,以便我可以在两个 WSDL 中使用它? (实际上在 Java 的情况下,它们会生成相同的包/数据类型)

【问题讨论】:

    标签: xml xsd wsdl soa complextype


    【解决方案1】:

    答案实际上取决于您的部署模型等。但这里有一个简单的解决方案

    • 让该复杂类型位于其自己的命名空间中
    • 将复杂类型捆绑为单独的组件,例如 COMMON-XSD

    对于每个 WSDL

    • 导入复杂类型
    • 依赖 COMMON-XSD
    • 使用构建工具提供的工具将 XSD 复制到该项目(mvn 和 ant 都可以)
    • 大多数 wsdl-to-java 工具允许您将 COMMON-XSD 命名空间映射到您想要的任何包
    • 为 WSDL 生成代码

    我建议你通过这个nice article

    如果您提供有关构建环境和部署模型的更多详细信息,我可以提供更具体的答案

    【讨论】:

    • 我有三层,对象/类型在它们之间传递。每个层都由具有自己的 WSDL 的客户端/服务器表示,CXF 生成器使用这些 WSDL。 Layer1 是 Layer2 的服务器,Layer2 是 Layer3 的服务器,Layer1 的客户端。很明显,由于单独的 WSDL 文件,从 L1 传递到 L3 的“相同”对象具有不同的数据类型(复杂类型被定义并生成两次到 L1 和 L2 的不同包)
    • 所以 L3 -> L2 -> L1 是流,并且相同的 ComplexType 正在跨层传递。只要每一层都将其视为与其支持的对象不同的对象,这不会导致任何问题。通过使用 Java 中的包和 XML 中的名称空间解决了经典的名称空间问题;-)。您也许可以通过其他方式解决,但这只会使事情复杂化。只需按照我的建议在生成代码时为复杂类型和 diff 包 structre 使用 diff 命名空间
    • 是的,我已经在 diff NS 和包中实现了它。但是在这种情况下,您不能只是简单地将对象传递到下一层,因为它被视为不同的类型,并且您必须将所有属性从正确的包中复制到同一个对象,这很难看。以后要编辑 ComplexType 时不要提及。
    猜你喜欢
    • 1970-01-01
    • 2011-12-16
    • 1970-01-01
    • 1970-01-01
    • 2016-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多