1

我正在使用 CXF 从 wsdl 生成 Web 服务。生成的 web 服务有注释 @WebService 我如何从 web 服务中获取对 spring bean 的引用?我所有的 spring bean 都用 @Service 进行了注释,我可以在我的 web 应用程序中访问它们。我如何也从我的 Web 服务访问它们?

我尝试了以下方法:

public class TestWSImpl implements TestWSSoap{

    @Resource
    public WebServiceContext wsContext;

    @Override
    public String getTest() {

        ServletContext servletContext= (ServletContext) wsContext.getMessageContext().get(MessageContext.SERVLET_CONTEXT);

        ApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(servletContext);

        return "Test";
    }
}

但是 getWebApplicationContext 方法返回 null

当我将 getWebApplicationContext 替换为 getRequiredWebApplicationContext 时,我收到一条错误消息:未找到 WebApplicationContext:未注册 ContextLoaderListener?

有人有想法吗?

谢谢阿隆

4

2 回答 2

1

如果您使用的是 JUnit 4.4 或更高版本,则可以使用 Spring 2.5 JUnit 注释注入它。这是一个例子。

http://hamletdarcy.blogspot.com/2008/12/autowired-junit-tests-with-spring-25.html

当然,不用说,这种方法要求 Web 服务在测试开始时在 Web 上下文中运行。你这样做了吗?

您也可能更喜欢使用SOAP UI 测试基于 WSDL 的服务。

于 2009-05-25T17:07:21.737 回答
0

那是很久以前。我正在查看我的代码,我看到我放置了以下应该启动 spring 的方法:

@PostConstruct
public void init(){
    JaxWsServerFactoryBean svrFactory = new JaxWsServerFactoryBean();
    svrFactory.setServiceClass(MyWebService.class);
    svrFactory.setAddress("http://address.com");
    svrFactory.setServiceBean(wsHandler);
    svrFactory.getInInterceptors().add(new LoggingInInterceptor());
    svrFactory.getOutInterceptors().add(new LoggingOutInterceptor());
    svrFactory.create();

}

请告诉我它是否解决了你的问题......

于 2009-12-02T08:31:24.077 回答