Foros de discusión

WebService che restituisce una entity

thumbnail
Marco Azzalini, modificado hace 7 años.

WebService che restituisce una entity

Regular Member Mensajes: 146 Fecha de incorporación: 18/11/14 Mensajes recientes
Ciao, qualche giorno fa, lavorando con Liferay 6.1, ho creato un webservice che a fronte di alcune operazioni restituiva una lista di stringhe. Questo servizio era esposto sia come JSON che tramite Soap tramite le operazioni standard del ServiceBuilder ed entrambe le implementazioni funzionavano regolarmente; quindi fin qui tutto bene.
Mi è stato chiesto poi di estendere il servizio affinché restituisse una lista di oggetti (dei banali java bean con 4 campi di tipo String) anziché semplici stringhe e qui sono nati i problemi !

Ho introdotto una nuova entity nel service.xml
<entity name="UserInfo" local-service="true" remote-service="true">
		<column name="userInfoId" type="int" primary="true" />
		<column name="nome" type="String" />
		<column name="cognome" type="String" />
		<column name="username" type="String" />
		<column name="userId" type="long" />
		
		<finder name="UserInfoId" return-type="UserInfo">
			<finder-column name="userInfoId" />
		</finder>
	</entity>
e poi nell'implementazione del mio service ho modificato il tipo di ritorno, da così
public List<string> getUsersIds(String docId) throws Exception {</string>

a così
public List<userinfo> getUsersIds(String docId) throws Exception {</userinfo>


Dopo aver fatto girare il ServiceBuilder senza problemi, ho rigenerato anche il WSDL che però mi ha dato questo errore:

    [echo]   Java2WSDL it.xxxx.service.http.DocumentationIntegrationWebServiceServiceSoap
     [echo] WARN  [main][Types:1704] The class it.xxxx.model.UserInfo does not contain a default constructor, which is a requirement for a bean class.  The class cannot be converted into an xml schema type.  An xml schema anyType will be used to define this class in the wsdl file.
     ....
     [echo] java.io.IOException: Type {http://model.xxx.it}UserInfo is referenced but not defined.
     ....
BUILD FAILED


ovviamente la classe UserInfo è una interfaccia, ma la sua implementazione ha naturalmente il costruttore di default (anche perché lo aggiunge il compilatore se manca e non ci sono altri costruttori). Essendo quasi tutte classi generate dal SB sinceramente temo ci sia un qualche bug oppure devo specificare qualcosa a livello di entity nel service.xml?
Qualcuno è mai incappato in un problema simile?

ciao e grazie a tutti in anticipo
Marco
thumbnail
Marco Azzalini, modificado hace 7 años.

RE: WebService che restituisce una entity (Respuesta)

Regular Member Mensajes: 146 Fecha de incorporación: 18/11/14 Mensajes recientes
RISOLTO !! emoticon
Mi ha fatto penare un poco ma alla fine grazie anche (e forse sopratutto) ai vecchi post nei vari forum ho trovato la soluzione.
Confermo che si tratta di un bug ed in particolare legato al dover restituire una lista, cioè una collezione, di oggetti in quanto ho appurato che se la nostra operazione si limita a restituire un oggetto singolo, la build fatta da JAVA2WSDL procede senza intoppi.
Detto questo, per poter restituire una collection è necessario utilizzare una classe di appoggio che viene generata dal service builder che si chiama <MiaEntity>Soap, nel mio caso UserInfoSoap. La classe mima la classe base in tutto (metodi, costruttori, etc) e si occupa di alcuni aspetti specifici dell'implementazione Soap. Il fatto che sia assolutamente compatibile con la classe originale, rende facile il passaggio: è stato sufficiente quasi solo modificare il tipo di ritorno del mio metodo
public List<userinfosoap> getUsersIds(String docId) throws Exception {</userinfosoap>

per far si che la creazione del WSDL non desse più problemi; gli oggetti restituiti sono effettivamente corretti ed utilizzabili dal mio client C#.
Non mi resta che ringraziare Giuseppe Pantaleo che in questo vecchio (e lungo) thread in inglese aveva indicato la strada corretta.

ciao
Marco
thumbnail
Daniele Baggio, modificado hace 7 años.

RE: WebService che restituisce una entity

Expert Mensajes: 336 Fecha de incorporación: 5/12/08 Mensajes recientes
Grazie per aver condiviso la soluzione, può tornare utile.