【发布时间】:2011-10-05 13:24:01
【问题描述】:
我为几个 Web 服务(来自服务器服务定义)生成 WSDL 文件,其中我已经为用作参数的 bean 提供了 XML 模式 (*.XSD)。我如何告诉 java2ws 引用这些(包括外部 XSD)而不是在 WSDL 中生成自己的?
我已经尝试过 -createxsdimports,但这确实会生成它自己的 XSD 文件。
我可以使用 Java 注释让 CXF 知道每个文件/包的 XSD 在哪里吗?
【问题讨论】:
我为几个 Web 服务(来自服务器服务定义)生成 WSDL 文件,其中我已经为用作参数的 bean 提供了 XML 模式 (*.XSD)。我如何告诉 java2ws 引用这些(包括外部 XSD)而不是在 WSDL 中生成自己的?
我已经尝试过 -createxsdimports,但这确实会生成它自己的 XSD 文件。
我可以使用 Java 注释让 CXF 知道每个文件/包的 XSD 在哪里吗?
【问题讨论】:
试试@XmlSchema 注释。它包含一个 location 参数,用于告诉 JAXB 存在一个真实的模式:
@XmlSchema(location="http://www.example.com/xsds/foo.xsd")
package com.example.foo;
【讨论】:
我有一个导入外部模式文件的 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 中也可用。
【讨论】: