我为几个 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 中也可用。