2016-11-11 5 views
1

IDEから実行するとエラーが発生しないのに、SAP JCOとSAP IDOCのライブラリを使用するDropWizardで作成されたJavaプロジェクトがありますそれはjarファイルにパッケージ化されており、我々は次のスタックトレースを受けるjarファイルを実行しよう:エラーアプリケーションJARを実行しているときに "サーバーのデフォルトリポジトリの宛先XXXXが無効です" JAR

com.sap.conn.jco.JCoException: (106) JCO_ERROR_RESOURCE: Server default repository destination AGENT is invalid: Destination AGENT could not be created: java.lang.Error: java.security.NoSuchAlgorithmException: AES KeyGenerator not available 
     at com.sap.conn.jco.rt.DefaultServer.update(DefaultServer.java:240) 
     at com.sap.conn.jco.rt.DefaultServer.<init>(DefaultServer.java:117) 
     at com.sap.conn.idoc.jco.rt.DefaultJCoIDocServer.<init>(DefaultJCoIDocServer.java:47) 
     at com.sap.conn.idoc.jco.rt.DefaultJCoIDocServerFactory.createServer(DefaultJCoIDocServerFactory.java:17) 
     at com.sap.conn.idoc.jco.rt.DefaultJCoIDocServerFactory.createServer(DefaultJCoIDocServerFactory.java:13) 
     at com.sap.conn.jco.rt.DefaultServerManager.getServer(DefaultServerManager.java:104) 
     at com.sap.conn.jco.rt.StandaloneServerFactory.update(StandaloneServerFactory.java:362) 
     at com.sap.conn.jco.rt.StandaloneServerFactory.getServerInstance(StandaloneServerFactory.java:175) 
     at com.sap.conn.idoc.jco.JCoIDoc.getServer(JCoIDoc.java:301) 
     at com.enapsys.dw.bundles.sapidoc.api.SAPIdocServerListener.run(SAPIdocServerListener.java:38) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
     at java.lang.Thread.run(Unknown Source) 
Caused by: com.sap.conn.jco.JCoException: (106) JCO_ERROR_RESOURCE: Destination AGENT could not be created: java.lang.Error: java.security.NoSuchAlgorithmException: AES KeyGenerator not available 
     at com.sap.conn.jco.rt.DefaultDestinationManager.update(DefaultDestinationManager.java:219) 
     at com.sap.conn.jco.rt.DefaultDestinationManager.searchDestination(DefaultDestinationManager.java:383) 
     at com.sap.conn.jco.rt.DefaultDestinationManager.getDestinationInstance(DefaultDestinationManager.java:99) 
     at com.sap.conn.jco.JCoDestinationManager.getDestination(JCoDestinationManager.java:104) 
     at com.sap.conn.jco.rt.DefaultServer.update(DefaultServer.java:218) 
     ... 12 more 
Caused by: java.lang.Error: java.security.NoSuchAlgorithmException: AES KeyGenerator not available 
     at com.sap.conn.jco.util.Codecs$AES.generateSecretKey(Codecs.java:1020) 
     at com.sap.conn.rfc.engine.GUID.<clinit>(GUID.java:62) 
     at com.sap.conn.jco.rt.JCoRuntime.createSecureString(JCoRuntime.java:1344) 
     at com.sap.conn.jco.rt.DefaultDestinationManager.checkAndCopyProperties(DefaultDestinationManager.java:549) 
     at com.sap.conn.jco.rt.DefaultDestinationManager.getProperties(DefaultDestinationManager.java:345) 
     at com.sap.conn.jco.rt.DefaultDestinationManager.update(DefaultDestinationManager.java:171) 
     ... 16 more 
Caused by: java.security.NoSuchAlgorithmException: AES KeyGenerator not available 
     at javax.crypto.KeyGenerator.<init>(KeyGenerator.java:169) 
     at javax.crypto.KeyGenerator.getInstance(KeyGenerator.java:223) 
     at com.sap.conn.jco.util.Codecs$AES.generateSecretKey(Codecs.java:1015) 
     ... 21 more 

当社.jcoServerファイルは次のようになります。

jco.server.progid=AGENT 
jco.server.name=MYSERVER 
jco.server.gwhost=xx.xx.xx.xx 
jco.server.gwserv=xxxx 
jco.server.connection_count=1 
jco.server.repository_destination=AGENT 

当社.jcoDestinationファイルは次のようになります。

jco.client.type=3 
jco.client.client=001 
jco.client.user=xxxxxx 
jco.client.passwd=xxxxxx 
jco.client.lang=en 
jco.client.ashost=xxxxxxxx 
jco.client.sysnr=00 
jco.client.trace=0 
jco.destination.repository_destination=AGENT 

我々はjarファイルを実行すると、私たちはこのようにそれを実行します。私たちのJavaアプリケーションは、我々はIDEとしてのIntelliJを使用して、ERPからIDocを送受信するので、

java -jar -Djava.ext.dirs=lib agent.jar server applicationConfiguration.yml 

先とサーバ共有し、同じプログラムIDそこからアプリケーションを実行してもエラーは発生せず、期待どおりに動作します。

この問題には既知の原因はありますか? IDEの外でjarを実行する場合、実行するには特定のパラメータが必要ですか? 宛先AGENTを作成できませんでしたメッセージはに関連していますNoSuchAlgorithmExceptionエラー?

答えて

3

設定java.ext.dirsは、ほとんどのプロバイダが拡張子jarになっているため、Javaの暗号を破っています。

jarがクラスパスにする必要があります(ただし、-jarと、彼らはマニフェストではないコマンドラインで設定する必要がある)のjarファイルは、通常、1に入れ(コピーまたはシンボリックリンク)しなければならない「システムに追加する」と 'アプリに追加] JVMの標準ロケーションのwhich vary by platform and installext.dirsであなた自身のディレクトリを実際に使用する必要がある場合は、に追加する必要があります。に追加すると、プラットフォームに依存するデフォルトを置き換えません。

+0

私たちはjap内に配布できないと言われていたsapjcoとsapidocライブラリをlibフォルダに配置しました。これをどのように進めるべきでしょうか?マニフェストや他の場所への参照を追加する必要がありますか? –

+0

プロジェクトの依存関係はMavenで処理されるため、問題の一部になる可能性があります。 –

+0

@UrielArvizu:アプリをどこでも実行したい場合は、アプリでインストールし、相対パスをClass-pathに入れます:マニフェストでは正式な方法です。私はMavenとマニフェストの生成方法を知らない。私はそれが医者にあり、すでにQがあるかもしれないと思います。 1台または数台のマシンで実行したいだけで、アクセス権があり、lib jarがあまり変更されない場合は、リンクごとにJREまたは 'site'ディレクトリに入れておきます。それらはすべてのアプリに「自動的に」利用可能です。 –

関連する問題