2017-10-06 1924 views
0

我在我的項目中使用sap組件。如何解決mule中的java.lang.ClassNotFoundException:com.sap.conn.jco.JCoException錯誤?

請看下面是我的SAP組件的示例代碼:

<sap:connector name="SAP_Configuration" jcoAsHost="${sapbw.host}" jcoUser="${sapbw.user}" jcoPasswd="${sapbw.password}" jcoSysnr="${sapbw.instance}" jcoClient="${sapbw.client}" jcoLang="${sapbw.language}" validateConnections="true" doc:name="SAP"/> 

我已經在構建路徑中添加需要sapidoc3和sapjco3 jar文件。由於我正在處理窗口操作系統包括sapjco3.dll文件也仍然下注錯誤。

ERROR 2017-10-06 16:32:32,849 [main] org.mule.module.launcher.DefaultArchiveDeployer: 
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
+ Failed to deploy artifact 'nol-integration-v1.1', see + 
+ below             + 
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
org.mule.module.launcher.DeploymentException: Failed to deploy artifact [nol-integration-v1.1] 
    at org.mule.module.launcher.DefaultArtifactDeployer.deploy(DefaultArtifactDeployer.java:38) ~[mule-module-launcher-3.7.0.jar:3.7.0] 
    at org.mule.module.launcher.DefaultArchiveDeployer.guardedDeploy(DefaultArchiveDeployer.java:310) ~[mule-module-launcher-3.7.0.jar:3.7.0] 
    at org.mule.module.launcher.DefaultArchiveDeployer.deployArtifact(DefaultArchiveDeployer.java:330) ~[mule-module-launcher-3.7.0.jar:3.7.0] 
    at org.mule.module.launcher.DefaultArchiveDeployer.deployPackagedArtifact(DefaultArchiveDeployer.java:155) ~[mule-module-launcher-3.7.0.jar:3.7.0] 
    at org.mule.module.launcher.DefaultArchiveDeployer.deployPackagedArtifact(DefaultArchiveDeployer.java:256) ~[mule-module-launcher-3.7.0.jar:3.7.0] 
    at org.mule.module.launcher.DefaultArchiveDeployer.deployPackagedArtifact(DefaultArchiveDeployer.java:78) ~[mule-module-launcher-3.7.0.jar:3.7.0] 
    at org.mule.module.launcher.DeploymentDirectoryWatcher.deployPackedApps(DeploymentDirectoryWatcher.java:275) ~[mule-module-launcher-3.7.0.jar:3.7.0] 
    at org.mule.module.launcher.DeploymentDirectoryWatcher.start(DeploymentDirectoryWatcher.java:150) ~[mule-module-launcher-3.7.0.jar:3.7.0] 
    at org.mule.module.launcher.MuleDeploymentService.start(MuleDeploymentService.java:100) ~[mule-module-launcher-3.7.0.jar:3.7.0] 
    at org.mule.module.launcher.MuleContainer.start(MuleContainer.java:170) ~[mule-module-launcher-3.7.0.jar:3.7.0] 
    at org.mule.tooling.server.application.ApplicationDeployer.main(ApplicationDeployer.java:15) ~[tooling-support-3.7.0.jar:?] 
