2013-02-08 2 views
1

Java 프로그램을 WinRun4J를 사용하여 Windows 서비스로 실행하려고합니다. 서비스가 제대로 만들어 그것 때문에 ClassNotFoundException가의 정지 할 때까지 실행 :WinRun4J - 라이브러리 jar를로드 할 수 없습니다.

org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Failed to import bean definitions from relative location [appContext-webServices.xml] 
Offending resource: class path resource [spring/appContext.xml]; nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from class path resource [spring/appContext-webServices.xml]; nested exception is java.lang.RuntimeException: javax.xml.bind.JAXBException 
- with linked exception: 
[java.lang.ClassNotFoundException: com/sun/xml/bind/v2/ContextFactory] 
at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:68) 
at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:85) 
at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:76) 
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.importBeanDefinitionResource(DefaultBeanDefinitionDocumentReader.java:271) 
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseDefaultElement(DefaultBeanDefinitionDocumentReader.java:196) 
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:181) 
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:140) 
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:111) 
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:493) 
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:390) 
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334) 
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302) 
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:174) 
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:209) 
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:180) 
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:243) 
at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:127) 
at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:93) 
at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:131) 
at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:522) 
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:436) 
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139) 
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83) 
at br.com.gep.sped.extrator.AppServico.serviceMain(AppServico.java:22) 
Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from class path resource  [spring/appContext-webServices.xml]; nested exception is java.lang.RuntimeException: javax.xml.bind.JAXBException 
- with linked exception: 
[java.lang.ClassNotFoundException: com/sun/xml/bind/v2/ContextFactory] 
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:412) 
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334) 
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302) 
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.importBeanDefinitionResource(DefaultBeanDefinitionDocumentReader.java:255) 
... 20 common frames omitted 
Caused by: java.lang.RuntimeException: javax.xml.bind.JAXBException 
- with linked exception: 
[java.lang.ClassNotFoundException: com/sun/xml/bind/v2/ContextFactory] 
at org.apache.cxf.configuration.spring.AbstractBeanDefinitionParser.getContext(AbstractBeanDefinitionParser.java:326) 
at org.apache.cxf.configuration.spring.AbstractBeanDefinitionParser.mapElementToJaxbProperty(AbstractBeanDefinitionParser.java:352) 
at org.apache.cxf.configuration.spring.AbstractBeanDefinitionParser.mapElementToJaxbProperty(AbstractBeanDefinitionParser.java:294) 
at org.apache.cxf.transport.http.spring.HttpConduitBeanDefinitionParser.doParse(HttpConduitBeanDefinitionParser.java:58) 
at org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser.parseInternal(AbstractSingleBeanDefinitionParser.java:85) 
at org.springframework.beans.factory.xml.AbstractBeanDefinitionParser.parse(AbstractBeanDefinitionParser.java:59) 
at org.springframework.beans.factory.xml.NamespaceHandlerSupport.parse(NamespaceHandlerSupport.java:73) 
at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1419) 
at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1409) 
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:184) 
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:140) 
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:111) 
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:493) 
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:390) 
... 23 common frames omitted 
Caused by: javax.xml.bind.JAXBException: null 
at javax.xml.bind.ContextFinder.newInstance(Unknown Source) 
at javax.xml.bind.ContextFinder.find(Unknown Source) 
at javax.xml.bind.JAXBContext.newInstance(Unknown Source) 
at org.apache.cxf.common.jaxb.JAXBContextCache$2.run(JAXBContextCache.java:267) 
at org.apache.cxf.common.jaxb.JAXBContextCache$2.run(JAXBContextCache.java:265) 
at java.security.AccessController.doPrivileged(Native Method) 
at org.apache.cxf.common.jaxb.JAXBContextCache.createContext(JAXBContextCache.java:265) 
at org.apache.cxf.common.jaxb.JAXBContextCache.getCachedContextAndSchemas(JAXBContextCache.java:172) 
at org.apache.cxf.configuration.spring.AbstractBeanDefinitionParser.getContext(AbstractBeanDefinitionParser.java:321) 
... 36 common frames omitted 
Caused by: java.lang.ClassNotFoundException: com/sun/xml/bind/v2/ContextFactory 
at java.lang.Class.forName0(Native Method) 
at java.lang.Class.forName(Unknown Source) 
at javax.xml.bind.ContextFinder.safeLoadClass(Unknown Source) 
... 45 common frames omitted  

나는 WinRun4J은 lib 폴더에있는 내 lib 디렉토리 항아리를로드하지 않습니다 생각한다. 디렉토리 작업 내 응용 프로그램은 다음과 같이이다 :

application directory 
    -> bin directory 
    -> lib directory 

주 응용 프로그램 항아리 bin 폴더에, 다른 항아리 lib 폴더에 있습니다. 이 WinRun4J에서 사용하는 내 servico.ini 파일입니다 :

vm.version.min=1.6 
single.instance=process 
service.class=br.com.gep.sped.extrator.AppServico 
service.id=AgenteWIN 
service.name=Agente Win 
service.description=Agente de extração dos dados SPED. 
classpath.1=*.jar 
classpath.2=../lib/*.jar 
vmarg.1=-Xmn100M 
vmarg.2=-Xms500M 
vmarg.3=-Xmx500M 

내가 성공하지 classpath.2의 변화를 많이 tryied했습니다.
내가 뭘 잘못하고있어? 즉, 상대 경로를 오른쪽베이스에 해결되도록

working.directory=. 

를 추가 충분한 시도가 아닌 경우

답변

1

존재 윈도우 당신은 아마 대신 앞으로의 백 슬래시를 사용할 필요가

classpath.2=..\lib\*.jar 

슬래시 예배 규칙서. 다른 모든 것이 실패하면 과 함께 메인 JAR 파일에 매니페스트를 추가하여 ../lib/file.jar 파일을 모두 열거하고 classpath.2을 제거 할 수 있습니다.

편집 : 스택 추적을 보면 WinRun4J가 스레드 컨텍스트 클래스 로더를 올바르게 설정하지 않은 것처럼 보입니다. 당신이 관련 아무것도 봄/CXF 인스턴스화하기 전에, 당신의 serviceMain의 상단에

Thread.currentThread().setContextClassLoader(
    AppServico.class.getClassLoader()); 

를 추가하십시오.

+0

여전히 같은 예외가 발생합니다 (질문에 추가했습니다). mai jar에는 이미 클래스 경로 선언이있는 매니페스트 파일이 있습니다. – brevleq

+0

@brevleq 이것은 스레드 컨텍스트 클래스 로더 (JAXB API가 구현 클래스를로드하는 데 사용하려고 시도하는 것)와 관련된 문제인 것처럼 보입니다. 가능한 해결책으로 내 대답을 편집했습니다. –

관련 문제