Spring Boot - logging.file property not having any effect? - spring-boot

I have written an application using Boot 1.0.0.RC1
The default logging configuration output works fine for my needs and according to http://projects.spring.io/spring-boot/docs/spring-boot/README.html I should be able to set the logging.file property in application.properties to specify where the log file will be stored on disk.
This does not seem to have any effect though. My log ends up in /tmp/spring.log
logging.file property is defined in application.properties:
logging.file=/tmp/mylog.log
Output of mvn dependency:tree :
[INFO] +- org.springframework.boot:spring-boot-starter-actuator:jar:1.0.0.RC1:compile
[INFO] | \- org.springframework.boot:spring-boot-actuator:jar:1.0.0.RC1:compile
[INFO] | \- org.hsqldb:hsqldb:jar:2.3.1:compile
[INFO] +- org.springframework.boot:spring-boot-starter:jar:1.0.0.RC1:compile
[INFO] | +- org.springframework.boot:spring-boot:jar:1.0.0.RC1:compile
[INFO] | +- org.springframework.boot:spring-boot-autoconfigure:jar:1.0.0.RC1:compile
[INFO] | \- org.springframework.boot:spring-boot-starter-logging:jar:1.0.0.RC1:compile
[INFO] | +- org.slf4j:jcl-over-slf4j:jar:1.7.5:compile
[INFO] | +- org.slf4j:jul-to-slf4j:jar:1.7.5:compile
[INFO] | +- org.slf4j:log4j-over-slf4j:jar:1.7.5:compile
[INFO] | \- ch.qos.logback:logback-classic:jar:1.0.13:compile
[INFO] | \- ch.qos.logback:logback-core:jar:1.0.13:compile
[INFO] +- org.springframework.boot:spring-boot-starter-security:jar:1.0.0.RC1:compile
[INFO] | +- org.springframework.security:spring-security-config:jar:3.2.0.RELEASE:compile
[INFO] | | +- aopalliance:aopalliance:jar:1.0:compile
[INFO] | | \- org.springframework.security:spring-security-core:jar:3.2.0.RELEASE:compile
[INFO] | +- org.springframework.security:spring-security-web:jar:3.2.0.RELEASE:compile
[INFO] | +- org.springframework:spring-aop:jar:4.0.0.RELEASE:compile
[INFO] | +- org.springframework:spring-beans:jar:4.0.0.RELEASE:compile
[INFO] | +- org.springframework:spring-context:jar:4.0.0.RELEASE:compile
[INFO] | +- org.springframework:spring-core:jar:4.0.0.RELEASE:compile
[INFO] | +- org.springframework:spring-expression:jar:4.0.0.RELEASE:compile
[INFO] | \- org.springframework:spring-web:jar:4.0.0.RELEASE:compile
[INFO] +- org.springframework.boot:spring-boot-starter-web:jar:1.0.0.RC1:compile
[INFO] | +- org.springframework.boot:spring-boot-starter-tomcat:jar:1.0.0.RC1:compile
[INFO] | | +- org.apache.tomcat.embed:tomcat-embed-core:jar:7.0.47:compile
[INFO] | | \- org.apache.tomcat.embed:tomcat-embed-logging-juli:jar:7.0.47:compile
[INFO] | +- com.fasterxml.jackson.core:jackson-databind:jar:2.3.1:compile
[INFO] | | +- com.fasterxml.jackson.core:jackson-annotations:jar:2.3.0:compile
[INFO] | | \- com.fasterxml.jackson.core:jackson-core:jar:2.3.1:compile
[INFO] | \- org.springframework:spring-webmvc:jar:4.0.0.RELEASE:compile
[INFO] +- org.springframework.boot:spring-boot-starter-jdbc:jar:1.0.0.RC1:compile
[INFO] | +- org.springframework:spring-jdbc:jar:4.0.0.RELEASE:compile
[INFO] | +- org.apache.tomcat:tomcat-jdbc:jar:7.0.47:compile
[INFO] | | \- org.apache.tomcat:tomcat-juli:jar:7.0.47:compile
[INFO] | \- org.springframework:spring-tx:jar:4.0.0.RELEASE:compile
[INFO] +- org.thymeleaf:thymeleaf-spring4:jar:2.1.2.RELEASE:compile
[INFO] | +- org.thymeleaf:thymeleaf:jar:2.1.2.RELEASE:compile
[INFO] | | +- ognl:ognl:jar:3.0.6:compile
[INFO] | | \- org.javassist:javassist:jar:3.16.1-GA:compile
[INFO] | \- org.slf4j:slf4j-api:jar:1.7.5:compile
[INFO] +- org.apache.commons:commons-lang3:jar:3.2.1:compile
[INFO] +- mysql:mysql-connector-java:jar:5.1.27:compile
[INFO] +- com.h2database:h2:jar:1.3.175:compile
[INFO] +- javax.validation:validation-api:jar:1.1.0.Final:compile
[INFO] +- org.hibernate:hibernate-validator:jar:5.0.1.Final:compile
[INFO] | +- org.jboss.logging:jboss-logging:jar:3.1.1.GA:compile
[INFO] | \- com.fasterxml:classmate:jar:0.8.0:compile
[INFO] +- org.yaml:snakeyaml:jar:1.13:runtime
[INFO] +- org.springframework.boot:spring-boot-starter-test:jar:1.0.0.RC1:test
[INFO] | \- org.springframework:spring-test:jar:4.0.0.RELEASE:test
[INFO] +- junit:junit:jar:4.11:test
[INFO] | \- org.hamcrest:hamcrest-core:jar:1.3:test
[INFO] +- org.mockito:mockito-core:jar:1.9.5:test
[INFO] | \- org.objenesis:objenesis:jar:1.0:test
[INFO] \- org.hamcrest:hamcrest-library:jar:1.3:test
So logback is on the classpath and picking up the default base.xml configuration from spring-boot.
Shouldn't the logging.file property work out of the box then, or do I need to configure it differently?
I know I can put logback.xml in classpath to configure logback directly that way and possibly include the default springboot logback configuration from base.xml but if I can achieve the same simply setting the logging.file property I would prefer that.
The approach I got working was to specify -DLOG_FILE=logs/output.log when running the embedded Tomcat using java -jar.
However I need to build a war and deploy that in a standalone Tomcat that I do not have access to reconfigure and set environment properties like the LOG_FILE property - so I need to be able to specify the log output using my application.properties.

