Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: php i java
Forum PHP.pl > Forum > PHP > Object-oriented programming
evo
Musze zrobic w php transormacje xml i xsl przez fo w pdf,txt i html.

Zainstalowalem java_bridge i niby dziala bo kod:

  1. <?php
  2. $v = new java(&#092;"java.lang.System\");
  3.  
  4. $arr=$v->getProperties();
  5.  
  6. foreach ($arr as $key => $value) {
  7. print $key . &#092;" -> \" . $value . \"<br>n\";
  8. }
  9. ?>


zwraca mi to co powinnien.

Problem zaczyna sie gdy taki kod JAVY chce przelozyc na php

Kod
import java.io.*;
import javax.xml.transform.*;
import javax.xml.transform.sax.*;
import javax.xml.transform.stream.*;
import org.apache.fop.apps.*;



public class RunFOP {

    public static void main(String[] args) {
    
  try{
     Driver drv= new Driver();
     drv.setRenderer(Driver.RENDER_PDF);
     drv.setOutputStream(new FileOutputStream("out.pdf"));
  
     Result foInput= new SAXResult(drv.getContentHandler());
     Source srcXML=new StreamSource("file.xml");
     Source srcXSL=new StreamSource("file.xsl");
  
     TransformerFactory tf=TransformerFactory.newInstance();
     Transformer t=tf.newTransformer(srcXSL);
  
     t.transform(srcXML,foInput);
  
  }catch(Exception e){}
    }
}

W javie to mi dziala lecz gdy probuje zinstancjowac klase driver w php w ten sposob:

  1. <?php
  2.  
  3. $currentPath=dirname($_SERVER['PATH_TRANSLATED']);
  4. define('LIB_DIR',$currentPath.'/lib/');
  5.  
  6. $v = new java(&#092;"java.lang.System\");
  7. $v->setProperty(&#092;"java.class.path\",$v->getProperty(\"java.class.path\").';' .
  8. LIB_DIR.'fop.jar'.';'.
  9. LIB_DIR.'avalon-framework-cvs-20020806.jar'.';' .
  10. LIB_DIR.'batik.jar'.';'.
  11. LIB_DIR.'xalan-2.4.1.jar'.';'.
  12. LIB_DIR.'xercesImpl-2.2.1.jar'.';'.
  13. LIB_DIR.'xml-apis.jar'.';'
  14. );
  15.  
  16. $drv=new java(&#092;"org.apache.fop.apps.Driver\");
  17.  
  18. ?>


mowi ze:
Kod
Fatal error:  Uncaught java.lang.Exception: CreateInstance failed: new org.apache.fop.apps.Driver. Cause: java.lang.ClassNotFoundException: org.apache.fop.apps.Driver not found: []
  thrown in d:\tests\fo.php on line 32


wiec ja na to wzialem to w blok try catch w ten sposob

  1. <?php
  2. try{
  3. $drv=new java(&#092;"org.apache.fop.apps.Driver\");
  4.  
  5. }catch(Exception $e){
  6. var_dump($e);
  7. }
  8. ?>


a skrypt wchodzi mi za kazdym razem w catch i nawet rozsadnego bledu nie pokaze sad.gif

efekt var_dump($e) to:

Kod
object(javaexception)#3 (7) {
  ["message:protected"]=>
  string(0) ""
  ["string:private"]=>
  string(0) ""
  ["code:protected"]=>
  int(0)
  ["file:protected"]=>
  string(63) "d:\tests\fo.php"
  ["line:protected"]=>
  int(32)
  ["trace:private"]=>
  array(1) {
    [0]=>
    array(6) {
      ["file"]=>
      string(63) "d:\tests\fo.php"
      ["line"]=>
      int(32)
      ["function"]=>
      string(4) "java"
      ["class"]=>
      string(4) "java"
      ["type"]=>
      string(2) "->"
      ["args"]=>
      array(1) {
        [0]=>
        string(26) "org.apache.fop.apps.Driver"
      }
    }
  }
  [0]=>
  int(2)
}



i nie wiem co mam zrobic sad.gif przeciez dodalem pfady do java.class.path i powinno byc niby dobrze a on nawet klasy Driver nie chce zinstancjowac sad.gif ?


juz mi rece opadaja bo nie wiem co mam zrobic?

dodam ze importuje *.jar w kodzie php poprzez dodanie ich do java.class.path a na stronie java_bridge w przykladach uzywaja funkcji java_require("C:/lib.jar"); lecz jesli probuje ja wywolac to mowi mie ze nie ma takiej funkcji a wyzej podany przyklad javy w php pierwszy ktory podalem dziala ? wiec java_bridge niby funkcjonuje



ma ktos jakies pomysly?
bela
A czy nie możesz zrobić poprostu system('fop.bat') ?smile.gif
evo
pierwszy problem rozwiazany...biblioteki tza do -> (java.ext.dirs) ale drugi mam:


Jak miec dostep do statycznej metody obiektu kotrego konstruktor jest protected ?


w javie wyglada to tak:
Kod
TransformarFactory tf=TransformarFactory.newInstance();


... a w php powinno tak:
  1. <?php
  2. $tf=new JavaClass(&#092;"javax.xml.transform.TransformerFactory\");
  3. $TF=tf->newInstance();
  4. ?>


problem w tym ze construktor TransformerFactory jest protected a instancje objektu mozna stworzyc jedynie poprzez statyczna metode newInstance() a w php jesli nie stworze objektu to niebede mial dostepu do statycznych metod sad.gif i kolko sie zamyka sad.gif

blad jaki mi wywala to:
Kod
java.lang.Exception: Invoke failed: [class javax.xml.transform.TransformerFactory]->newInstance. Cause: java.lang.IllegalAccessException: Class php.java.bridge.JavaBridge can not access a member of class javax.xml.transform.TransformerFactory with modifiers "protected"


jakies pomysly?
hawk
Nie znam się w ogóle na java bridge, ale mój pomysł jest taki: stwórz sobie w javie malutką klasę:
Kod
public class TransformerFactoryFactory {
  public TransformerFactory createFactory() {
    return TransformarFactory.newInstance();
  }
}

winksmiley.jpg
evo
nie moge....lol........siedze od ponad godziny i kombinuje w tym php co tu wymysles ...a o rozwiazaniu w javie nawet nie pomyslalem..lol...

Dzieki winksmiley.jpg

Pozdrawiam
evo
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.