我正在尝试创建扩展org.springframework.ws.transport.http.WebServiceMessageReceiverHandlerAdapter的CustomWebServiceMessageReceiverHandlerAdapter。
WebServiceMessageReceiverHandlerAdapter扩展了实现InitializingBean的抽象WebServiceMessageReceiverObjectSupport。
我有一个问题,因为我不明白为什么我必须在自定义处理程序中调用afterPropertiesSet()。在没有调用这个方法的情况下,我得到一个错误:“工厂消息是必需的”。但是,这个方法是在抽象类中调用的,所以我的自定义处理程序应该从抽象类运行afterPropertiesSet()。如果你知道解决方案,请让我知道。非常感谢。
编辑:这是我的CustomWebServiceMessageReceiverHandlerAdapter:
public class CustomWebServiceMessageReceiverHandlerAdapter extends WebServiceMessageReceiverHandlerAdapter {
@Override
protected void handleInvalidXmlException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object handler,
InvalidXmlException ex) throws Exception {
//code
}
@Override
public void afterPropertiesSet() {
}
}WebServiceMessageReceiverHandlerAdapter和WebServiceMessageReceiverObjectSupport来自Spring Framework
public class WebServiceMessageReceiverHandlerAdapter extends WebServiceMessageReceiverObjectSupport{}没有afterPropertiesSet()
public abstract class WebServiceMessageReceiverObjectSupport implements InitializingBean {
private WebServiceMessageFactory messageFactory;
/** Returns the {@code WebServiceMessageFactory}. */
public WebServiceMessageFactory getMessageFactory() {
return messageFactory;
}
/** Sets the {@code WebServiceMessageFactory}. */
public void setMessageFactory(WebServiceMessageFactory messageFactory) {
this.messageFactory = messageFactory;
}
@Override
public void afterPropertiesSet() throws Exception {
Assert.notNull(messageFactory, "messageFactory is required");
}现在,当我从自定义处理程序中删除afterPropertiesSet()时,抛出了一个异常。在我看来,我对bean的生命周期一无所知。
发布于 2020-03-25 19:33:15
我对你的具体情况不太确定。通常,如果bean实现了InitializingBean以及afterPropertiesSet,则在实例化bean实例和Spring注入所有@Autowired属性/值之后调用此方法。
在您的特定情况下,需要确保设置(通过继承)类的messageFactory属性。通常这是由Spring完成的,如果您为自动装配提供了合适的setter:
@Autowired
@Override
public void setMessageFactory(WebServiceMessageFactory messageFactory) {
super.setMessageFactory(messageFactory);
}如果您在不调用super.afterPropertiesSet()的情况下重写afterPropertiesSet,那么创建bean将会起作用,因为超级实现的断言将被跳过。但是您很可能会遇到问题,因为messageFactory属性没有正确初始化。
https://stackoverflow.com/questions/60828423
复制相似问题