java — включает .jar-файл в PHPJAVA Bridge

Я пытаюсь загрузить «Задачи» из .mpp-файла.
Если я получу текущую дату по java.util.Date это работает очень хорошо, чтобы получить доступ JAVA но если я пытаюсь получить доступ к MPPReader, я получаю сообщение об ошибке:

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');

Это вывод в браузере

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: 1.7.0_55@http://java.oracle.com/" at:
#-15 java.net.URLClassLoader$1.run(URLClassLoader.java:366)
#-14 java.net.URLClassLoader$1.run(URLClassLoader.java:355)
...

Вывод показывает, что Java достижима. Но как я могу получить доступ к 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

Это ошибка.

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: 1.7.0_55@http://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

Решение

Глядя на вашу попытку загрузить mpxj-5.6.0.jarЯ заметил, что вы пытались сделать его доступным для JVM со стороны клиента (PHP):

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

Идея выглядит привлекательно, но, к сожалению, не может работать таким образом.


Помните, что 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

редактировать: замените / путь / к / в на правильное расположение банки.


Если вы работаете на Linux / Mac, посмотрите на pjbserver-инструменты проект. Он предоставляет php-оболочку для автономного сервера, где вы можете легко настроить deps.

Просто имейте в виду две вещи:

  • Режим сервлета (.war / tomcat) — это то, что нужно, если вы собираетесь использовать его в производстве. Если вы не знаете, как это работает, см. PJB-стартер-Gradle который содержит документацию.
  • старшая Java.inc не будет работать на PHP7, и поддержка, вероятно, не будет продолжена … По крайней мере, потребуется время, чтобы рассматривать используя переработанный клиент: растворимы-japha. Возможно, с ним даже легче работать, но, как автор, я предвзят. Проверьте сами;)

Примечание для сервлета-кота:

Для установки сервлета Tomcat применяется та же идея. Просто убедитесь, что ваши файлы .jar присутствуют в WEB-INF\libкаталог. Смотрите также Неофициальный php-java-bridge fork чтобы получить последний шаблон .war.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]