REST-Anbindung jvx 2.0.1 => 2.5.1
7 posts
• Page 1 of 1
REST-Anbindung jvx 2.0.1 => 2.5.1
Hallo,
ich migriere gerade eine Anwendung von jvx 2.0.1 auf 2.5.1 und habe Probleme mit der REST-Anbindung.
Mit Version 2.0.1 funktionierte dieser Request z.B. tadellos:
Nach dem Update bekam ich mit dem gleichen Request stets Httpstatus 401 zurück. Bis ich herausgefunden habe, wieso:
Euer RESTAdapter hat sich geändert.
2.0.1
2.5.1
Dieser LifeCycleConnector holt sich in Zeile 98 einen Accesscontroller:
Leider wird hier beim Zugriff darauf ein paar Zeilen weiter nicht auf null geprüft, weshalb mein Request auf Grund einer NullPointerException ständig 401 lieferte. (Wäre vielleicht günstig, hier den Code zu ändern
Das Problem habe ich selbst gelöst. Wir haben nämlich einen eigenen DBSecurityManager implementiert und bei der zu implementierenden Methode "getAccessController" bisher null geliefert.
Funktionierte so bei 2.0.1, aber nicht mehr bei 2.5.1 - deshalb liefere ich nun immer euren DefaultAccessController zurück. Sollte passen oder?
Nun funktioniert wenigstens die Authentifizierung, aber dennoch bekomme ich nun jedesmal Httpstatus 400 - Bad Request "The request could not be understood by the server due to malformed syntax".
Außerdem wird stets folgende Exception geworfen:
"PSQLException: FEHLER: Relation »v_accessrules« existiert nicht"
Ich nehme an, dass mir noch irgendwo eine Konfiguration oder etwas Ähnliches fehlt, etwas, das bei Version 2.0.1 nicht nötig war. Bitte um Hilfe.
Danke
Martin
PS: meine org.restlet Pakete habe ich bereits auf 2.3.2 aktualisiert.
ich migriere gerade eine Anwendung von jvx 2.0.1 auf 2.5.1 und habe Probleme mit der REST-Anbindung.
Mit Version 2.0.1 funktionierte dieser Request z.B. tadellos:
- Code: Select all
http://localhost:8080/xyz/services/rest/desktop/at.xyz.vms.server.MobileData/action/userIdTest
Nach dem Update bekam ich mit dem gleichen Request stets Httpstatus 401 zurück. Bis ich herausgefunden habe, wieso:
Euer RESTAdapter hat sich geändert.
2.0.1
- Code: Select all
RESTSession session = (RESTSession)pRequest.getClientInfo().getUser();
2.5.1
- Code: Select all
LifeCycleConnector lcon = (LifeCycleConnector)pRequest.getClientInfo().getUser();
Dieser LifeCycleConnector holt sich in Zeile 98 einen Accesscontroller:
- Code: Select all
IAccessController acc = Server.getInstance().getSessionManager().get(pMaster.getId()).getAccessController();
Leider wird hier beim Zugriff darauf ein paar Zeilen weiter nicht auf null geprüft, weshalb mein Request auf Grund einer NullPointerException ständig 401 lieferte. (Wäre vielleicht günstig, hier den Code zu ändern
Das Problem habe ich selbst gelöst. Wir haben nämlich einen eigenen DBSecurityManager implementiert und bei der zu implementierenden Methode "getAccessController" bisher null geliefert.
Funktionierte so bei 2.0.1, aber nicht mehr bei 2.5.1 - deshalb liefere ich nun immer euren DefaultAccessController zurück. Sollte passen oder?
Nun funktioniert wenigstens die Authentifizierung, aber dennoch bekomme ich nun jedesmal Httpstatus 400 - Bad Request "The request could not be understood by the server due to malformed syntax".
Außerdem wird stets folgende Exception geworfen:
"PSQLException: FEHLER: Relation »v_accessrules« existiert nicht"
Ich nehme an, dass mir noch irgendwo eine Konfiguration oder etwas Ähnliches fehlt, etwas, das bei Version 2.0.1 nicht nötig war. Bitte um Hilfe.
Danke
Martin
PS: meine org.restlet Pakete habe ich bereits auf 2.3.2 aktualisiert.
- mzeller
- Posts: 27
- Joined: Tue Apr 19, 2016 10:48 am
- Location: Vienna
Re: REST-Anbindung jvx 2.0.1 => 2.5.1
Ja, die Suche nach dem LCO Namen wurde erweitert, damit das Package nicht immer in der URL angegeben werden muss, z.B.
Es gibt JUnit Testklassen für JVx, mit denen wir das Verhalten überprüfen und natürlich können Sie für Ihre Services auch angelehnt daran ihre eigenen JUnit Tests erstellen.
Der AccessController wurde in 2.0.1 nicht bei den REST Services eingesetzt. Die NullPointerException ist ein BUG und sollte als Ticket erfasst werden (https://oss.sibvisions.com/).
Wo genau erhalten Sie die Exception für V_ACCESSRULES Exception?
Auch hierfür wäre ein Ticket hilfreich.
Es könnte sicherlich auch eine eigene IAccessController Implementierung verwendet werden, anstatt dem DefaultAccessController, je nachdem ob der Zugriff auf LCOs geregelt sein soll oder nicht.
Ohne Details, Stack Traces oder Verwendungszweck ist es schwer die richtige Hilfestellung zu geben.
- Code: Select all
http://localhost:8080/xyz/services/rest/desktop/MobileData/action/userIdTest
Es gibt JUnit Testklassen für JVx, mit denen wir das Verhalten überprüfen und natürlich können Sie für Ihre Services auch angelehnt daran ihre eigenen JUnit Tests erstellen.
Der AccessController wurde in 2.0.1 nicht bei den REST Services eingesetzt. Die NullPointerException ist ein BUG und sollte als Ticket erfasst werden (https://oss.sibvisions.com/).
Wo genau erhalten Sie die Exception für V_ACCESSRULES Exception?
Auch hierfür wäre ein Ticket hilfreich.
Es könnte sicherlich auch eine eigene IAccessController Implementierung verwendet werden, anstatt dem DefaultAccessController, je nachdem ob der Zugriff auf LCOs geregelt sein soll oder nicht.
Ohne Details, Stack Traces oder Verwendungszweck ist es schwer die richtige Hilfestellung zu geben.
- rjahn
- Posts: 41
- Joined: Sun Sep 13, 2009 1:54 pm
Re: REST-Anbindung jvx 2.0.1 => 2.5.1
Hallo,
ich weiß jetzt, woran die weiteren Probleme liegen.
In der Klasse com.sibvisions.rad.server.http.rest.service.CallService wird nämlich wieder der LifeCycleConnector verwendet, wo dann wieder die gleiche NullPointerException auftritt:
Und das führt dann zu einem 400 BAD REQUEST.
Bitte, was muss ich tun, damit der AccessController nicht null ist? In meinem eigenen DBSecurityManager gebe ich bei der Methode getAccessController bereits einen AccessController zurück und im config.xml habe ich auch diesen AccessController definiert.
Danke
Martin
ich weiß jetzt, woran die weiteren Probleme liegen.
In der Klasse com.sibvisions.rad.server.http.rest.service.CallService wird nämlich wieder der LifeCycleConnector verwendet, wo dann wieder die gleiche NullPointerException auftritt:
- Code: Select all
IAccessController acc = Server.getInstance().getSessionManager().get(pMaster.getId()).getAccessController();
//...
sLifeCycleName = acc.find(sDotName);
Und das führt dann zu einem 400 BAD REQUEST.
Bitte, was muss ich tun, damit der AccessController nicht null ist? In meinem eigenen DBSecurityManager gebe ich bei der Methode getAccessController bereits einen AccessController zurück und im config.xml habe ich auch diesen AccessController definiert.
Danke
Martin
- mzeller
- Posts: 27
- Joined: Tue Apr 19, 2016 10:48 am
- Location: Vienna
Re: REST-Anbindung jvx 2.0.1 => 2.5.1
Ihr Benutzer im Ticket System wurde in der Zwischenzeit aktiviert.
-
Support@SIB - Posts: 353
- Joined: Mon Sep 28, 2009 1:56 pm
Re: REST-Anbindung jvx 2.0.1 => 2.5.1
Haben Sie createAccessController in Ihrem security manager überschrieben oder getAccessController?
Wenn Sie nur createAccessController überschrieben haben, dann benötigen Sie die V_ACCESSRULES, wie beispielsweise:
Es kann auch eine Tabelle mit dem Namen sein. Hauptsache die Spalten stimmen.
Wenn Sie natürlich getAccessController überschreiben haben, sollte die NullPointerException nicht auftreten.
Wie bereits von einem anderen User geschrieben wurde, kann ohne StackTrace kaum eine punktgenaue Hilfestellung gegeben werden.
Wenn Sie nur createAccessController überschrieben haben, dann benötigen Sie die V_ACCESSRULES, wie beispielsweise:
- Code: Select all
CREATE VIEW V_ACCESSRULES AS
SELECT u.USERNAME
,a.LIFECYCLENAME
FROM USERS u,
ACCESS a
WHERE u.ACTIVE = 'Y'
AND u.id = a.user_id
Es kann auch eine Tabelle mit dem Namen sein. Hauptsache die Spalten stimmen.
Wenn Sie natürlich getAccessController überschreiben haben, sollte die NullPointerException nicht auftreten.
Wie bereits von einem anderen User geschrieben wurde, kann ohne StackTrace kaum eine punktgenaue Hilfestellung gegeben werden.
-
Support@SIB - Posts: 353
- Joined: Mon Sep 28, 2009 1:56 pm
Re: REST-Anbindung jvx 2.0.1 => 2.5.1
Fraglich ist auch, warum eine ClassNotFoundException geworfen wird, sprich der AccessController überhaupt gefragt wird.
Wenn das LCO voll qualifiziert angegeben wird, wie in Ihrem Beispiel
dann sollte der AccessController nicht benötigt werden?
Das würde bedeuten das die eingesetzte Klasse im URL nicht vorhanden ist!
Wenn die Klasse natürlich nicht voll qualifiziert ist, kommt es zur NPE.
Wenn das LCO voll qualifiziert angegeben wird, wie in Ihrem Beispiel
- Code: Select all
http://localhost:8080/xyz/services/rest/desktop/at.xyz.vms.server.MobileData/action/userIdTest
dann sollte der AccessController nicht benötigt werden?
Das würde bedeuten das die eingesetzte Klasse im URL nicht vorhanden ist!
Wenn die Klasse natürlich nicht voll qualifiziert ist, kommt es zur NPE.
-
Development@SIB - Posts: 325
- Joined: Mon Sep 28, 2009 1:54 pm
Re: REST-Anbindung jvx 2.0.1 => 2.5.1
Danke für die vielen Hinweise. Nun konnte ich das Problem lösen.
Meine Vorgänger hatten die Methode getAccessController nicht überschrieben und so den DefaultAccessController genutzt, obwohl es in der DB keine V_ACCESSRULES gibt. Das bedeutete, dass die Methode getAccessController immer null lieferte. Mit Version 2.0.1 konnte man das scheinbar ignorieren. Bei der aktuellen Version 2.5.1 nicht mehr, weil hier die oben genannte NullPointerException im LifeCycleConnector auftritt und dann weder die Authentifizierung noch der Request funktioniert.
Nun habe ich die Methode getAccessController überschrieben und alles läuft.
Danke für die Hilfe
Martin
Meine Vorgänger hatten die Methode getAccessController nicht überschrieben und so den DefaultAccessController genutzt, obwohl es in der DB keine V_ACCESSRULES gibt. Das bedeutete, dass die Methode getAccessController immer null lieferte. Mit Version 2.0.1 konnte man das scheinbar ignorieren. Bei der aktuellen Version 2.5.1 nicht mehr, weil hier die oben genannte NullPointerException im LifeCycleConnector auftritt und dann weder die Authentifizierung noch der Request funktioniert.
Nun habe ich die Methode getAccessController überschrieben und alles läuft.
Danke für die Hilfe
Martin
- mzeller
- Posts: 27
- Joined: Tue Apr 19, 2016 10:48 am
- Location: Vienna
7 posts
• Page 1 of 1