【问题标题】:How to start cxf service on localhost but return external address in wsdl?如何在 localhost 上启动 cxf 服务但在 wsdl 中返回外部地址?
【发布时间】:2010-12-17 13:34:51
【问题描述】:

我在 apache 后面使用 cxf 和 jetty 通过soap 公开一个 web 服务。目标是在所有情况下都在 http://localhost:9000 上启动码头,并为其配备 apache 代理,但让自动生成的 wsdl 显示一个适合其运行环境的 soap:address(例如 http://api.testing.example.comhttp://api.uat.example.comhttps://api.example.com )。似乎生成的 wsdl2java *Service 类接受 wsdl 的 URL,它必须作为开始的“位置”以及在 soap:address 中返回的字符串。这必须是可配置的,但并不明显,因此不胜感激。

更清楚一点 - 我通过 Spring 将“WsdlURL”传递给 Service 类的构造函数(到目前为止只有 http://localhost:9000 有效)。我需要这个问题的解决方案是在 cxf.cml、cxf-.xml、spring 或其他一些配置文件中进行配置更改,而不是在代码中,因为这个参数会根据它所处的环境而改变部署。

【问题讨论】:

    标签: java web-services jetty cxf


    【解决方案1】:

    jaxws:endpoint 配置有一个“publishedEndpointURL”,如果指定了地址,则使用它代替地址。知道 servlet 正确使用它,而不是 100% 确定在码头上。他们共享大量代码,因此它可能会起作用。

    【讨论】:

    • 我在 CXF 2.2.3/Jetty 6.1.11 上对此进行了测试,它可以工作。但是,您需要更新用户指南中的 CXF JAXWS 配置页面以包含此参数:)
    • 目前我使用注释来完成大部分配置,这意味着我无法轻松访问正确的配置,这让我开始发疯。我将尝试撤消注释并使用完整的 spring 配置,并尝试您的解决方案(这预示着良好的链接:issues.apache.org/jira/browse/CXF-1279)。
    • 对于像我这样复制和粘贴的人来说,请注意 - 它是带有小写 R & L 的“publishedEndpointUrl”。使用 publishedEndpointURL 会引发异常。
    【解决方案2】:

    试试@WebService(wsdlLocation="http://yourdesiredlocation")。不确定它是否会起作用。

    【讨论】:

    • 看来 wsdlLocation 参数应该是本地文件的路径,而不是 URL。
    • 它被解析为一个URL对象,所以一般来说两者都可以。
    • 这里看到的问题是地址是在源中编码的,不能通过配置改变
    猜你喜欢
    • 2017-12-29
    • 1970-01-01
    • 2015-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多