🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.java
9 messages
9 total messages Started by J-23 Sat, 08 Dec 2012 22:54
Dynamiczny kod Java
#153689
Author: J-23
Date: Sat, 08 Dec 2012 22:54
15 lines
1372 bytes
Witam
Od kilku dni próbuje wykonać kod dynamiczny w Javie
Znalzałem coś takiego:

http://www.accordess.com/wpblog/an-overview-of-java-compilation-api-jsr-199/

Wygląda fajnie ale przy próbie kompilacji dostaję
Exception in thread "main" java.lang.NullPointerException
	at com.accordess.ca.CompilerAPITest.doCompilation(CompilerAPITest.java:51)
	at com.accordess.ca.CompilerAPITest.main(CompilerAPITest.java:84)


Nie bardzo wiem jak to naprawić, ktoś podpowie?

Pozdrawiam
Re: Dynamiczny kod Java
#153690
Author: J-23
Date: Sun, 09 Dec 2012 00:14
20 lines
1669 bytes
W dniu 08.12.2012 23:54, J-23 pisze:
> Witam
> Od kilku dni próbuje wykonać kod dynamiczny w Javie
> Znalzałem coś takiego:
>
> http://www.accordess.com/wpblog/an-overview-of-java-compilation-api-jsr-199/
>
>
> Wygląda fajnie ale przy próbie kompilacji dostaję
> Exception in thread "main" java.lang.NullPointerException
>      at
> com.accordess.ca.CompilerAPITest.doCompilation(CompilerAPITest.java:51)
>      at com.accordess.ca.CompilerAPITest.main(CompilerAPITest.java:84)
>

Po dodaniu pliku "tools.jar" z katalogu javy do projektu błąd zniknął 
(brak jakiegokolwiek) tylko brak też wyniku w postaci napisu "Hello, 
dynamic compilation world!"

> Pozdrawiam
Re: Dynamiczny kod Java
#153691
Author: Marcin Biegan
Date: Sun, 09 Dec 2012 10:18
11 lines
1426 bytes
On 2012-12-09 01:14, J-23 wrote:> Po dodaniu pliku "tools.jar" z katalogu javy 
do projektu błąd zniknął
 > (brak jakiegokolwiek) tylko brak też wyniku w postaci napisu "Hello,
 > dynamic compilation world!"

Bo to kompiluje, a nie uruchamia.

Btw. zerknij na asm.ow2.org, może się przyda.
-- 
pozdrawiam
Marcin Biegan
Re: Dynamiczny kod Java
#153693
Author: Bogusław Szczepanowski
Date: Sun, 09 Dec 2012 13:53
29 lines
2166 bytes
Dnia 09-12-2012 o 01:14:48 J-23 <baczeklu@o2.pl> napisał(a):

>> Od kilku dni próbuje wykonać kod dynamiczny w Javie
>> Znalzałem coś takiego:
>>
>> http://www.accordess.com/wpblog/an-overview-of-java-compilation-api-jsr-199/
>>
>>
>> Wygląda fajnie ale przy próbie kompilacji dostaję
>> Exception in thread "main" java.lang.NullPointerException
>>      at
>> com.accordess.ca.CompilerAPITest.doCompilation(CompilerAPITest.java:51)
>>      at com.accordess.ca.CompilerAPITest.main(CompilerAPITest.java:84)
>>
>
> Po dodaniu pliku "tools.jar" z katalogu javy do projektu błąd zniknął  
> (brak jakiegokolwiek) tylko brak też wyniku w postaci napisu "Hello,  
> dynamic compilation world!"

Do błędów klasy SQL Injection należy dodać Java Injection?

Jak byś kompilował cokolwiek, co pochodzi z danych użytkownika, to oczyść
i wyescape'uj porządnie te dane ;)

-- 
Boguś
/Każdy skutek ma swoją przyczynę/

--- news://freenews.netfront.net/ - complaints: news@netfront.net ---
Re: Dynamiczny kod Java
#153692
Author: J-23
Date: Sun, 09 Dec 2012 16:35
13 lines
1467 bytes
W dniu 09.12.2012 11:18, Marcin Biegan pisze:
> On 2012-12-09 01:14, J-23 wrote:> Po dodaniu pliku "tools.jar" z
> katalogu javy do projektu błąd zniknął
>  > (brak jakiegokolwiek) tylko brak też wyniku w postaci napisu "Hello,
>  > dynamic compilation world!"
>
> Bo to kompiluje, a nie uruchamia.
>