I updated my pom.xml to use the 1.0.0.BUILD-SNAPSHOT version of Springboot and now it works just fine specifying the logging.file in application.properties.
Can anyone here tell me when (approximately) spring boot 1.0.0.RELEASE is scheduled for?
Cheers
Flemming

Related

maven dependency:list just first level

dependency:list prints entire tree in flat format.
What can I do so it only gives first level only ?
Just to illustrate with dependency:tree
[INFO]
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) # abc-service ---
[INFO] xx.xyz.zbc:abc-service:jar:1.82-SNAPSHOT
[INFO] +- io.swagger.core.v3:swagger-annotations:jar:2.1.2:compile
[INFO] +- org.apache.commons:commons-compress:jar:1.14:test
[INFO] +- org.xmlmatchers:xml-matchers:jar:1.0-RC1:test
[INFO] | +- xmlunit:xmlunit:jar:1.6:test
[INFO] | \- net.sf.saxon:Saxon-HE:jar:9.4:test
[INFO] | +- org.jdom:jdom:jar:1.1:test
[INFO] | +- xom:xom:jar:1.2.5:test
[INFO] | | \- xerces:xercesImpl:jar:2.8.0:test
[INFO] | \- xml-resolver:xml-resolver:jar:1.2:test
I just want
[INFO] +- io.swagger.core.v3:swagger-annotations:jar:2.1.2:compile
[INFO] +- org.apache.commons:commons-compress:jar:1.14:test
[INFO] +- org.xmlmatchers:xml-matchers:jar:1.0-RC1:test
From what I can read in the documentation.
https://maven.apache.org/plugins/maven-dependency-plugin/list-mojo.html
mvn dependency:list -DexcludeTransitive=true

maven dependency are not available in the code

