Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Inline, Inline::Java 
:(
    Опции темы
Bulat
Дата 5.8.2009, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: 5
Всего: 57



Пытаюсь подружить perl  с java
Код

#!/usr/bin/perl

use strict;
use POSIX;

my $file = 'C:\Work\Fragment.pdf';


use Inline Java => << "END_JAVA";
public class PDF {
  private String file;
  private Object pdfAuthor;
  private String pdfTitle;

  public PDF (String file) {
    this.file = file;
  }

  public Object getAuthor() {
    return pdfAuthor;
  }
}
END_JAVA

use Inline::Java qw(caught);

eval {
  my $pdf = new PDF($file);
  print $pdf->getAuthor();
};

if ($@) {
  if (caught("java.lang.Exception")) {
    my $msg = $@ -> getMessage();
    print $msg, "\n";
  }
}


Он вроде даж класс компилит, но выдает java-ошибку

Код

Exception in thread "main" java.lang.UnsupportedClassVersionError: org/perl/inline/java/InlineJavaServer (Unsupported major.minor version 49.0)
        at java.lang.ClassLoader.defineClass0(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:509)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:12
3)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:246)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:54)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:193)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:186)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:265)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:262)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:322)
JVM taking more than 15 seconds to start, or died before Perl could connect. Increase config STARTUP_DELAY if necessary. at C:/Perl/site/lib/Inline/Java.pm line 484


вроде что-то не то с jvm, но никак не могу вкурить что именно..

Мож кто с этим работал??

Добавлено через 1 минуту и 40 секунд
P.S. Код просто примерный, это я его упростил до минимума, чтобы понять в чем проблема и попытаться все же сдружить


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
gcc
Дата 5.8.2009, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



этот модуль все таки старый 2007, и все остальные с ним, тоже, сейчас уже появилась java6, может из-за этого не работает?

http://java.sun.com/developer/technicalArt...ktop/scripting/
http://jcp.org/en/jsr/summary?id=223

В Java6 добавлена поддержка т.н. криптовых языков.
JSR 223 - шлюз для подключения других языков, причем как на уровне интерпретации, так и на уровне компиляции (код на другом языке компилируется в java-байткод). Можно из др. языка вызывать java-код и наооброт.
В поставке с JDK6 идет Rhino - знакомый JavaScript (ECMAScript). 

Это сообщение отредактировал(а) gcc - 5.8.2009, 17:51
PM WWW ICQ Skype GTalk Jabber   Вверх
Bulat
Дата 6.8.2009, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: 5
Всего: 57



Цитата(gcc @  5.8.2009,  17:48 Найти цитируемый пост)
этот модуль все таки старый 2007, и все остальные с ним, тоже, сейчас уже появилась java6, может из-за этого не работает?


Вообще, в описании требуется версия 1.2 и выше. Вчера я работал на версии 1.4, с 1.5 все нормально запускается, однако не могу четко утверждать что дело лишь в этом... Так как полностью сносил все что есть по Java и устанавливал по новой, могло многое изменится. smile


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
Bulat
Дата 6.8.2009, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: 5
Всего: 57



До сих пор не до конца ясно возможно при использовании подобного кода еще чтобы java-класс компилился вместе со своей библиотекой?

Мож кто работал ??


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
Bulat
Дата 6.8.2009, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: 5
Всего: 57



параметр Classpath

вопрос закрыт smile


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
gcc
Дата 6.8.2009, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



покажешь примеры как там его делать?

в любой код можно запускать через inline?

а саму java надо ставить?
PM WWW ICQ Skype GTalk Jabber   Вверх
Bulat
Дата 7.8.2009, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: 5
Всего: 57



Цитата(gcc @  6.8.2009,  15:48 Найти цитируемый пост)
а саму java надо ставить? 


Ес-но. smile Модуль не будет содержать в себе еще и jre smile 

Код

#!/usr/bin/perl

use strict;
use Encode;

use Inline (
  Java => << "END_JAVA",
import com.lowagie.text.*;
import java.util.*;
import java.io.*;
public class PDF {
  private String file;

  public PDF (String file) {
    this.file = file;
  }

  public String getFile() {
    return file;
  }

}
END_JAVA
J2SDK => 'C:\Program Files\Java\jdk',
SHARED_JVM => 0,
CLASSPATH => 'C:\Java_jars\iText-2.1.0.jar',
);

use Inline::Java qw(caught);

