gpt4 book ai didi

java - 从引用本地主机的远程 WSDL 创建 CXF 客户端

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:13:22 25 4
gpt4 key购买 nike

我正在使用 CXF 生成用于连接到远程网络服务的客户端。我无法控制网络服务或 wsdl 定义。

网络服务的 wsdl 对本地主机进行了多次引用,例如:

<soap12:address location="http://localhost:8002/request" />
<wsa10:EndPointReference>
<wsa10:Address>http://localhost:8002/request</wsa10:Address>
</wsa10:EndPointReference>

我正在尝试使用 wsdl2java maven 目标生成我的客户端,同时指向远程 wsdl:

...
<wsdlOptions>
<wsdlOption>
<wsdl>http://remotehost:8002/?wsdl</wsdl>
<wsdlOption>
<wsdlOptions>
...

当我尝试构建客户端时,由于对本地主机的引用而导致目标失败:

org.apache.cxf.wsd11.WSDLRuntimeException: Fail to create wsdl definition from :       http://remotehost:8002/?wsdl [ERROR] caused by : WSDLException (at  
/wsdldefinitions/wsdl:import) faultCode=PARSER_ERROR: Problem parsing
'http://localhost:8002/?wsdl=wsdl0'.: java.net.ConnectionException: Connection refused: connect

有没有办法让 CXF 理解本地主机引用与 wsdl 主机相关,并在生成客户端时自动将它们替换为适当的主机名?

我已经成功地通过将 wsdl 复制到本地文件并用适当的主机名手动替换本地主机引用来生成客户端。但是,我需要从远程 wsdl 定义而不是本地文件生成客户端。有谁知道可以实现这一目标的方法?我目前使用的是cxf 2.6.0版本

提前感谢您的回答。

(我已经用 remotehost 等通用名称替换了我的实际服务名称)

最佳答案

你想让 CXF 理解本地主机引用与 wsdl 主机相关,但这不是任何工具应该理解的东西,因为 WSDL 可以从任何位置导入其他 WSDL,这可能是 在某些情况下 正确的引用。只是您的情况并非如此,这是您要连接到的站点的配置错误

我知道您将 WSDL 的 URL 作为参数动态 制作代理的工具,因此您不能只下载它并更改引用。

我建议的解决方法 是编写简单的代理,一个连接到远程 URL(作为参数给出)并返回 WSDL 的 servlet,将本地主机引用更改为正确的引用。您会将此 servlet 的 URL 作为参数提供给您的代理工厂。这不是很好,但唯一好的解决方案是提供商修复自己的 WSDL。

关于java - 从引用本地主机的远程 WSDL 创建 CXF 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10663933/

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