【问题标题】:CXF java2ws: how to include external xsd files?CXF java2ws:如何包含外部 xsd 文件?
【发布时间】:2011-10-05 13:24:01
【问题描述】:

我为几个 Web 服务(来自服务器服务定义)生成 WSDL 文件,其中我已经为用作参数的 bean 提供了 XML 模式 (*.XSD)。我如何告诉 java2ws 引用这些(包括外部 XSD)而不是在 WSDL 中生成自己的?

我已经尝试过 -createxsdimports,但这确实会生成它自己的 XSD 文件。

我可以使用 Java 注释让 CXF 知道每个文件/包的 XSD 在哪里吗?

【问题讨论】:

    标签: java jaxb cxf jaxb2


    【解决方案1】:

    试试@XmlSchema 注释。它包含一个 location 参数,用于告诉 JAXB 存在一个真实的模式:

    @XmlSchema(location="http://www.example.com/xsds/foo.xsd")
    package com.example.foo;
    

    【讨论】:

    • 感谢 Blaise,我如何在本地项目目录中定义 xsd 文件。我试过 file:/// 但 CXF (2.4.1) 仍然在 上给我 no schemaLocation=""
    【解决方案2】:

    我有一个导入外部模式文件的 CXF Web 服务。当我建造它时;我花了很多时间试图找出你想要实现的确切场景。不幸的是,CXF 在从 java 生成 WSDL 时似乎不尊重 @XmlSchema(location="") 注释。 CXF 的主要开发者 Daniel Kulp 当时告诉我,这是一个已知问题,但没有足够多的人抱怨它,因此在他们需要解决的优先事项列表中并不高。

    所以我最终手动编写了 WSDL,然后从 WSDL 文件生成 SEI。当然,如果您手写 WSDL,您可以为所欲为。

    请记住,这样做的一个副作用是外部架构文件需要通过 HTTP GET 访问 - 无论是在生成 SEI 时,还是在 Web 服务应用程序启动时 - CXF 都会在启动时检索架构文件.当然,当您生成客户端时也是如此。这确实会产生一些混乱的架构依赖。但似乎无法告诉 CXF“myschema.xsd”在 http://myurl.com/myschema.xsd 上可用,但在 /src/main/schema/myschema.xsd 中也可用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-10
      • 2016-01-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多