my $file = "C:\\tmp\\test.pdf";

eval {
  my $pdf = new PDF($file);
  print Encode::encode_utf8($pdf->getFile()), "\n";
};

if ($@) {
  if (caught("java.lang.Exception")) {
    my $msg = $@ -> getMessage();
    print $msg, "\n";
  }
}



Допустим. Код я упростил, так как

1. Синтаксис java сильно отличается от перла и его нужно изучать отдельно. А вообще лучше взять какой-нить NetBeans или Eclipse и писать сначала в нем отдельно, а уже потом вставлять
2. Во-вторых, все же не очень красиво лепить все в одном, но иногда бывает нужно. smile

Вообще можно любой код(любого языка) нужно только установить соотв. модуль.


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
Bulat
Дата 7.8.2009, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: 5
Всего: 57



Кстати, не принципиально, но если кто-нить работал, мож знает, возможно ли, чтоб при запуске скрипта он не писал лишние файлы? Кроме самого откомпиленного класса java , ну пусть там создаст себе еще конфиг, один, а все остальное зачем?


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
Bulat
Дата 26.8.2009, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: 5
Всего: 57



Извечная проблема кодировок. Если все же кто-нить работал, и сталкивался - проблема в том, что при передаче из перл строку в кириллице, предположительно в utf-8 java уже не может грамотно распознать и раскодировать.

Код

    String str = null;
    try {
      BufferedReader in = new BufferedReader(new InputStreamReader(new ByteArrayInputStream(author.getBytes()),"UTF-8"));
      String line = null;
      while ((line = in.readLine())!=null) {
        str = str + line;
      }
    } catch (UnsupportedEncodingException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }


Пробовал даж данным способом перевести в привычный для Java юникод... Однакож, все равно он расставляет знаки вопроса...

Ес-но в самом перле декодировал с помощью Encode....

Вообщем пока в тупике.  smile 


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
ginnie
Дата 26.8.2009, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



Bulat, добавь в программу

Код

use Devel::Peek;


и выведи информацию о переменной, содержащей строку

Код

Devel::Peek::Dump($var_name);


Так будет проще понять, где проблема.


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
Bulat
Дата 27.8.2009, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: 5
Всего: 57



ginnie, пасиба за совет. ;)

Боюсь чем дальше в лес, тем злее партизаны smile))

Самое поршивое что на solaris, отдельно от проекта(портал написанный на перле) мой модуль юзающий java через Inline::Java соотв. нормально работает.. Но к сожалению, при попытке использовать его в проекте, выдает

Код

 Cannot find current script '/dev/null' at /usr/local/lib/perl5/5.8.8/FindBin.pm line 201\n
BEGIN failed--compilation aborted at /usr/local/lib/perl5/5.8.8/FindBin.pm line 201.\n
Compilation failed in require at blib/lib/Inline.pm (autosplit into blib/lib/auto/Inline/find_temp_dir.al) line 1257.\n
BEGIN failed--compilation aborted at /data4/www/WWWHub/bin/PdfInJava.pm line 196.\n
Compilation failed in require at /data4/www/WWWHub/XPortal/Pages/EditorWorkplace.pm line 1924.\n


Что-то очень глубокое и не понятное мне. smile Если никто не сталкивался, боюсь засим придется расписаться в своем бессилии, и уйти от всех этих "красивых" кодов, до отдельных запусков команд. smile

Это сообщение отредактировал(а) Bulat - 27.8.2009, 10:04


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
gcc
Дата 27.8.2009, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



FindBin.pm - вот это что использует?

ты на венде запускаешь? скорее всего вот это /dev/null для POSIX?

Это сообщение отредактировал(а) gcc - 27.8.2009, 17:11
PM WWW ICQ Skype GTalk Jabber   Вверх
Bulat
Дата 7.9.2009, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: 5
Всего: 57



ginnie, Devel::Peek все же натолкнул меня на мысль, и после очередного шаманства и плясками с бубнами, мне удалось заставить Java нормально распозновать переданную ей кириллицу от перла. smile По крайней мере в конечном файле все гламурно. smile

gcc, ларчик просто открывался.. smile Правда не я, а мой коллега чет там ковырнул.. С его слов, просто данный модуль не мог создать временную директорию, прав не было на сервере.. или пытался создать там, где нельзя этого делать...

Вообщем-то вроде пока все осилил  smile 


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0529 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.