2013-07-19 2 views
1

Karaf 내부의 Camel 경로에서 JPA를 사용하여 mysql 데이터베이스를 읽고 쓰는 간단한 사용 사례를 시도하고있다.Karaf 내부에서 org.apache.openjpa.lib.xml.XMLFactory의 NoClassDefFoundError

2013-07-19 17:01:47,178 | WARN | ft.WorkoutEntity | JpaConsumer | rg.apache.camel.util.CamelLogger 224 | 68 - org.apache.camel.camel-core - 2.10.4 | Consumer Consumer[jpa://WorkoutEntity] failed polling endpoint: Endpoint[jpa://WorkoutEntity]. Will try again at next poll. Caused by: [java.lang.NoClassDefFoundError - Could not initialize class org.apache.openjpa.lib.xml.XMLFactory] java.lang.NoClassDefFoundError: Could not initialize class org.apache.openjpa.lib.xml.XMLFactory at org.apache.openjpa.jdbc.sql.SQLErrorCodeReader.parse(SQLErrorCodeReader.java:107) at org.apache.openjpa.jdbc.sql.DBDictionary.endConfiguration(DBDictionary.java:4712) at org.apache.openjpa.lib.conf.Configurations.configureInstance(Configurations.java:518) at org.apache.openjpa.lib.conf.Configurations.configureInstance(Configurations.java:443) at org.apache.openjpa.jdbc.sql.DBDictionaryFactory.newDBDictionary(DBDictionaryFactory.java:199) at org.apache.openjpa.jdbc.sql.DBDictionaryFactory.newDBDictionary(DBDictionaryFactory.java:100)

XMLFactory 나의 번들 수입 않은는 OpenJPA 집계 번들에 포함되어 있습니다 : 낙타가 경로를 포함 내 코드를로드 할 때 자주/항상 다음 스택 트레이스가 발생합니다. 동일한 org.apache.openjpa.lib.xml 패키지에서 다른 객체를 인스턴스화 할 수도 있습니다.

opensource OpenJPA 코드를 열어서 XMLFactory를 살펴 보았습니다. 맨 위에는 클래스가로드 될 때 호출되어야하는 정적 블록이 있습니다. 정적 블록은 SAX 및 DOM 파서 팩토리를 인스턴스화하는 것만 큼 복잡하지는 않습니다.

org.apache.openjpa.lib.xml.XMLFactory.getClass()

이 클래스는 클래스 로더에로드하려면, 가끔이 중지 오류 :

는 경우, 경로를 포함 내 자바 코드에서, 나는 다음 줄을 추가합니다. 여기

은 일부 버전 정보입니다 :

Karaf => 2.3.2

낙타 => 2.10.4 및 2.11.1을 시도

는 OpenJPA => 2.2.0과 2.2.2

을 시도

MySQL은 => 5.1.25

당신이 더 많은 정보가 필요하면 알려주세요.

- 새로운 Info- 나는 karaf 프롬프트에서 DEBUG 수준 로깅을 설정하고 지금 NoClassDefError

2013-07-19 17:35:36,784 | DEBUG | ft.WorkoutEntity | TransactionTemplate | tion.support.TransactionTemplate 160 | 75 - org.springframework.transaction - 3.2.3.RELEASE | Initiating transaction rollback on application exception javax.xml.parsers.FactoryConfigurationError: Provider org.apache.xerces.jaxp.SAXParserFactoryImpl not found at javax.xml.parsers.SAXParserFactory.newInstance(SAXParserFactory.java:122)[:2.2.0] at org.apache.openjpa.lib.xml.XMLFactory.(XMLFactory.java:60) at org.apache.openjpa.jdbc.sql.SQLErrorCodeReader.parse(SQLErrorCodeReader.java:107) at org.apache.openjpa.jdbc.sql.DBDictionary.endConfiguration(DBDictionary.java:4712) at org.apache.openjpa.lib.conf.Configurations.configureInstance(Configurations.java:518) at org.apache.openjpa.lib.conf.Configurations.configureInstance(Configurations.java:443) at org.apache.openjpa.jdbc.sql.DBDictionaryFactory.newDBDictionary(DBDictionaryFactory.java:199) at org.apache.openjpa.jdbc.sql.DBDictionaryFactory.newDBDictionary(DBDictionaryFactory.java:100) at org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl.getDBDictionaryInstance(JDBCConfigurationImpl.java:603)

이것은 NoClassDefFound 오류를 설명하기 전에이 오류를 참조하십시오.

답변

0

아마도 xerces가 설치되어 있지 않은 것입니다.

받는다는에서 그 종속성을 설치하십시오 :

osgi:install wrap:mvn:xml-apis/xml-apis/1.4.01 
osgi:install wrap:mvn:xml-resolver/xml-resolver/1.2 
osgi:install wrap:mvn:xerces/xercesImpl/2.11.0 
+0

큰 일했다, 감사합니다! –

+0

어. OSGi 번들은 누락 된 번들로 인해 NoClassDefFoundError를 던져서는 안됩니다. –