繁体   English   中英

如何为Spring配置的基于Apache CXF的Web服务客户端提供服务器地址?

[英]How to provide server address to the Spring-configured Apache CXF-based web service client?

我正在试验Apache CXF,并对客户端部分有疑问。

下面是我目前的一些com.example.customerservice.service.CustomerService的WS客户端的Spring配置:

<jaxws:client
    name="com.example.customerservice.service.CustomerServiceClient"
    serviceName="customer:CustomerServiceService" endpointName="customer:CustomerServiceEndpoint"
    address="http://localhost:8080/CustomerServicePort"
    serviceClass="com.example.customerservice.service.CustomerService">
    <jaxws:features>
        <bean class="org.apache.cxf.feature.LoggingFeature" />
    </jaxws:features>
</jaxws:client>

如您所见, address属性是静态配置的。 这不适合我,因为我事先不知道服务器URL。 此外,在某些情况下,我想将此客户端用于具有不同地址的不同服务。

因此,Spring中服务器地址的静态配置是不合适的。 所以我的问题是 - 我怎样才能让它变得动态?

  • 目前我的解决方案是设置一个系统属性 - 类似于baseUrl并使用属性占位符配置器将其注入Spring配置。
  • 另一种可能性是简单地手动构建客户端,我也不喜欢。

但我相信我真的错过了一些东西。 也许有可能像clientFactory.createClientFor("http://myserver:8080")

请参阅CXF用户邮件列表的帖子。

你有几个选择:

1)如果要保留Spring上下文,并在运行时以编程方式更改地址:

您可以在请求上下文中设置标准属性。 以下是以编程方式执行此操作的示例。

BindingProvider bp =(BindingProvider)端口; Map context = bp.getRequestContext(); Object oldAddress = context.get(BindingProvider.ENDPOINT_ADDRESS_PROPERTY); context.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,newAddress);

执行此操作时,您应该了解对客户端代理的多线程访问。 请参阅CXF FAQ(JAX-WS客户端代理线程是否安全?)

2)如果您愿意/能够提供WSDL URL并使用JAX-WS API,您可以编写可移植代码,该代码将创建连接到您选择的端点的客户端代理。 您可以使用Spring上下文文件中的“createdFromAPI”(配置Spring Client(选项1))属性来仍然允许以编程方式构造的客户端代理的基于Spring的配置。 我认为这里也支持通配符,因此您应该能够在Spring上下文中使用单个条目配置许多客户端。 如果端点名称空间/本地名称在您尝试与之交互的端点之间差别很大,则此方法将变得更加复杂。

3)以编程方式使用org.apache.cxf.jaxws.JaxWsProxyFactoryBean,如配置Spring Client的Spring配置(选项2)[2]所示。 这使您可以设置接口和地址,并随意创建新的客户端代理实例。 您甚至可能希望配置此工厂的单个实例,其中大多数属性已在Spring中设置,然后将其注入到您的代码中,您可以在其中更改地址并随意构建新的客户端代理(提供对工厂bean的同步访问)课程)。 您还可以缓存客户端代理,以避免重复创建它们的费用。

http://cxf.apache.org/faq.html#FAQ-AreJAXWSclientproxiesthreadsafe%253F http://cxf.apache.org/docs/jax-ws-configuration.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM