2013-02-08 47 views
1

我试图执行我的Java程序作为使用WinRun4J的Windows服务。这项服务是正确创建并运行,直到它停止,因为一个ClassNotFoundException的:WinRun4J - 无法加载库罐

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文件夹中。 这是我servico.ini文件,通过WinRun4J使用:

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 

我tryied了很多的变化在classpath.2没有成功。
我在做什么错了?

回答

1

是Windows下你可能需要使用的,而不是向前反斜杠反斜杠

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

如果这还不够尝试添加

working.directory=. 

,以确保相对路径是针对合适的解决基地目录。如果一切都失败了,你可以用一个Class-Path添加一个清单到你的主JAR文件中,该清单列举了所有../lib/file.jar文件并完全取消了classpath.2

编辑:看到堆栈跟踪它看起来像WinRun4J没有正确设置线程上下文类加载器。尝试添加

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

serviceMain的顶部,你实例什么春/ CXF有关前。

+0

仍然会得到相同的异常(我在问题中添加了它)。 mai jar已经有了一个带有类路径声明的清单文件。 – brevleq 2013-02-11 19:15:14

+0

@brevleq它看起来像线程上下文类加载器(这是JAXB api试图用来加载实现类)的问题。我用可能的解决方法编辑了我的答案。 – 2013-02-11 22:19:48