I have imported a maven project in an IntelliJ Idea. Everything seems fine but when no dependencies are found.
I have already tried to reimport the project. tried restarting IntelliJ. mvn Dependency:tree command shows all the dependency available in the pom.
mvn dependency:tree
[INFO] Scanning for projects...
[INFO] gitflow-incremental-builder is disabled.
[INFO]
[INFO] ---------------------< com.baeldung:cascade-type >----------------------
[INFO] Building cascade-type 1.0.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) # cascade-type ---
[INFO] com.baeldung:cascade-type:jar:1.0.0-SNAPSHOT
[INFO] +- org.hibernate:hibernate-core:jar:5.3.7.Final:compile
[INFO] | +- org.jboss.logging:jboss-logging:jar:3.3.2.Final:compile
[INFO] | +- javax.persistence:javax.persistence-api:jar:2.2:compile
[INFO] | +- org.javassist:javassist:jar:3.23.1-GA:compile
[INFO] | +- net.bytebuddy:byte-buddy:jar:1.8.17:compile
[INFO] | +- antlr:antlr:jar:2.7.7:compile
[INFO] | +- org.jboss.spec.javax.transaction:jboss-transaction-api_1.2_spec:jar:1.1.1.Final:compile
[INFO] | +- org.jboss:jandex:jar:2.0.5.Final:compile
[INFO] | +- com.fasterxml:classmate:jar:1.3.4:compile
[INFO] | +- javax.activation:javax.activation-api:jar:1.2.0:compile
[INFO] | +- org.dom4j:dom4j:jar:2.1.1:compile
[INFO] | \- org.hibernate.common:hibernate-commons-annotations:jar:5.0.4.Final:compile
[INFO] +- org.assertj:assertj-core:jar:3.8.0:test
[INFO] +- com.h2database:h2:jar:1.4.197:compile
[INFO] +- org.hibernate:hibernate-validator:jar:5.3.3.Final:compile
[INFO] | \- javax.validation:validation-api:jar:1.1.0.Final:compile
[INFO] +- javax.el:javax.el-api:jar:2.2.5:compile
[INFO] +- org.glassfish:javax.el:jar:3.0.1-b08:compile
[INFO] +- org.slf4j:slf4j-api:jar:1.7.21:compile
[INFO] +- ch.qos.logback:logback-classic:jar:1.1.7:compile
[INFO] +- ch.qos.logback:logback-core:jar:1.1.7:compile
[INFO] +- org.slf4j:jcl-over-slf4j:jar:1.7.21:compile
[INFO] +- junit:junit:jar:4.12:test
[INFO] +- org.junit.jupiter:junit-jupiter-engine:jar:5.4.2:test
[INFO] | +- org.apiguardian:apiguardian-api:jar:1.0.0:test
[INFO] | \- org.junit.platform:junit-platform-engine:jar:1.4.2:test
[INFO] +- org.junit.jupiter:junit-jupiter-params:jar:5.4.2:test
[INFO] +- org.junit.jupiter:junit-jupiter-api:jar:5.4.2:test
[INFO] | +- org.opentest4j:opentest4j:jar:1.1.1:test
[INFO] | \- org.junit.platform:junit-platform-commons:jar:1.4.2:test
[INFO] +- org.hamcrest:hamcrest-core:jar:1.3:test
[INFO] +- org.hamcrest:hamcrest-library:jar:1.3:test
[INFO] +- org.hamcrest:hamcrest-all:jar:1.3:test
[INFO] +- org.mockito:mockito-core:jar:2.21.0:test
[INFO] | +- net.bytebuddy:byte-buddy-agent:jar:1.8.15:test
[INFO] | \- org.objenesis:objenesis:jar:2.6:test
[INFO] \- org.apache.maven.surefire:surefire-logger-api:jar:2.22.0:test
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.583 s
[INFO] Finished at: 2019-05-25T13:52:34+02:00
I am not able to use any classes from any of dependency. Any help would be appreciated.

make org.springframework.security.oauth use com.fasterxml.jackson not org.codehouse.jackson

