我正在处理一个Spring Boot应用程序,其中我使用该应用程序公开SOAP WebService。我在Spring boot应用程序中使用Apache CFX framework for SOAP impl。我正在使用基于注释的方法。
我在一个bean中的Spring Boot配置文件中设置应用程序上下文时遇到了问题。下面是我的代码。
@SpringBootApplication
@ComponentScan("com.test")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
配置文件如下所示。
@Configuration
public class WebServiceConfiguration {
//All individual bean definitions should go here
@Autowired
ApplicationContext appContext;
@Bean
public ServletRegistrationBean cxfServlet() {
return new ServletRegistrationBean(new CXFServlet(), "/soap-api/*");
}
@Bean(name = Bus.DEFAULT_BUS_ID)
public SpringBus springBus() {
return new SpringBus();
}
@Bean(name="IValidator")
public IValidator getValidator(){
return new Validator();
}
@Bean(name="SOAPprocessImpl")
public IPSoap getService() {
return new SOAPprocessImpl();
}
@Bean
public Endpoint endpoint() {
EndpointImpl endpoint = new EndpointImpl(springBus(), getService());
endpoint.publish("/WS_1.0");
endpoint.setWsdlLocation("process.wsdl");
return endpoint;
}
现在我有了bean SOAPprocessImpl实现,我需要在其中获取应用程序上下文,以便能够处理验证器bean。我已经在configuraton文件中将SOAPprocessImpl声明为bean。代码如下
@javax.jws.WebService (endpointInterface="com.test.IPSoap")
public class SOAPprocessImpl implements IPSoap, ApplicationContextAware {
private static ApplicationContext context;
public static ApplicationContext getApplicationContext() {
return context;
}
@Override
public void setApplicationContext(ApplicationContext ac)
throws BeansException {
context = ac;
}
private static final Logger logger = Logger.getLogger(SOAPprocessImpl.class.getName());
private IValidator validator = (IValidator) context.getBean("IValidator"); // context is NULL here
public IRResponse GetBalance(TSSearchParams SearchParams) {
// Some processing logic
}
}
选项(1):要解决该问题,您需要使用@configuration
将您的SOAPProcessIMPL
bean注册到Spring容器,如下所示,以便可以注入ApplicationContext
对象:
@Configuration
@javax.jws.WebService (endpointInterface="com.test.IPSoap")
public class SOAPprocessImpl implements IPSoap, ApplicationContextAware {
private static ApplicationContext context;
private IValidator validator;
public static ApplicationContext getApplicationContext() {
return context;
}
@Override
public void setApplicationContext(ApplicationContext ac)
throws BeansException {
SOAPprocessImpl.context = ac;
}
@PostConstruct//use PostConstruct
public void init() {
validator = (IValidator) context.getBean("IValidator");
}
//add your current code
}
重要的一点是,在容器准备好bean之前,您不能使用context
对象,因此您需要使用上面所示的@postconstruct
方法来初始化变量。
选项2(推荐):最好的方法是使用@autowired
将ivalidator
对象注入到SOAPProcessIMPL
中,如下所示,这样您就不需要SOAPProcessIMPL
bean知道ApplicationContextAWare
。Spring容器将注入为IValidator
类提供的实现的实例(前提是它在@ComponentScan
的包下)。
@Component
@javax.jws.WebService (endpointInterface="com.test.IPSoap")
public class SOAPprocessImpl implements IPSoap {
private static final Logger logger = Logger.getLogger(SOAPprocessImpl.class.getName());
@Autowired //spring directly injects this object
private IValidator validator;
public IRResponse GetBalance(TSSearchParams SearchParams) {
// Some processing logic
}
}
我试图在SpringMVC中运行SpringBoot应用程序,在SpringMVCPOM中添加SpringBoot应用程序依赖项,并扫描SpringBoot包,但我面临以下问题
部署在Heroku上的Rails应用程序无法加载。我设置了数据库迁移,我还有puma和procfile。。。我真的不知道。 这是我的日志: 宝石文件 程序文件 配置/puma.rb 工人整数(ENV['WEB_CONCURRENCY']||2)threads_count=整数(ENV['RAILS_MAX_THREADS']||5)线程threads_count,threads_count pre
在我的项目中,我想使用特定于环境的属性文件。例如,如果我在开发中运行它,它应该使用应用程序。dev.properties,对于生产,它应该使用应用程序。产品属性等等。 我有下面两个文件在我的资源文件夹。 application.properties(用于生产) application.dev.properties(用于开发) 我有一个属性像下面的每个文件。 为了刺激 给德夫 我有一门课,如下所示
我目前正在学习springboot。通过选择spring starter project,我在STS中创建了一个项目。spring boot版本2.2.2和已导入JPA、H2和RestRepository。 下面是我的领域类, 应用属性 存储库类 在波姆。xml显示了下面提到的错误。不确定,因为这一点,我得到了错误,但我没有在pom的任何变化。xml 在运行项目时,我得到了以下错误,不知道为什么整
我已经提供了Linux SWT jar,并在Eclipse中打包了应用程序,以便在应用程序的jar中包含SWT.jar。当我尝试在Ubuntu上运行它时,我得到了以下错误文本(发布只是原因):