背景故事:
我有一个由客户(不可协商)创建的 WSDL,它将多个 Web 标准混合到一个服务中。这一soap 服务有四个soap 端口,它们引用引用的(wsdl:import) WSDL 文件中的绑定,这些文件导入XSD,从而导致依赖关系树非常复杂。
由于这是通过导入完成的,因此顶级 WSDL 并没有那么大。WSDL2Java 和 wsimport 窒息它,但我有一个模式库编译成 JAXB 对象来使用。因此,我创建了一个包含所有必需操作的 CXF 服务,并且能够使用 SoapUI 对其进行测试(它很好地导入了顶级 WSDL,因为它不必创建 java 类)。
由于所有的soap 端口都指向同一个地址,并且该服务处理来自各个端口的所有操作,因此客户端不知道服务器认为所有操作都属于同一个端口。
问题:
当涉及到 CXF 生成 WSDL 时,这种情况就会崩溃。它将所有操作放在一个具有相同命名空间的端口上。在客户提供的 WSDL 中,服务、端口和绑定并不都在同一个名称空间中。我尝试使用 @WebService(wsdlLocation="") 注释为服务提供 WSDL,但它尝试解析它并将其与代码匹配(就像在理智的世界中一样)。
问题:
我想拦截/覆盖http://example.com/service?wsdl操作并返回客户提供的 wsdl。有没有办法在 CXF 中做到这一点?