I have Spring project which uses org.springframework.security.oauth, spring-boot-starter-data-rest and spring-boot-starter-web.
Everything works well but I want to exclude some fields from domain objects using #JsonIgnore annotation. This doesn't work. I checked both:
com.fasterxml.jackson.annotation.JsonIgnore and org.codehaus.jackson.annotate.JsonIgnore
My mvn dependency:tree shows:
[INFO] +- org.springframework.boot:spring-boot-starter-data-rest:jar:1.5.9.RELEASE:compile
[INFO] | +- com.fasterxml.jackson.core:jackson-annotations:jar:2.8.0:compile
and
[INFO] org.springframework:na-punkty-data-rest:war:0.1.0
[INFO] +- org.springframework.boot:spring-boot-starter-web:jar:1.5.9.RELEASE:compile
[INFO] | +- org.springframework.boot:spring-boot-starter:jar:1.5.9.RELEASE:compile
[INFO] | | +- org.springframework.boot:spring-boot:jar:1.5.9.RELEASE:compile
[INFO] | | +- org.springframework.boot:spring-boot-autoconfigure:jar:1.5.9.RELEASE:compile
[INFO] | | +- org.springframework.boot:spring-boot-starter-logging:jar:1.5.9.RELEASE:compile
[INFO] | | | +- ch.qos.logback:logback-classic:jar:1.1.11:compile
[INFO] | | | | \- ch.qos.logback:logback-core:jar:1.1.11:compile
[INFO] | | | +- org.slf4j:jul-to-slf4j:jar:1.7.25:compile
[INFO] | | | \- org.slf4j:log4j-over-slf4j:jar:1.7.25:compile
[INFO] | | \- org.yaml:snakeyaml:jar:1.17:runtime
[INFO] | +- org.hibernate:hibernate-validator:jar:5.3.6.Final:compile
[INFO] | | +- javax.validation:validation-api:jar:1.1.0.Final:compile
[INFO] | | +- org.jboss.logging:jboss-logging:jar:3.3.1.Final:compile
[INFO] | | \- com.fasterxml:classmate:jar:1.3.4:compile
[INFO] | +- com.fasterxml.jackson.core:jackson-databind:jar:2.8.10:compile
[INFO] | | \- com.fasterxml.jackson.core:jackson-core:jar:2.8.10:compile
and
[INFO] +- org.springframework.security.oauth:spring-security-oauth2:jar:2.0.11.RELEASE:compile
[INFO] | +- org.springframework:spring-beans:jar:4.3.13.RELEASE:compile
[INFO] | +- org.springframework:spring-core:jar:4.3.13.RELEASE:compile
[INFO] | +- org.springframework:spring-context:jar:4.3.13.RELEASE:compile
[INFO] | +- org.springframework.security:spring-security-core:jar:4.2.3.RELEASE:compile
[INFO] | | \- aopalliance:aopalliance:jar:1.0:compile
[INFO] | +- commons-codec:commons-codec:jar:1.10:compile
[INFO] | \- org.codehaus.jackson:jackson-mapper-asl:jar:1.9.13:compile
[INFO] | \- org.codehaus.jackson:jackson-core-asl:jar:1.9.13:compile
I am not using any classes from org.codehaus or com.fasterxml directly in my code (I only try to use it with #JsonIgnore in one place). In my opinion I should get rid of doubling implementation and make oAuth use com.fasterxml. But I am not sure is it a good path and how to achieve it?
I tried to build https://spring.io/guides/gs/accessing-data-rest/ and use #JsonIgnore and it works there, but the mvn dependency:tree shows only one implementation for jackson mapper there (com.fasterxml).
Can anyone help me please?
Good evening,
I found the reason why #JsonIgnore didn't work. It was a typo :(
I had private field starting from a capital letter:
#JsonIgnore
private String Roles;
after changing it to
#JsonIgnore
private String roles;
it started working. Of course I had to use proper #JsonIgnore implementation, in this case it was com.fasterxml.jackson.annotation.JsonIgnore
Sorry for posting this question. Everyting works good there. I was blind.
The artefact jackson-mapper-asl belongs to Jackson 1 ("Codehaus"). To switch to jackson-databind you have to use Jackson 2 ("FasterXML").
In this specific situation, the dependency is brought in transitively by spring-security-oauth. Therefore you have to upgrade to version 2.4.0 - yet to be released on 2019-11-07.
The upgrade of Jackson 1 to 2 is done in this Github issue.

Standalone Spring app ( jar) conflicting with other web apps on weblogic 10

I have a standalone spring app that contains mainly aspecj aspects and few other spring managed beans and bundled in a jar with maven-assembly plugin with all the spring dependencies bundled inside the jar and added to weblogic classpath.
the goal is to have he aspects inside the library woven into all the running applications inside weblogic in run time using aspectJ agent.
The problem is that when I add my jar file in the classpath and restart the server I get ClassNotFoundException when the existing web app is deployed.
I know it is not a jar file not in the lib folder, since the app deploys fine without my jar file in classpath.
Note: I also get classNotFoundException when I just drop the spring jar files in the domain/lib folder.
Can you shade some light on why the running applications are impacted by my spring based library?
Please see stacktrace below: i m pretty sure javax.validation.ValidatorFactory is in the validation-api inside the WEB-INF\lib folder. as i only get this exception when I add my custom jar file to weblogic classpath.
Caused By: org.springframework.beans.factory.CannotLoadBeanClassException: Error loading class [org.springframework.validation.beanvalidation.LocalValidatorFactoryBean] for bean with name 'jsr303Validator' defined in ServletContext resource [/WEB-INF/config/webmvc-config.xml]: problem with class file or dependent class; nested exception is java.lang.NoClassDefFoundError: javax/validation/ValidatorFactory
at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1272)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.predictBeanType(AbstractAutowireCapableBeanFactory.java:578)
at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:1338)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doGetBeanNamesForType(DefaultListableBeanFactory.java:356)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType(DefaultListableBeanFactory.java:335)
at org.springframework.beans.factory.BeanFactoryUtils.beanNamesForTypeIncludingAncestors(BeanFactoryUtils.java:187)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:895)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:853)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:768)
at org.s
Caused By: java.lang.ClassNotFoundException: javax.validation.ValidatorFactory
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java
Here is the dependency tree of my WAR file.
[INFO] [dependency:tree {execution: default-cli}]
[INFO] com.company.project:eCom4jWeb:war:1.0.0-SNAPSHOT
[INFO] +- com.company.project:eCom4jCore:jar:1.0.0-SNAPSHOT:compile
[INFO] | +- org.springframework:spring-jdbc:jar:3.1.2.RELEASE:compile
[INFO] | +- org.hsqldb:com.springsource.org.hsqldb:jar:1.8.0.9:runtime
[INFO] | +- mysql:mysql-connector-java:jar:5.1.9:compile
[INFO] | +- org.hibernate:com.springsource.org.hibernate:jar:3.3.2.GA:compile
[INFO] | | +- net.sourceforge.cglib:com.springsource.net.sf.cglib:jar:2.2.0:compile
[INFO] | | +- org.antlr:com.springsource.antlr:jar:2.7.6:compile
[INFO] | | +- org.apache.commons:com.springsource.org.apache.commons.collections:jar:3.2.1:compile
[INFO] | | +- org.dom4j:com.springsource.org.dom4j:jar:1.6.1:compile
[INFO] | | +- org.jboss.javassist:com.springsource.javassist:jar:3.9.0.GA:compile
[INFO] | | \- org.objectweb.asm:com.springsource.org.objectweb.asm:jar:1.5.3:compile
[INFO] | +- org.hibernate:com.springsource.org.hibernate.annotations:jar:3.4.0.GA:compile
[INFO] | | \- org.hibernate:com.springsource.org.hibernate.annotations.common:jar:3.3.0.ga:compile
[INFO] | +- org.hibernate:hibernate-validator:jar:4.2.0.Final:compile
[INFO] | | +- javax.validation:validation-api:jar:1.0.0.GA:compile
[INFO] | | \- org.slf4j:slf4j-api:jar:1.6.1:compile
[INFO] | +- javax.transaction:com.springsource.javax.transaction:jar:1.1.0:compile
[INFO] | +- commons-beanutils:commons-beanutils:jar:1.8.3:compile
[INFO] | +- net.sf.dozer:dozer:jar:5.3.1:compile
[INFO] | \- org.apache.xmlbeans:xmlbeans:jar:2.4.0:runtime
[INFO] | \- stax:stax-api:jar:1.0.1:runtime
[INFO] +- com.company.project:eCom4jWS:jar:1.0.0-SNAPSHOT:compile
[INFO] | +- com.company.project:eCom4jRemixDomain:jar:1.0.0-SNAPSHOT:compile
[INFO] | | \- org.jvnet.jaxb2_commons:jaxb2-basics-runtime:jar:0.6.2:compile
[INFO] | \- org.springframework:spring-oxm:jar:3.1.2.RELEASE:compile
[INFO] +- javax.servlet:jstl:jar:1.2:compile
[INFO] +- org.springframework.security:spring-security-web:jar:3.1.2.RELEASE:compile
[INFO] | \- aopalliance:aopalliance:jar:1.0:compile
[INFO] +- org.springframework.security:spring-security-taglibs:jar:3.1.2.RELEASE:compile
[INFO] | \- org.springframework.security:spring-security-acl:jar:3.1.2.RELEASE:compile
[INFO] +- org.springframework:spring-webmvc:jar:3.1.2.RELEASE:compile
[INFO] | +- org.springframework:spring-asm:jar:3.1.2.RELEASE:compile
[INFO] | \- org.springframework:spring-context-support:jar:3.1.2.RELEASE:compile
[INFO] +- javax.servlet:servlet-api:jar:2.5:provided
[INFO] +- org.springframework:spring-beans:jar:3.1.2.RELEASE:compile
[INFO] +- org.springframework.webflow:spring-binding:jar:2.2.1.RELEASE:compile
[INFO] +- org.springframework.webflow:spring-js:jar:2.2.1.RELEASE:compile
[INFO] | \- org.springframework.webflow:spring-js-resources:jar:2.2.1.RELEASE:compile
[INFO] +- org.springframework.webflow:spring-webflow:jar:2.2.1.RELEASE:compile
[INFO] +- org.springframework.security:spring-security-config:jar:3.1.2.RELEASE:compile
[INFO] +- org.springframework.security:spring-security-core:jar:3.1.2.RELEASE:compile
[INFO] +- org.springframework:spring-tx:jar:3.1.2.RELEASE:compile
[INFO] +- org.springframework:spring-web:jar:3.1.2.RELEASE:compile
[INFO] +- org.springframework:spring-aop:jar:3.1.2.RELEASE:compile
[INFO] +- commons-logging:commons-logging:jar:1.1.1:compile
[INFO] +- org.springframework:spring-core:jar:3.1.2.RELEASE:compile
[INFO] +- org.springframework:spring-orm:jar:3.1.2.RELEASE:compile
[INFO] +- org.springframework:spring-context:jar:3.1.2.RELEASE:compile
[INFO] +- javax.el:el-api:jar:1.0:provided
[INFO] +- org.jboss.el:com.springsource.org.jboss.el:jar:2.0.0.GA:compile
[INFO] +- org.apache.tiles:tiles-core:jar:2.1.4:compile
[INFO] | +- commons-digester:commons-digester:jar:1.8.1:compile
[INFO] | \- commons-logging:commons-logging-api:jar:1.1:compile
[INFO] +- org.apache.tiles:tiles-jsp:jar:2.1.4:compile
[INFO] +- org.apache.tiles:tiles-api:jar:2.1.4:compile
[INFO] +- org.apache.tiles:tiles-servlet:jar:2.1.4:compile
[INFO] +- org.springframework:spring-test:jar:3.1.2.RELEASE:test
[INFO] +- org.springframework:spring-expression:jar:3.1.2.RELEASE:compile
[INFO] +- org.springframework:spring-test-mvc:jar:1.0.0.BUILD-SNAPSHOT:test
[INFO] +- org.powermock:powermock-module-junit4:jar:1.4.12:test
[INFO] | \- org.powermock:powermock-module-junit4-common:jar:1.4.12:test
[INFO] | +- org.powermock:powermock-core:jar:1.4.12:test
[INFO] | | \- org.javassist:javassist:jar:3.16.1-GA:test
[INFO] | \- org.powermock:powermock-reflect:jar:1.4.12:test
[INFO] +- org.powermock:powermock-api-easymock:jar:1.4.12:test
[INFO] | \- org.powermock:powermock-api-support:jar:1.4.12:test
[INFO] +- org.codehaus.jackson:jackson-mapper-asl:jar:1.5.3:compile
[INFO] | \- org.codehaus.jackson:jackson-core-asl:jar:1.5.3:compile
[INFO] +- com.jayway.jsonpath:json-path:jar:0.8.1:test
[INFO] | \- net.minidev:json-smart:jar:1.1.1:test
[INFO] +- org.aspectj:com.springsource.org.aspectj.weaver:jar:1.6.8.RELEASE:compile
[INFO] +- org.slf4j:com.springsource.slf4j.api:jar:1.5.6:compile
[INFO] +- org.slf4j:com.springsource.slf4j.org.apache.commons.logging:jar:1.5.6:runtime
[INFO] +- org.slf4j:com.springsource.slf4j.log4j:jar:1.5.6:runtime
[INFO] +- org.apache.log4j:com.springsource.org.apache.log4j:jar:1.2.15:compile
[INFO] +- org.apache.commons:com.springsource.org.apache.commons.dbcp:jar:1.2.2.osgi:runtime
[INFO] +- org.apache.commons:com.springsource.org.apache.commons.pool:jar:1.5.3:runtime
[INFO] +- org.hamcrest:hamcrest-all:jar:1.3:compile
[INFO] +- junit:junit:jar:4.8.1:test (scope not updated to compile)
[INFO] +- org.easymock:easymock:jar:3.1:test
[INFO] | +- cglib:cglib-nodep:jar:2.2.2:test
[INFO] | \- org.objenesis:objenesis:jar:1.2:test
[INFO] +- commons-lang:commons-lang:jar:2.6:compile
[INFO] +- org.apache.struts:struts2-core:jar:2.2.1:compile
[INFO] | +- org.apache.struts.xwork:xwork-core:jar:2.2.1:compile
[INFO] | +- org.freemarker:freemarker:jar:2.3.16:compile
[INFO] | +- ognl:ognl:jar:3.0:compile
[INFO] | +- commons-fileupload:commons-fileupload:jar:1.2.1:compile
[INFO] | +- commons-io:commons-io:jar:1.3.2:compile
[INFO] | \- com.sun:tools:jar:1.5.0:system
[INFO] +- org.apache.struts:struts2-tiles-plugin:jar:2.2.1:compile
[INFO] +- org.apache.struts:struts2-spring-plugin:jar:2.2.1:compile
[INFO] +- javax.mail:mail:jar:1.4:compile
[INFO] | \- javax.activation:activation:jar:1.1:compile
[INFO] \- net.tanesha.recaptcha4j:recaptcha4j:jar:0.0.7:compile
[INFO] -------
Thanks
If you are using maven to build your jar, try to build your jar file with the dependencies embedded and test it, the below link can help you to do so:
How can I create an executable JAR with dependencies using Maven?
The dependency tree shows:
two versions of commons-logging: 1.1 and 1.1.1
two versions of slf4j: 1.5.6 and 1.6.1
javax.transaction has scoped compiled instead of provided
various versions of Hibernate artifacts from different sources org.hibernate:com.springsource.org.hibernate:jar:3.3.2.GA:compile org.hibernate:com.springsource.org.hibernate.annotations:jar:3.4.0.GA:compile org.hibernate:hibernate-validator:jar:4.2.0.Final:compile
As ClassLoader loads resources without any determined or predefined order, adding a jar file may have changed this order and class conflicts are now visible - either inside the EAR/WAR itself or between the application server and the application.
It is not obvious to point the conflict source with information provided but it is probably org.hibernate:hibernate-validator and you should align its version with core package, so 3.3.2.GA from com.springsource too.
To get the diagnostic clear, run WebLogic JVM with -verbose:class option and look at stderr output. The latest loaded resources before the failure and log of previously loaded related classes are the best clues to eliminate such a conflict created by packaging.
If conflict comes from a application server package and you cannot align to that same version, WebLogic allows you to set class loading filtering by package to force your own version to be loaded. Please refer to section Using a Filtering Classloader from classloading documentation.
It sounds like a Jar Hell... If you have different versions of the same jar, your container only loads the first one... now, imagine if it loads version 5 of jar 1, and version 2 of the dependent jar 2 (but the correct was version 5 too)... and can get a big crash in your system... to prevent it, some container just don't load none versions, and give some messages like ClassNotFoundException.

