Neo4j Groovyból: java.lang.LinkageError: ClassCastException

+1 vote
asked May 15, 2013 in SzolgInt by conoyes (37 points)  

Sziasztok!

A következő a problémám:
El szeretném érni a standalone Neo4j 1.9RC2 adatbázisomat Groovy szkriptből. A tárgy oldalán megtalálható REST-es mintapéldát lemásoltam, sima Java progiként jól működik, jó eredményt is ad vissza. Ha bemásolom ezt a Java kódot, mint Groovy szkriptet a Bonitába, és felteszem a classpath-ra a Maven által lehúzott JAR dependenciákat, akkor a következő kivételt kapom:

java.lang.LinkageError: ClassCastException: attempting to castbundleresource://194.fwk1791844235:20/javax/ws/rs/ext/RuntimeDelegate.classtobundleresource://194.fwk1791844235:20/javax/ws/rs/ext/RuntimeDelegate.class
at javax.ws.rs.ext.RuntimeDelegate.findDelegate(RuntimeDelegate.java:144)
at javax.ws.rs.ext.RuntimeDelegate.getInstance(RuntimeDelegate.java:119)
at javax.ws.rs.core.MediaType.(MediaType.java:72)
at org.neo4j.rest.graphdb.ExecutingRestRequest.(ExecutingRestRequest.java:58)
... (és még megy ez párszáz soron keresztül)

Ötletem sincs, mi lehet a baj. Találkozott már valaki a problémával?

Köszi,
Dávid

commented May 15, 2013 by nadudvarigy (68 points)  
Igen. Bár gondolom ez nem segít. :D
Én most az embedded java változatot kezdtem el megírni. :(
commented May 15, 2013 by nadudvarigy (68 points)  
Ja és nem groovy specifikus a probléma, én saját osztályt akartam behúzni, hogy csak hívogatom a megfelelő metódusokat, de nem jött össze a dolog.
commented May 15, 2013 by conoyes (37 points)  
Jee. Nem en vagyok szerencsetlen akkor :-) connectorral se megy btw

2 Answers

0 votes
answered May 15, 2013 by anonymous  

Nem tudom, mennyire segít, de saját .jar fájlt be tudtok importálni.
(Extension -> Add/Remove jar files)
Utána a megfelelő pool-ba be kell állítani, a saját jar fájloknál, hogy lássa ezt a .jart.
Ezután a script-be "java-san" be kell importálni még 1x és már tudod is az osztályaidat példányosítani, stb....

commented May 15, 2013 by nadudvarigy (68 points)  
Sajnos nem segít. Nekem az volt a tervem, hogy megírok egy osztályt, ami REST-es hívásokkal elintéz nekem minden szükséges dolgot (új szó felvétele, törlése, kapcsolat köztük). Megírtam Eclipse-ben a cuccot, csináltam egy main függvényt is, ahol működött minden. Ezután JAR-ként behúztam a Bonitába, hozzáadtam a dependencies részhez is, de a fenti hibát dobta.
commented May 21, 2013 by conoyes (37 points)  
Felmerült, hogy a classloader 2db különböző implementációjú, de azonos nevű és package-ű osztályt tölt be. Megkerestem a /javax/ws/rs/ext/RuntimeDelegate.class-t, a maven dependenciák között volt egy jar-ban. Kitöröltem az ext package-et, visszavittem Bonitába, és ugyanúgy előjött a hiba... Hell yeah! Lövésem sincs, hogy most mi van.
0 votes
answered May 16, 2013 by itsDani (39 points)  

Ez sajnos nem igazán megoldás a problémára, inkább annak elkerülése de hátha segít valakinek.

Én nem néztem a mintapéldát, így nem is az alapján kezdtem neki, viszont cserébe működik. Egyszerűen egy URL segítségével nyitottam egy connectiont Groovyból, és azon keresztül küldtem a requesteket, pl:

def url = new URL(urlstring)
def connection = url.openConnection()
connection.setRequestMethod("GET")
connection.addRequestProperty("Accept", "application/json")
connection.connect()

if (connection.responseCode == 200){
    nodeJson = connection.content.text
    [...]
}

Nem tudom, hogy ez miben különbözik a példakódtól, de nekem soha sem jött elő a fenti hiba. Az egyszerűségnek köszönhetően nincs is semmi különleges függőség (cserébe gondolom több dolgot kell megírni)

...