Ok, doszedłem do tego samego wniosku ale jakbyś mógł mi pomóc w analizie 
tego kodu bo nie wiem dlaczego nie wychodzi mi plik *.class

Pozdrawiam
Re: Dynamiczny kod Java
#153694
Author: J-23
Date: Sat, 22 Dec 2012 19:35
119 lines
6034 bytes
W dniu 08.12.2012 23:54, J-23 pisze:
> Witam
>

Trochę czasu mineło ale dopiero teraz znalazłem chwile by powrocic do 
sprawy...

Zacząłem się bawić Javaassist 
http://www.csg.ci.i.u-tokyo.ac.jp/~chiba/javassist/tutorial/tutorial.html wygląda 
fajnie i wydaje się spełnić moje oczekiwania tylko mam pewien problem.

public class SampleBean {

	public SampleBean() {
		super();
		// TODO Auto-generated constructor stub
	}
	// Klasa generowana w trybie Runtime
}

Mam klase SampleBean którą w calosci widzicie wyżej chciałym za pomocą 
Javaassist

wypełnić ja odpowiednimi metodami i potem wykorzystać dalej, wypełniam 
ją następująco

ClassPool SampleBean = ClassPool.getDefault();
	    CtClass SampleBeanGenerator = 
SampleBean.get("pl.cba.lukaszbaczek.SampleBean");
	    SampleBean.importPackage("com.extjs.gxt.ui.client.data");
	    SampleBean.importPackage("java.io");
	    SampleBeanGenerator.setInterfaces(new CtClass[] 
{SampleBean.makeClass("BeanModelTag"), 
SampleBean.makeClass("Serializable")});
	    CtField serialVersionUID = CtField.make("private static final long 
serialVersionUID = 1L;", SampleBeanGenerator);
	    CtField id = CtField.make("private int id;", SampleBeanGenerator);
	    CtField name = CtField.make("private String name;", 
SampleBeanGenerator);
	    SampleBeanGenerator.addField(serialVersionUID);
	    SampleBeanGenerator.addField(id);
	    SampleBeanGenerator.addField(name);
	    CtMethod setId = CtNewMethod.make("public void setId(int id) 
{this.id = id;}", SampleBeanGenerator);
	    CtMethod getId = CtNewMethod.make("public int getId() {return 
id;}", SampleBeanGenerator);
	    CtMethod setName = CtNewMethod.make("public void setName(String 
name) {this.name = name;}", SampleBeanGenerator);
	    CtMethod getName = CtNewMethod.make("public String getName() 
{return name;}", SampleBeanGenerator);
	    CtMethod toString = CtNewMethod.make("public String toString() 
{return \"id: \" + id + \", name: \" + name;}", SampleBeanGenerator);
	    CtMethod hashCode = CtNewMethod.make("public int hashCode() {final 
int prime = 31; int result = 1; result = prime * result + id; result = 
prime * result + ((name == null) ? 0 : name.hashCode()); return 
result;}", SampleBeanGenerator);
	    CtMethod equals = CtNewMethod.make("public boolean equals(Object 
obj) {if (this == obj) return true; if (obj == null) return false; 
SampleBean other = (SampleBean) obj; if (id != other.id) return false; 
if (name == null) {if (other.name != null) return false;} else if 
(!name.equals(other.name)) return false; return true;}}", 
SampleBeanGenerator);
	    SampleBeanGenerator.addMethod(setId);
	    SampleBeanGenerator.addMethod(getId);
	    SampleBeanGenerator.addMethod(setName);
	    SampleBeanGenerator.addMethod(getName);
	    SampleBeanGenerator.addMethod(toString);
	
	    SampleBeanGenerator.addMethod(hashCode);
	
	    SampleBeanGenerator.addMethod(equals);
	
	    SampleBeanGenerator.writeFile();

wiem ze by działało odpowiednio serializowanie w gridach Ext-GWT mozna 
uzyć prostszych metod wspierając się biblioteką JSON (na potrzeby testow 
sam tworze odpowiedniego JSON i stad te bardziej rozbudowane metody). 
Przy probie kompilacji dostaje komunikat

Exception in thread "main" javassist.CannotCompileException: [source 
error] no such class: SampleBean
	at javassist.CtNewMethod.make(CtNewMethod.java:79)
	at javassist.CtNewMethod.make(CtNewMethod.java:45)
	at pl.cba.lukaszbaczek.Main.main(Main.java:47)
Caused by: compile error: no such class: SampleBean
	at javassist.compiler.MemberResolver.searchImports(MemberResolver.java:465)
	at javassist.compiler.MemberResolver.lookupClass(MemberResolver.java:409)
	at 
javassist.compiler.MemberResolver.lookupClassByJvmName(MemberResolver.java:319)
	at 
javassist.compiler.MemberResolver.resolveJvmClassName(MemberResolver.java:509)
	at 
javassist.compiler.MemberCodeGen.resolveClassName(MemberCodeGen.java:1145)
	at javassist.compiler.CodeGen.atDeclarator(CodeGen.java:712)
	at javassist.compiler.ast.Declarator.accept(Declarator.java:100)
	at javassist.compiler.CodeGen.atStmnt(CodeGen.java:351)
	at javassist.compiler.ast.Stmnt.accept(Stmnt.java:50)
	at javassist.compiler.CodeGen.atStmnt(CodeGen.java:351)
	at javassist.compiler.ast.Stmnt.accept(Stmnt.java:50)
	at javassist.compiler.CodeGen.atMethodBody(CodeGen.java:292)
	at javassist.compiler.CodeGen.atMethodDecl(CodeGen.java:274)
	at javassist.compiler.ast.MethodDecl.accept(MethodDecl.java:44)
	at javassist.compiler.Javac.compileMethod(Javac.java:169)
	at javassist.compiler.Javac.compile(Javac.java:95)
	at javassist.CtNewMethod.make(CtNewMethod.java:74)
	... 2 more

na który to znalazłem odp na jednym z forum
https://community.jboss.org/message/303087


lecz jest tam linijka
  CtNewClass generated = new CtNewClass(generatedName, pool, false, 
superclass);

Ktora jest nie zgodna z bibliotek Javaasist i nie potrafię sobie z tym 
poradzić

Pozdrawiam
Re: Dynamiczny kod Java
#153695
Author: William Bonawentura
Date: Mon, 24 Dec 2012 06:35
7 lines
1626 bytes
> Mam klase SampleBean którą w calosci widzicie wyżej chciałym za pomocą Javaassist
> wypełnić ja odpowiednimi metodami i potem wykorzystać dalej, wypełniam ją następująco
> Przy probie kompilacji dostaje komunikat Exception in thread "main" javassist.CannotCompileException: [source error] no such 
> class: SampleBean

W czasie kompilacji GWT nie istnieją twoje, tworzone w czasie wykonania klasy. Siłą rzeczy więc kompilator GWT nie może ich widzieć. 
Mam ciągle wrażenie, że silnie komplikujesz jakiś problem :). 
Re: Dynamiczny kod Java
#153696
Author: J-23
Date: Mon, 24 Dec 2012 14:40
24 lines
2011 bytes
W dniu 24.12.2012 07:35, William Bonawentura pisze:
>> Mam klase SampleBean którą w calosci widzicie wyżej chciałym za pomocą
>> Javaassist
>> wypełnić ja odpowiednimi metodami i potem wykorzystać dalej, wypełniam
>> ją następująco
>> Przy probie kompilacji dostaje komunikat Exception in thread "main"
>> javassist.CannotCompileException: [source error] no such class:
>> SampleBean
>
> W czasie kompilacji GWT nie istnieją twoje, tworzone w czasie wykonania
> klasy. Siłą rzeczy więc kompilator GWT nie może ich widzieć. Mam ciągle
> wrażenie, że silnie komplikujesz jakiś problem :).


Zgodze się z Tobą, że komplikuje, ale chce osiągnąć taką rzecz:

podając SQL mieć wynik tego SQL w Grid (wczesniej kombinowałem z MAP - 
zakończone sukcesem) taki SQL Editor teraz chce to samo ale z użyciem 
LiveGrida

Wiem ze mozesz mysleć że "kombinuje jak koń pod góre" bo sam zaczalem 
sie zastanawiać sam już czy to jest do przeskoczenia

Pozdrawiam
Re: Dynamiczny kod Java
#153697
Author: William Bonawentura
Date: Wed, 02 Jan 2013 07:17
7 lines
1507 bytes

> podając SQL mieć wynik tego SQL w Grid (wczesniej kombinowałem z MAP - zakończone sukcesem) taki SQL Editor teraz chce to samo ale 
> z użyciem LiveGrida

Zarówno z punktu widzenia twojego klienta jak i serwera, wynik "ad-hoc" zapytania SQL jest właśnie czymś w rodzaju mapy kolekcji 
(bądź kolekcją map). I tego powinieneś się trzymać. 
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads