通过Spring创建具有可配置端点的Web服务

时间:2014-08-24 22:03:56

标签: java spring web-services

我有一个应用程序尝试通过wsdl2java使用生成的类访问Web服务。我希望能够配置它,以便我可以根据环境使用不同的端点(TEST / PROD)。

我发现以下答案正是我所寻找的 https://stackoverflow.com/a/3569291/346666

但是,我想使用Spring将服务实例注入我的服务层 - 上面有一个纯粹的Spring方法吗?

或者,是否有更好的方法将Web服务实例注入类中,并且仍然能够动态配置端点?

1 个答案:

答案 0 :(得分:1)

使用基于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的配置中使用它,您只需要在Spring上下文xml文件中将HelloServiceConfig注册为bean:

<bean class="com.service.HelloServiceConfig.class"/>

<bean id="businessService" class="com.service.BusinessService">
     <property name="helloService" ref="helloService"/>
</bean>

在Spring中创建Web服务客户端的其他替代方法包括使用Spring Web ServicesApache CXF。这两个选项都允许基于JAX-WS仅使用XML定义wsdl2java客户端,但需要其他依赖项。