Caused by: java.lang.NoClassDefFoundError: com/sap/conn/jco/JCoException 
    at java.lang.Class.getDeclaredMethods0(Native Method) ~[?:1.8.0_121] 
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) ~[?:1.8.0_121] 
    at java.lang.Class.getDeclaredMethods(Class.java:1975) ~[?:1.8.0_121] 
    at org.springframework.core.type.StandardAnnotationMetadata.hasAnnotatedMethods(StandardAnnotationMetadata.java:129) ~[spring-core-4.1.6.RELEASE.jar:4.1.6.RELEASE] 
    at org.springframework.context.annotation.ConfigurationClassUtils.isLiteConfigurationCandidate(ConfigurationClassUtils.java:157) ~[spring-context-4.1.6.RELEASE.jar:4.1.6.RELEASE] 
    at org.springframework.context.annotation.ConfigurationClassUtils.checkConfigurationClassCandidate(ConfigurationClassUtils.java:108) ~[spring-context-4.1.6.RELEASE.jar:4.1.6.RELEASE] 
    at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:278) ~[spring-context-4.1.6.RELEASE.jar:4.1.6.RELEASE] 
    at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:239) ~[spring-context-4.1.6.RELEASE.jar:4.1.6.RELEASE] 
    at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:254) ~[spring-context-4.1.6.RELEASE.jar:4.1.6.RELEASE] 
    at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:94) ~[spring-context-4.1.6.RELEASE.jar:4.1.6.RELEASE] 
    at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:606) ~[spring-context-4.1.6.RELEASE.jar:4.1.6.RELEASE] 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:462) ~[spring-context-4.1.6.RELEASE.jar:4.1.6.RELEASE] 
    at org.mule.config.spring.SpringRegistry.doInitialise(SpringRegistry.java:108) ~[mule-module-spring-config-3.7.0.jar:3.7.0] 
    at org.mule.registry.AbstractRegistry.initialise(AbstractRegistry.java:104) ~[mule-core-3.7.0.jar:3.7.0] 
    at org.mule.config.spring.SpringXmlConfigurationBuilder.createSpringRegistry(SpringXmlConfigurationBuilder.java:172) ~[mule-module-spring-config-3.7.0.jar:3.7.0] 
    at org.mule.config.spring.SpringXmlConfigurationBuilder.doConfigure(SpringXmlConfigurationBuilder.java:95) ~[mule-module-spring-config-3.7.0.jar:3.7.0] 
    at org.mule.config.builders.AbstractConfigurationBuilder.configure(AbstractConfigurationBuilder.java:43) ~[mule-core-3.7.0.jar:3.7.0] 
    at org.mule.config.builders.AbstractResourceConfigurationBuilder.configure(AbstractResourceConfigurationBuilder.java:69) ~[mule-core-3.7.0.jar:3.7.0] 
    at org.mule.config.builders.AutoConfigurationBuilder.autoConfigure(AutoConfigurationBuilder.java:101) ~[mule-core-3.7.0.jar:3.7.0] 
    at org.mule.config.builders.AutoConfigurationBuilder.doConfigure(AutoConfigurationBuilder.java:52) ~[mule-core-3.7.0.jar:3.7.0] 
    at org.mule.config.builders.AbstractConfigurationBuilder.configure(AbstractConfigurationBuilder.java:43) ~[mule-core-3.7.0.jar:3.7.0] 
    at org.mule.config.builders.AbstractResourceConfigurationBuilder.configure(AbstractResourceConfigurationBuilder.java:69) ~[mule-core-3.7.0.jar:3.7.0] 
    at org.mule.context.DefaultMuleContextFactory$1.configure(DefaultMuleContextFactory.java:89) ~[mule-core-3.7.0.jar:3.7.0] 
    at org.mule.context.DefaultMuleContextFactory.doCreateMuleContext(DefaultMuleContextFactory.java:222) ~[mule-core-3.7.0.jar:3.7.0] 
    at org.mule.context.DefaultMuleContextFactory.createMuleContext(DefaultMuleContextFactory.java:81) ~[mule-core-3.7.0.jar:3.7.0] 
    at org.mule.module.launcher.application.DefaultMuleApplication.init(DefaultMuleApplication.java:188) ~[mule-module-launcher-3.7.0.jar:3.7.0] 
    at org.mule.module.launcher.artifact.ArtifactWrapper$2.execute(ArtifactWrapper.java:62) ~[mule-module-launcher-3.7.0.jar:3.7.0] 
    at org.mule.module.launcher.artifact.ArtifactWrapper.executeWithinArtifactClassLoader(ArtifactWrapper.java:129) ~[mule-module-launcher-3.7.0.jar:3.7.0] 
    at org.mule.module.launcher.artifact.ArtifactWrapper.init(ArtifactWrapper.java:57) ~[mule-module-launcher-3.7.0.jar:3.7.0] 
    at org.mule.module.launcher.DefaultArtifactDeployer.deploy(DefaultArtifactDeployer.java:25) ~[mule-module-launcher-3.7.0.jar:3.7.0] 
    ... 10 more 
Caused by: java.lang.ClassNotFoundException: com.sap.conn.jco.JCoException 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381) ~[?:1.8.0_121] 
    at org.mule.module.launcher.FineGrainedControlClassLoader.findClass(FineGrainedControlClassLoader.java:175) ~[mule-module-launcher-3.7.0.jar:3.7.0] 
    at org.mule.module.launcher.MuleApplicationClassLoader.findClass(MuleApplicationClassLoader.java:134) ~[mule-module-launcher-3.7.0.jar:3.7.0] 
    at org.mule.module.launcher.FineGrainedControlClassLoader.loadClass(FineGrainedControlClassLoader.java:119) ~[mule-module-launcher-3.7.0.jar:3.7.0] 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[?:1.8.0_121] 
    at java.lang.Class.getDeclaredMethods0(Native Method) ~[?:1.8.0_121] 
+0

你可能會認爲你還說,JAR到構建路徑;也許不是。這是* runtime *錯誤。它看起來像包含com.sap.conn.jco.JCoException的JAR不在運行時軟件包中,或者它位於錯誤的地方。檢查你的包裹。原生代碼?這也會成爲一個問題,除非您已正確設置了java.library.path JVM參數。 – duffymo

+0

我可以看到構建路徑中的jar文件,但不確定錯誤背後的確切原因。 – Thiru

+0

構建路徑?他們是否在您部署的JAR中?如果沒有,Spring Boot將不會找到它們。 – duffymo

回答

0

如果JCO類不能找到它或者是因爲sapjco3.jar真的不是在類路徑或JCO初始​​化失敗,例如在裝載了本地庫。

您是否選擇了適合您的JVM(32位與64位)的正確JCo本機庫?如果您使用的是32位JVM,即使在64位操作系統上運行,也需要安裝32位版本的JCo。

我不知道Mule,但SAP建議不要將sapjco3.jar與Java應用程序一起部署到應用程序服務器運行時環境中。因爲JCo的本地庫只能加載一次,所以最好把它當作一個系統庫,即把它放入Mule啓動類路徑本身。否則,第二個應用程序(也包含sapjco3.jar)的啓動可能會失敗。

0

如果你的項目Maven化再加入這個依賴於POM:

<dependency> 
<groupId>org.hibersap</groupId> 
<artifactId>sapjco3</artifactId> 
<version>3.0-RC02</version> 
</dependency>