gpt4 book ai didi

java - 你如何拦截CXF中的WSDL请求?

转载 作者:行者123 更新时间:2023-11-30 09:27:36 24 4
gpt4 key购买 nike

背景故事:

我有一个由客户创建的 WSDL(不可协商),它将多个 Web 标准混合到一个服务中。这个 one soap 服务有四个 soap 端口,它们引用引用的 (wsdl:import) WSDL 文件中的绑定(bind),这些文件导入 XSD,从而导致非常复杂的依赖关系树。

由于这是通过导入完成的,因此顶级 WSDL 并没有那么大。 WSDL2Java 和 wsimport 对此感到窒息,但我有一个模式库被编译成 JAXB 对象以供使用。因此,我创建了一个具有所有必需操作的 CXF 服务,并且能够使用 SoapUI 对其进行测试(它导入了顶级 WSDL,因为它不必创建 Java 类)。

由于所有 soap 端口都指向同一个地址,并且该服务处理来自各个端口的所有操作,客户端不知道服务器认为所有操作都属于同一个端口。

问题:

当涉及到生成 WSDL 的 CXF 时,这种情况就不成立了。它将所有操作放在具有相同命名空间的一个端口上。在客户提供的 WSDL 中,服务、端口和绑定(bind)并不都在同一个命名空间中。我尝试使用 @WebService(wsdlLocation="") 注释通过 WSDL 提供服务,但它试图解析它并将其与代码匹配(就像在一个理智的世界中一样)。

问题:

我想拦截/覆盖 http://example.com/service?wsdl运行并返回客户提供的wsdl。有没有办法在 CXF 中做到这一点?

最佳答案

我最终将端口拆分为单独的服务,但我仍然需要一个包含所有端口信息的自定义 WSDL。使用 CXF 执行此操作的方法是创建一个拦截器。

我遵循定期处理 WSDL 生成的 CXF 拦截器的示例:http://grepcode.com/file/repo1.maven.org/maven2/org.apache.cxf/cxf-rt-frontend-simple/2.4.0/org/apache/cxf/frontend/WSDLGetInterceptor.java .我读入了我的自定义 WSDL,并将占位符主机名替换为来自请求 URL 的主机名。

然后您需要在创建服务时添加自定义拦截器(我使用 spring 进行配置)。有关更多信息,请访问 http://cxf.apache.org/docs/interceptors.html .

关于java - 你如何拦截CXF中的WSDL请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14526233/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com