2017-02-01 17 views
0

.mppファイルから「タスク」をロードしようとしています。 私はjava.util.Dateで現在の日付を取得した場合、それはJAVAにアクセスするために、非常にうまく動作しますが、私はMPPReaderにアクセスしようとすると、私はエラーを取得する:PHPJAVAブリッジに.jarファイルを含めます。

CreateInstance failed: new net.sf.mpxj.mpp.MPPReader. Cause: java.lang.ClassNotFoundException 

は、これは私のテストケースにコードです。

define("JAVA_SERVLET", false); 
define("JAVA_HOSTS", 9267); 

$mpxjPath = getcwd()."/libs/java/mpxj-5.6.0.jar"; 
exec("java -cp $mpxjPath"); 
require_once("libs/java/Java.inc"); 

$date = new java('java.util.Date'); 
echo $date; 

$project = new java('net.sf.mpxj.mpp.MPPReader'); 

これは、Javaが到達可能であることを、ブラウザ

Wed Feb 01 08:53:43 CET 2017 
Fatal error: Uncaught [[o:Exception]:"java.lang.Exception: CreateInstance failed: new net.sf.mpxj.mpp.MPPReader. Cause: java.lang.ClassNotFoundException: net.sf.mpxj.mpp.MPPReader VM: [email protected]://java.oracle.com/" at: 
    #-15 java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
    #-14 java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
... 

出力ショーで出力されます。しかし、私はどのようにMPPReaderにアクセスできますか?


更新

サーバー:CentOSの7

は、これが今の私のindex.phpのコードです。

<?php 
define("JAVA_HOSTS", 9267); 
define("JAVA_SERVLET", false); 

require_once("libs/java/Java.inc"); 

echo "<pre>"; 
$date = new java('java.util.Date'); 
echo $date; 

$project = new java('net.sf.mpxj.mpp.MPPReader'); 

?> 

実行StandaloneコマンドCentOS 7

java -cp "ext/JavaBridge.jar:libs/java/mpxj-5.6.0.jar" php.java.bridge.Standalone SERVLET:9267 

にこれはエラーです。 mpxj-5.6.0.jarをロードするためにあなたの試みを見てみると

Thu Feb 02 07:11:45 CET 2017PHP Fatal error: Uncaught [[o:Exception]:"java.lang.Exception: CreateInstance failed: new java.net.sf.mpxj.mpp.MPPReader. Cause: java.lang.ClassNotFoundException: java.net.sf.mpxj.mpp.MPPReader VM: [email protected]://java.oracle.com/" at: 
#-15 java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
#-14 java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
#-13 java.security.AccessController.doPrivileged(Native Method) 
#-12 java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
#-11 java.lang.ClassLoader.loadClass(ClassLoader.java:425) 
#-10 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
#-9 java.lang.ClassLoader.loadClass(ClassLoader.java:358) 
#-8 java.lang.Class.forName0(Native Method) 
#-7 java.lang.Class.forName(Class.java:270) 
#-6 php.java.bridge.Util.classForName(Util.java:1518) 
#-5 php.java.bridge.JavaBridge.CreateObject(JavaBridge.java:445) 
#-4 php.java.bridge.Request.handleRequest(Request.java:458) 
#-3 php.java.bridge.Request.handleRequests(Request.java:500) 
#-2 php.java.bridge.http.ContextRunner.run(Co in http://127.0.0.1:9267/JavaBridge/java/Java.inc on line 195 

答えて

0

、私はあなたがクライアント側(PHP)からJVMにそれを利用できるようにしようとした気づい:

$mpxjPath = getcwd()."/libs/java/mpxj-5.6.0.jar"; 
exec("java -cp $mpxjPath"); 
require_once("libs/java/Java.inc"); 

アイデアは魅力的に見えますが、悲しいことはできませんそのように働く。


2つの部分で構成されているJavaブリッジ、クライアント(Java.inc/PHP)とサーバ(PHPJavaBridge /一般サーブレットを)忘れないでください。したがって、クラスパスにライブラリを追加する場合は、ライブラリをサーバー側で実行する必要があります(JVMで使用可能)。

コード例(define("JAVA_SERVLET", false))からは、Tomcat/servlet envではなくスタンドアロンサーバーでブリッジを開始していると仮定します。このシナリオでは、サーバーを起動するときにクラスパスに*.jarを追加する必要があります。

あなたはサーバを起動するために、約このような何かをやってしまいます:

$ java -cp "./JavaBridge.jar:/path/to/mpxj-5.6.0.jar" php.java.bridge.Standalone SERVLET:9267 

edit: replace /path/to/ in by the correct location of the jar.


あなたは、Linux/Mac上で作業している場合、pjbserver-toolsプロジェクトを見ています。スタンドアロンサーバの周りにphp-wrapperを用意しています。デプスを簡単に設定できます。

ただ、二つのことを知っておいてください。

  • サーブレットモード(の.war/tomcatに)あなたが生産にそれを使用する場合は移動するための方法です。どのように動作するかわからない場合は、pjb-starter-gradle(英語)を参照してください。
  • Java.incは少なくとも作り直しクライアント使用してを検討に時間がかかる...おそらく継続できなくなりPHP7と支持体上で実行されません古い:soluble-japhaを。それを扱う方が簡単かもしれませんが、もちろん著者として私は偏っています。自分のためにチェックします。サーブレットTomcatの注意

):サーブレットTomcatの

インストールし、同じ考え方が適用されます。あなたの.jarファイルがWEB-INF\libディレクトリに存在することを確認してください。最新の.warテンプレートを入手するには、unoffical php-java-bridge forkも参照してください。

+0

また、.jarファイルをサーバーのクラスパスに追加します。しかし、私はindex.phpページを実行する場合、私は同じエラーが発生した '例外が発生しました:java.lang.ClassNotFoundException:net.sf.mpxj.mpp.MPPReader'。 –

+0

これはまだ作成されていません;)問題の説明を更新し、サーバー(コマンドラインが適切ならば使用する)、プラットフォーム(windows/unix)を起動し、Tomcat/ServletモードやStandAloneモードを明確にすることができますか?このように、私はもっと正確に答えることができます...あまりにも多くの推測;)_(あなたがindex.phpと呼んでいることを確認するのもいいかもしれません、あなたのスクリプトの例ですか?)_ –

+0

ちょうどコマンドにjarファイルのパスを含めるように小さな編集を行いました。あなたは試みることができますか? –

関連する問題