bloggers bloggers

Marco Napolitano
Messaggi: 68
Stelle: 0
Data: 15/11/17
Jader Jed Francia
Messaggi: 50
Stelle: 0
Data: 22/09/17
Ezio Lombardi
Messaggi: 9
Stelle: 0
Data: 23/06/17
Chiara Mambretti
Messaggi: 25
Stelle: 0
Data: 27/02/17
Serena Traversi
Messaggi: 3
Stelle: 0
Data: 21/07/16
Francesco Falanga
Messaggi: 8
Stelle: 0
Data: 14/06/16
Antonio Musarra
Messaggi: 2
Stelle: 0
Data: 18/11/13
Simone Celli Marchi
Messaggi: 6
Stelle: 0
Data: 09/07/13
marcello marangio
Messaggi: 4
Stelle: 0
Data: 05/07/13
Marco Mancini
Messaggi: 1
Stelle: 0
Data: 05/06/13
Indietro

Metodi custom void su service builder

ciao a tutti.

c'e' questo bughttp://issues.liferay.com/browse/LPS-29668

In breve:

se si implementano metodi custom che restituiscono void nelle classi MyEntityLocalServiceImpl il service builder genera il codice errato, per cui viene sempre sollevata un'eccezioneUnsupportedOperationException

Spiegazione:

Ho creato una mia entità Xyz e ho implementato un mio metodo

public void miometodo(Mio Parametro m)  nella classe XyzLocalServicempl 

Debuggando ho visto che nella classe XyzLocalServiceClpInvoker (generata dal SB)viene richiamato il metodo

public Object invokeMethod(String name, String[] parameterTypes,

Object[] arguments) throws Throwable

che contiene un mega-if su tutti i nomi dei metodi della mia classe XyzLocalServiceImpl e chiama in questa maniera il metodo della classe XyzLocalServiceUtil che corrisponde all’if

Tutti gli if sono del tipo:

if (_methodName79.equals(name) &&

Arrays.deepEquals(_methodParameterTypes79, parameterTypes)) {

return XyzLocalServiceUtil.metodoDaInvocare(miei parametri);

}


L’ultima istruzione del metodo invokeMethod è


throw new UnsupportedOperationException();


In sostanza, se il metodo invocato (name) corrisponde a uno dei _methodNameXY viene eseguito il metodoDaInvocare e viene eseguito un return del valore restituito dal metodoDaInvocare;se name non corrisponde ad alcun _methodNameXYviene generata un'eccezione.


Se il miometodo ritorna void allora l’if corrispondente generato dal service builder in invokeMethod è

if (_methodName79.equals(name) &&

Arrays.deepEquals(_methodParameterTypes79, parameterTypes)) {

XyzLocalServiceUtil.miometodo (miei parametri);

}

(senza il return) e quindi il invokeMethod non termina e genera l’eccezione UnsupportedOperationException

Dichiarando miometodo non void ma , ad esempio, boolean che restituisce sempre true il SB ci mette un return e la transazione viene conclusa.


hope it helps.

Marcello

Precedente
Commenti
Nessun commento. Vuoi essere il primo.