我有一个应用程序尝试使用通过 wsdl2java 生成的类来访问 Web 服务。我希望能够配置它,以便我可以根据环境(测试/生产)使用不同的端点。
我发现以下答案正是我正在寻找的 https://stackoverflow.com/a/3569291/346666
但是,我想使用 Spring 将服务实例注入(inject)到我的服务层中 - 是否有一种纯 Spring 方法来实现上述目的?
或者,是否有更好的方法将 Web 服务实例注入(inject)到类中,并且仍然能够动态配置端点?
最佳答案
使用基于 Spring Java 的配置:
@Configuration
public class HelloServiceConfig {
@Bean
@Scope("prototype")
public HelloService helloService(@Value("${webservice.endpoint.address}") String endpointAddress) {
HelloService service = new HelloService();
Hello port = service.getHelloPort();
BindingProvider bindingProvider = (BindingProvider) port;
bindingProvider.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,endpointAddress);
return service;
}
}
@Component
public class BusinessService {
@Autowired
private HelloService hellowService;
...
public void setHelloService(HelloService helloService) {
this.helloService = hellowService;
}
}
编辑
要将其与基于 Spring XML 的配置结合使用,您只需将 HelloServiceConfig
注册为 Spring 上下文 xml 文件中的 bean:
<bean class="com.service.HelloServiceConfig.class"/>
<bean id="businessService" class="com.service.BusinessService">
<property name="helloService" ref="helloService"/>
</bean>
在 Spring 中创建 Web 服务客户端的其他替代方法包括使用 Spring Web Services或Apache CXF 。这两个选项都允许仅使用 XML 来定义基于 wsdl2java
的 JAX-WS
客户端,但需要额外的依赖项。
关于java - 通过 Spring 创建具有可配置端点的 Web 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25476762/