Unbelievable: Cannot cast from class X to its super class

I'm encountering a very weird problem with Spring (3.0.1.RELEASE), TestNG (5.11) and Maven Surefire (2.5).
I have a test class that extends a Spring helper class for testNG so that the test context can be loaded from an xml file (that contains some bean definitions).
My project was imported into eclipse using m2eclipse (using Import Maven Project).
The class runs fine in Eclipse TestNG runner.
However, it throws this exception with Maven Surefire:
Caused by: java.lang.ClassCastException: com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl cannot be cast to javax.xml.parsers.DocumentBuilderFactory
at javax.xml.parsers.DocumentBuilderFactory.newInstance(DocumentBuilderFactory.java:123)
at org.springframework.beans.factory.xml.DefaultDocumentLoader.createDocumentBuilderFactory(DefaultDocumentLoader.java:89)
at org.springframework.beans.factory.xml.DefaultDocumentLoader.loadDocument(DefaultDocumentLoader.java:70)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:388)
I have eliminated all involved dependencies in my pom so that the two classes
com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl and
javax.xml.parsers.DocumentBuilderFactory are coming from JRE only (the rt.jar).
So, it looks so unbelievable to me.
I wonder if there is any mechanism in loading class that can explain for this behavior?
Thanks.
Updated: Here is my dependency tree:
[INFO] org.seamoo:seamoo-webapp:war:1.0-SNAPSHOT
[INFO] +- com.google.appengine:appengine-api-1.0-sdk:jar:1.3.1:compile
[INFO] +- com.google.gwt:gwt-servlet:jar:2.0.3:compile
[INFO] +- com.google.gwt:gwt-user:jar:2.0.3:provided
[INFO] +- org.apache.geronimo.specs:geronimo-servlet_2.5_spec:jar:1.2:provided
[INFO] +- org.slf4j:slf4j-api:jar:1.5.6:compile
[INFO] +- ch.qos.logback:logback-classic:jar:0.9.15:compile
[INFO] | \- ch.qos.logback:logback-core:jar:0.9.15:compile
[INFO] +- org.springframework:spring-webmvc:jar:3.0.1.RELEASE:compile
[INFO] | +- org.springframework:spring-asm:jar:3.0.1.RELEASE:compile
[INFO] | +- org.springframework:spring-beans:jar:3.0.1.RELEASE:compile
[INFO] | +- org.springframework:spring-context:jar:3.0.1.RELEASE:compile
[INFO] | | \- org.springframework:spring-aop:jar:3.0.1.RELEASE:compile
[INFO] | +- org.springframework:spring-core:jar:3.0.1.RELEASE:compile
[INFO] | | \- commons-logging:commons-logging:jar:1.1.1:compile
[INFO] | +- org.springframework:spring-expression:jar:3.0.1.RELEASE:compile
[INFO] | \- org.springframework:spring-web:jar:3.0.1.RELEASE:compile
[INFO] | \- aopalliance:aopalliance:jar:1.0:compile
[INFO] +- org.springframework:spring-context-support:jar:3.0.1.RELEASE:compile
[INFO] +- org.apache.tiles:tiles-jsp:jar:2.1.4:compile
[INFO] | \- org.apache.tiles:tiles-servlet:jar:2.1.4:compile
[INFO] +- org.apache.tiles:tiles-portlet:jar:2.1.4:compile
[INFO] | \- org.apache.tiles:tiles-core:jar:2.1.4:compile
[INFO] | +- org.apache.tiles:tiles-api:jar:2.1.4:compile
[INFO] | +- commons-digester:commons-digester:jar:1.8.1:compile
[INFO] | | \- commons-beanutils:commons-beanutils:jar:1.8.0:compile
[INFO] | \- commons-logging:commons-logging-api:jar:1.1:compile
[INFO] +- org.apache.tomcat:jasper-el:jar:6.0.26:compile
[INFO] | \- org.apache.tomcat:el-api:jar:6.0.26:compile
[INFO] +- org.freemarker:freemarker:jar:2.3.16:compile
[INFO] +- org.tuckey:urlrewritefilter:jar:3.1.0:compile
[INFO] +- org.seamoo.utils:converter:jar:0.1:compile
[INFO] +- junit:junit:jar:4.6:test
[INFO] +- org.springframework:spring-test:jar:3.0.1.RELEASE:test
[INFO] +- org.testng:testng:jar:jdk15:5.11:test
[INFO] +- net.sourceforge.htmlunit:htmlunit:jar:2.7:test
[INFO] | +- commons-collections:commons-collections:jar:3.2.1:test
[INFO] | +- commons-lang:commons-lang:jar:2.4:test
[INFO] | +- commons-httpclient:commons-httpclient:jar:3.1:test
[INFO] | +- commons-codec:commons-codec:jar:1.4:test
[INFO] | +- net.sourceforge.htmlunit:htmlunit-core-js:jar:2.7:test
[INFO] | +- net.sourceforge.nekohtml:nekohtml:jar:1.9.14:test
[INFO] | +- net.sourceforge.cssparser:cssparser:jar:0.9.5:test
[INFO] | | \- org.w3c.css:sac:jar:1.3:test
[INFO] | \- commons-io:commons-io:jar:1.4:test
[INFO] +- org.jbehave:jbehave-core:jar:2.5:test
[INFO] | +- junit:junit-dep:jar:4.4:test
[INFO] | \- org.hamcrest:hamcrest-all:jar:1.1:test
[INFO] +- org.mockito:mockito-all:jar:1.8.4:test
[INFO] +- org.powermock.modules:powermock-module-testng:jar:1.3.7:test
[INFO] | \- org.powermock:powermock-core:jar:1.3.7:test
[INFO] | +- org.powermock.reflect:powermock-reflect:jar:1.3.7:test
[INFO] | | \- org.objenesis:objenesis:jar:1.2:test
[INFO] | \- javassist:javassist:jar:3.10.0.GA:test
[INFO] +- org.powermock.api:powermock-api-mockito:jar:1.3.7:test
[INFO] | \- org.powermock.api:powermock-api-support:jar:1.3.7:test
[INFO] +- org.workingonit:gwtbridge:jar:0.1:compile
[INFO] +- org.seleniumhq.selenium.client-drivers:selenium-java-testng-helper:jar:1.0.1:test
[INFO] | \- org.seleniumhq.selenium.client-drivers:selenium-java-client-driver:jar:1.0.1:test
[INFO] +- com.dyuproject:dyuproject-util:jar:1.1-SNAPSHOT:compile
[INFO] +- com.dyuproject:dyuproject-openid:jar:1.1-SNAPSHOT:compile
[INFO] +- org.mortbay.jetty:jetty-util:jar:6.1.22:compile
[INFO] +- org.seamoo:seamoo-model:jar:1.0-SNAPSHOT:compile
[INFO] | +- javax.jdo:jdo2-api:jar:2.3-eb:compile
[INFO] | +- javax.transaction:jta:jar:1.1:compile
[INFO] | \- com.google.appengine:geronimo-jpa_3.0_spec:jar:1.1.1:compile
[INFO] +- org.seamoo:seamoo-persistence:jar:1.0-SNAPSHOT:compile
[INFO] | +- com.google.appengine.orm:datanucleus-appengine:jar:1.0.5.final:compile
[INFO] | +- org.datanucleus:datanucleus-core:jar:1.1.5:compile
[INFO] | \- com.google.appengine:datanucleus-jpa:jar:1.1.5:runtime
[INFO] +- org.seamoo:seamoo-theme:jar:1.0-SNAPSHOT:compile
[INFO] \- org.seamoo:seamoo-test-resources:jar:1.0-SNAPSHOT:test
[INFO] +- com.google.appengine:appengine-api-labs:jar:1.3.1:test
[INFO] +- com.google.appengine:appengine-api-stubs:jar:1.3.1:test
[INFO] \- com.google.appengine:appengine-testing:jar:1.3.1:test
I can sure that I have eliminate all possible jars because when I use Open Type feature of Eclipse, it suggests only 1 class for each of DocumentBuilderFactory and DocumentBuilderFactoryImpl
I had a similar problem with DocumentBuilderFactoryImpl. I also initially assumed the cause was a conflict in the classpath, but it was actually a result of PowerMock creating an instrumented version of the class (and having two incompatible versions of the class in the classloader). I had no luck using the #PowerMockIgnore, but eventually fixed the problem by moving any object using JAXP into non-static methods (e.g. using #Before and not #BeforeClass to instantiate the object).
You're most likely hitting a classloader problem. Run the tests with -verbose:class to see where the classes are loaded from.
I had the same problem with SAXParserFactoryImpl and Powemock.
javax.xml.parsers.FactoryConfigurationError: Provider com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl could not be instantiated: java.lang.ClassCastException: com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl cannot be cast to javax.xml.parsers.SAXParserFactory
I was able to fix the problem by ignoring respective classes from Powermock like this:
#PowerMockIgnore({ "org.apache.xerces.*", "javax.xml.parsers.*", "org.xml.sax.*" })
Alternative of
#PowerMockIgnore({ "org.apache.xerces.*", "javax.xml.parsers.*", "org.xml.sax.*" })
is creation configuration.properties file in test/resources/org/powermock/extensions/ with content:
powermock.global-ignore=org.apache.xerces.*,javax.xml.parsers.*,org.xml.sax.*
Note: Comma separation and NO spaces in the property value, otherwise, it will not work!
The list of packages depends on the dependencies of your project.

Resources