2014-08-27 15 views
6

Otrzymuję następujące powiadomienie podczas próby użycia javaBridge, ponieważ chcę używać kodu Java w php, poszedłem za kilkoma tutorialami, ale zaatakowałem następujące rzeczy

Undefined property: java_Client::$cancelProxyCreationTag in D:\xampp\htdocs\java\Java.inc on line 1994 

cały plik test.php jest następujący, z wyjątkiem wypowiedzenia inne rzeczy jest normalne,

php-java-bridge config... 

Java version=1.7.0_55 

Notice: Undefined property: java_Client::$cancelProxyCreationTag in D:\xampp\htdocs\java\Java.inc on line 1994 
Java vendor=Oracle Corporation 
OS=Windows 7 6.1 on amd64 
星期三, 八月 27, 2014 at 4:56:58 下午 中国标准时间 

Czy ktoś ma spotkać ten sam problem? dzięki!

Odpowiedz

3

To proste wystarczy dodać atrybut $cancelProxyCreationTag w klasie

//Java.inc 
class java_Client { 
... 
public $cancelProxyCreationTag; 
... 
} 

Ten atrybut jest stosowany w metodzie destruct Java java_Client. jego obowiązkowe, jeśli używasz mostu w pętli.

2

Można to również zrobić z kodu PHP, który korzysta z mostu na wypadek, gdyby nie było potrzeby otwierania plików wojny/jar i ponownego wdrażania.

//... 
$workbook = new Java('org.apache.poi.xssf.usermodel.XSSFWorkbook'); 
$workbook->__client->cancelProxyCreationTag = 0; 
//... 
1

Rozwiązanie tego problemu wymaga rozwiązania dwóch powiązanych ze sobą problemów.

Po pierwsze, nie ma pliku java/Java.inc wdrożonego w oryginalnym JavaBridge.war. Jest generowany, co jest problematyczne z powodu błędu, który napotkano, który czai się wewnątrz java/Java.inc.

Po drugie, plik zawiera zmienną, która jest inkrementowana, zanim zostanie zainicjalizowana.

rozwiązać te problemy w sposób następujący:

  1. Pobierz plik JavaBridge.war.
  2. Wyodrębnij plik java/Java.inc, wywołując: java -cp JavaBridge.war TestInstallation, zgodnie z documentation.
  3. Napraw błędy, które się pojawiają (np. Brakujące php5-cli).
  4. Edytuj java/Java.inc.
  5. idź do linii 1994.
  6. Wstaw następujący kod bezpośrednio nad linią 1994:
 
    if(empty($client->cancelProxyCreationTag)) { 
     $client->cancelProxyCreationTag = 0; 
    } 

W else blokowe (linie 1989 do 1998 roku) powinien przypominać:

} else { 
$result=clone($client->cachedJavaPrototype); 
$result->__factory=$cacheEntry->factory; 
$result->__java=++$client->asyncCtx; 
$result->__signature=$cacheEntry->signature; 
// FIX: initialize variable before it is used. 
if(empty($client->cancelProxyCreationTag)) { 
    $client->cancelProxyCreationTag = 0; 
} 
$result->__cancelProxyCreationTag=++$client->cancelProxyCreationTag; 
return $result; 

Zapisz plik.

Następnie ponownie utworzyć plik .war następująco:

  1. Utwórz nowy, pusty, katalog tymczasowy
  2. rozpakować plik oryginalny JavaBridge wojenną do katalogu tymczasowego.
  3. Przenieś katalog java do katalogu tymczasowego; upewnij się, że zawiera zaktualizowany plik Java.inc!
  4. Archiwizuj uszkodzony plik JavaBridge.war.
  5. Utwórz nową wersję JavaBridge.

Na przykład, może to przypominać:

mkdir temp 
unzip ../JavaBridge.war 
mv ../java . 
mv ../JavaBridge.war /tmp 
zip -r ../JavaBridge.war * 

Problem powinien być rozwiązany.

Powiązane problemy