- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在 Java/Spring/ Apache Cxf
上工作网络应用程序,突然间,当我进行了一些明显幼稚的更改时出现错误,
25-Aug-2017 11:48:43.036 INFO [RMI TCP Connection(2)-127.0.0.1] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
log4j:WARN No appenders could be found for logger (org.apache.cxf.common.logging.LogUtils).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
25-Aug-2017 11:48:43.540 SEVERE [RMI TCP Connection(2)-127.0.0.1] org.apache.catalina.core.StandardContext.startInternal One or more listeners failed to start. Full details will be found in the appropriate container log file
25-Aug-2017 11:48:43.554 SEVERE [RMI TCP Connection(2)-127.0.0.1] org.apache.catalina.core.StandardContext.startInternal Context [] startup failed due to previous errors
[2017-08-25 11:48:43,586] Artifact jaxrs-tutorials:war exploded: Error during artifact deployment. See server log for details.
25-Aug-2017 11:48:49.258 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/Applications/Tomcat-8.5.16/webapps/manager]
25-Aug-2017 11:48:49.310 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/Applications/Tomcat-8.5.16/webapps/manager] has finished in [51] ms
info
的错误,
25-Aug-2017 11:48:43.540 SEVERE [RMI TCP Connection(2)-127.0.0.1] org.apache.catalina.core.StandardContext.startInternal One or more listeners failed to start. Full details will be found in the appropriate container log file
25-Aug-2017 11:48:43.554 SEVERE [RMI TCP Connection(2)-127.0.0.1] org.apache.catalina.core.StandardContext.startInternal Context [] startup failed due to previous errors
config
目录用于
Java annotation based config
下面提供了代码。
AppConfig
文件,
@Configuration
@ComponentScan(AppConfig.SERVICE_PACKAGE)
public class AppConfig {
public static final String BASE_PACKAGE = "mobi.puut";
public static final String SERVICE_PACKAGE = BASE_PACKAGE + ".services";
private static final String RESOURCES_PACKAGE = BASE_PACKAGE + ".rest";
private static final String PROVIDER_PACKAGE = BASE_PACKAGE + ".rest.provider";
public static final String API_BASE = "/api/*";
@ApplicationPath("/")
public class JaxRsApiApplication extends Application {
}
@Bean(destroyMethod = "shutdown")
public SpringBus cxf() {
return new SpringBus();
}
@Bean
@DependsOn("cxf")
public Server jaxRsServer(ApplicationContext appContext) {
JAXRSServerFactoryBean factory = RuntimeDelegate.getInstance().createEndpoint(jaxRsApiApplication(), JAXRSServerFactoryBean.class);
factory.setServiceBeans(restServiceList(appContext));
factory.setAddress("/" + factory.getAddress());
factory.setProviders(restProviderList(appContext, jsonProvider()));
return factory.create();
}
@Bean
public JaxRsApiApplication jaxRsApiApplication() {
return new JaxRsApiApplication();
}
@Bean
public JacksonJsonProvider jsonProvider() {
return new JacksonJsonProvider();
}
private List<Object> restServiceList(ApplicationContext appContext) {
return RestServiceBeanScanner.scan(appContext, AppConfig.RESOURCES_PACKAGE);
}
private List<Object> restProviderList(final ApplicationContext appContext,
final JacksonJsonProvider jsonProvider) {
final List<Object> providers = RestProviderBeanScanner.scan(appContext, PROVIDER_PACKAGE);
providers.add(jsonProvider);
return providers;
}
}
WebInitializer
提供,
public class WebAppInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
servletContext.addListener(new ContextLoaderListener(createWebAppContext()));
addApacheCxfServlet(servletContext);
}
private void addApacheCxfServlet(ServletContext servletContext) {
CXFServlet cxfServlet = new CXFServlet();
ServletRegistration.Dynamic appServlet = servletContext.addServlet("CXFServlet", cxfServlet);
appServlet.setLoadOnStartup(1);
Set<String> mappingConflicts = appServlet.addMapping(AppConfig.API_BASE);
}
private WebApplicationContext createWebAppContext() {
AnnotationConfigWebApplicationContext appContext = new AnnotationConfigWebApplicationContext();
appContext.register(AppConfig.class);
return appContext;
}
}
logger
获取更多信息以及我应该在哪里使用它们?此外,任何有关解决问题的见解都会有所帮助。我已经更新了
JAR
带有
mvn clean install
的文件和
mvn idea:idea
命令。
UPDATE
Tomcat Localhost Log
Tomcat Catalina Log
最佳答案
我想写一个关于这个问题的详细答案以及我解决问题所遵循的步骤。
A. 没有足够的日志信息。我查了一下POM
并找到了这个,
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
<exclusions>
<!-- Exclude Commons Logging in favor of SLF4j -->
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
SLF4J
我刚刚删除了排除 XML 标记以获取更多日志信息。于是,就变成这样了
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
Caused by: org.springframework.context.annotation.ConflictingBeanDefinitionException: Annotation-specified bean name 'userService' for bean class [mobi.puut.services.UserServiceImpl] conflicts with existing, non-compatible bean definition of same name and class [mobi.puut.services.UserService2Impl]
ConflictingBeanDefinitionException
用于创建具有相同名称的 bean。虽然我对
Spring
有一些经验,我需要用
Apache Cxf
创建一个项目因此,为此目的克隆一个演示项目。他们有一个相同的实体
User
和相同
definition - interface
和相同
implementation
其中。虽然我有
refactored
对于项目中的所有类并且似乎没有明显错误,我仍然有一个问题 - 我保留相同的 bean 名称
"userService
在接口(interface)的 2 个实现中。
User2
实体中的类,
public class User2 {
private Integer id;
private String name;
public User2() {
}
public User2(Integer id, String name) {
this.id = id;
this.name = name;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
@Override
public String toString() {
return String.format("{id=%s,name=%s}", id, name);
}
}
User
实体中的类,
@Entity
@Table(name = "users")
public class User {
@Id
@Column
@NotNull
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@NotNull
@Column(name = "name")
@Size(min = 5, max = 45, message = "Name must be between 5 and 45 characters.")
private String name;
public User() {
}
public User(int id, String name) {
super();
this.id = id;
this.name = name;
}
public User(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof User)) return false;
User user = (User) o;
if (getId() != user.getId()) return false;
return getName().equals(user.getName());
}
@Override
public int hashCode() {
int result = getId();
result = 31 * result + getName().hashCode();
return result;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
services
中的接口(interface)目录,
public interface IUserService2 {
Collection<User2> getUsers();
User2 getUser(Integer id);
Response add(User2 user);
}
public interface IUserService {
List<User> getCurrentStatuses();
void create(User user);
List<User> getAllUsers();
}
services
内部接口(interface)的实现指示,
@Service("userService")
public class UserService2Impl implements IUserService2 {
private static Map<Integer, User2> users = new HashMap<Integer, User2>();
static {
users.put(1, new User2(1, "foo"));
users.put(2, new User2(2, "bar"));
users.put(3, new User2(3, "baz"));
}
public UserService2Impl() {
}
@Override
public Collection<User2> getUsers() {
return users.values();
}
@Override
public User2 getUser(Integer id) {
return users.get(id);
}
@Override
public Response add(User2 user) {
user.setId(users.size()+1);
users.put(user.getId(), user);
//do more stuff to add user to the system..
return Response.status(Response.Status.OK).build();
}
}
@Service("userService")
public class UserServiceImpl implements IUserService {
@Autowired
@Qualifier("userDao")
public IUserDao userDao;
public List<User> getCurrentStatuses() {
return userDao.getAllUsers();
}
public void create(User user) {
userDao.saveOrUpdate(user);
}
public List<User> getAllUsers() {
List<User> users = userDao.getAllUsers();
if (Objects.isNull(users)) {
return null;
}
return users;
}
}
error
- 我注释了 2 个具有相同 bean 名称的类
"userService"
.我不得不像这样改变它来为 bean 提供一个不同的名称,
@Service("user2Service")
public class UserService2Impl implements IUserService2 {
// some code
}
ConflictingBeanDefinitionException
由于 2 个 bean 同名,我只需要提供不同的名称。
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'userService': Unsatisfied dependency expressed through field 'userDao'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'mobi.puut.database.IUserDao' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true), @org.springframework.beans.factory.annotation.Qualifier(value=userDao)}
// some consequent error messages not necessay to solve the issue
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'mobi.puut.database.IUserDao' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true), @org.springframework.beans.factory.annotation.Qualifier(value=userDao)}
UnsatisfiedDependencyException
并说它无法创建名称为
userService
的 bean .好的,这是我拥有并集成到项目中的代码。通过字段表示的 Unsatisfied 依赖,即
userDao
.
userDao
是
IUserDao
的接口(interface)实例它是
@autowired
像这样,
@Autowired
public IUserDao userDao;
@Service("userService")
public class UserServiceImpl implements IUserService {
@Autowired
public IUserDao userDao;
public List<User> getCurrentStatuses() {
return userDao.getAllUsers();
}
public void create(User user) {
userDao.saveOrUpdate(user);
}
public List<User> getAllUsers() {
List<User> users = userDao.getAllUsers();
if (Objects.isNull(users)) {
return null;
}
return users;
}
}
database
中有一个接口(interface)目录和随后为用户实现的界面。接口(interface)名称是
IUserDao
看起来
soemthing like this,
public interface IUserDao {
boolean create(User user);
void saveOrUpdate(User user);
boolean create(List<User> users);
List<User> getAllUsers();
User getById(int id);
}
@Repository("userDao")
public class UserDaoImpl implements IUserDao {
@Autowired
private SessionFactory sessionFactory;
// the HQL queries
}
NoSuchBeanDefinitionException
并且应用程序没有找到
IUserDao
类型(类)的合格 bean .我有所有
HQL
查询在执行
IUserDao
并且代码之前完美运行。
database
层是
NOT
集成到应用程序中。这是
configuration
我用了,
public class WebAppInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
servletContext.addListener(new ContextLoaderListener(createWebAppContext()));
addApacheCxfServlet(servletContext);
}
private void addApacheCxfServlet(ServletContext servletContext) {
CXFServlet cxfServlet = new CXFServlet();
ServletRegistration.Dynamic appServlet = servletContext.addServlet("CXFServlet", cxfServlet);
appServlet.setLoadOnStartup(1);
Set<String> mappingConflicts = appServlet.addMapping(AppConfig.API_BASE);
}
private WebApplicationContext createWebAppContext() {
AnnotationConfigWebApplicationContext appContext = new AnnotationConfigWebApplicationContext();
// register all the config classes here
appContext.register(AppConfig.class);
return appContext;
}
}
WebInitializer
中集成了无数据库代码。 .我写了一个新类提供了
database connection
的所有信息和
hibernate integration
看起来像,
@Configuration
@EnableWebMvc
@EnableTransactionManagement
@ComponentScan(basePackages = {"mobi.puut.database"})
public class DatabaseConfig {
@Bean
public LocalSessionFactoryBean sessionFactory() {
// mobi.puut.entities
LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
sessionFactory.setDataSource(dataSource());
sessionFactory.setPackagesToScan(
new String[]{"mobi.puut.entities"});
sessionFactory.setHibernateProperties(hibernateProperties());
return sessionFactory;
}
@Bean
@Autowired
public HibernateTransactionManager transactionManager(
SessionFactory sessionFactory) {
HibernateTransactionManager txManager
= new HibernateTransactionManager();
txManager.setSessionFactory(sessionFactory);
return txManager;
}
@Bean
public PersistenceExceptionTranslationPostProcessor exceptionTranslation() {
return new PersistenceExceptionTranslationPostProcessor();
}
@Bean
public DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
// dataSource.setUrl("jdbc:mysql://localhost:3306/wallet?createDatabaseIfNotExist=true");
dataSource.setUrl("jdbc:mysql://localhost:3306/Wallet");
dataSource.setUsername("testuser");
dataSource.setPassword("testpassword");
return dataSource;
}
Properties hibernateProperties() {
Properties properties = new Properties();
// properties.setProperty("hibernate.hbm2ddl.auto", "create-drop");
properties.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect");
return properties;
}
}
WebInitializer
.这是我以前用的代码
registered
之前在
WebInitializer
中的配置,
appContext.register(AppConfig.class);
appContext.register(AppConfig.class, DatabaseConfig.class);
config
目录看起来像,
SUMMERY
i. ConflictingBeanDefinitionException
ii. UnsatisfiedDependencyException
iii. NoSuchBeanDefinitionException
ConflictingBeanDefinitionException
-> 2 个同名 bean
UnsatisfiedDependencyException
-> 有 bean
(= "userDao")
在不正确使用的类中
NoSuchBeanDefinitionException
-> 代码是正确的,但需要在配置中添加 datbase 层,所以
Spring IoC
找到 bean 。
关于java - org.apache.catalina.core.StandardContext.startInternal 一个或多个监听器启动失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45875230/
StandardContext的配置 StandardContext类的构造函数 /** * Create a new StandardContext component with the
我有一个 Java 网络应用程序,它使用带有 Ant 和 Ivy 的 Netbeans 进行管理,并使用 Tomcat 作为服务器。Tomcat版本:8.0.43 我选中了“保存时编译”,这样每次我更
我想访问一些不在服务器文档根目录下的文件。 我有这个Bean @Bean public EmbeddedServletContainerFactory servletContainer() {
我已经将我最新的类(class)打包并包含在我的 WEB-INF/lib 目录中,从那时起我一直收到此错误并且无法运行我的项目。 我也尝试过将 commons jar 添加到我的项目中,但我仍然遇到这
在 tomcat-8 上运行应用程序时出现以下错误。我使用的是 Eclipse Luna-32 位、tomcat-8 32 位、Java-8 32 位。 INFO: Starting Servlet
在尝试运行我的项目时,我陷入了一些困惑,收到了如下所示的错误列表。 第一个错误如下所示- 29-Mar-2017 12:59:55.098 SEVERE [http-nio-8080-exec-65]
我想为我的 NetBeans 应用程序添加带有“Spring Security”的身份验证。 如果我向 web.xml 添加下一个代码: org.springframework.web.contex
我在 Java/Spring/ Apache Cxf 上工作网络应用程序,突然间,当我进行了一些明显幼稚的更改时出现错误, 25-Aug-2017 11:48:43.036 INFO [RMI TCP
我在使用 eclipse neon-1 的 tomcat-8 上运行应用程序时遇到此错误,它使用的是 spring-4.3.3、hibernate-5.2.4 和 maven。 嚴重: A child
我得到这个 Tomcat 错误: Sep 09, 2012 4:16:54 PM org.apache.catalina.core.AprLifecycleListener init Informat
我在一个类中有一个变量是 transient 的,因为它不是序列化的,只有当 tomcat 是 org.apache.catalina.core.StandardContext 时重新加载这个相同的变
请帮助我,我以前从未使用过 eclipse IDE。我正在 myeclipse 上开展一个 self 项目。现在我的 eclipse 已经过期了。然后我下载了eclipse indigo。并将我的项目
我的 Spring boot 应用程序在我的 Windows 机器上运行成功,但是当我尝试在 ubuntu 上运行时,它构建失败了。 我的java是1.8. sudo apt-get install
我正尝试在 Tomcat 7 上启动我的 Web 应用程序,但每当我单击启动按钮时,我都会收到此错误: FAIL - Application at context path /Web could no
只是尝试部署 Web 服务 war 文件,但无法使用 apache tomcat 7 进行部署。我尝试了示例 war 文件,它工作正常,只需从浏览器 localhost:8080/sample 访问,
在添加一些 不会 给我编译错误的 Java 程序包后,我的 JSP 应用程序出现此异常。这些包未被使用,但已被添加。 这个异常没有我代码的任何部分,只是 Jersey 或Java库代码,不是我的,所以
无法启动组件 [StandardEngine[Catalina].StandardHost[localhost].StandardContext 最佳答案 1) 转到项目属性 [右键单击项目名称] 2
我已经查看过这个问题,但我不知道如何解决它...许多答案都在谈论 servlet 配置错误,但没有说明如何解决它以及要更改的内容。我的 Catalina 日志文件如下所示: org.apache.
我在网上搜索了答案,但我发现的一切都没有任何帮助。问题是这样的:动态Web项目已转换为maven项目,并将其部署到tomcat7工作得很好,但是在从同一项目构建war文件并尝试运行相同的文件后,我收到
我尝试在 Spring 中使用 Apache Tomcat 7.0 编写一个简单的 hello world 程序。我收到以下错误,服务器进入停止状态。 SEVERE: A child containe
我是一名优秀的程序员,十分优秀!