|
|
|
|
Strumenti |
27-03-2010, 23:54 | #1 |
Senior Member
Iscritto dal: Feb 2002
Messaggi: 1370
|
[Axis/tomcat] Problema con la deserializzazione
Ciao a tutti ho un problema con axis.
Ho creato un web service ed ho fatto il deploy su axis 1.4 e da web tutto sembra funzionare, se dalla barra degli indirizzi di firefox richiamo il metodo desiderato passandogli un parametro mi da una risposta corretta (si visualizza una pagina con il messaggio SOAP di risposta che mi aspettavo). Purtroppo non riesco a creare un client java funzionante.Con netbeans creo gli stub, ma solo i metodi che restituiscono tipi semplici come int o boolean funzionano, se richiamo un metodo che richiede tipi complessi ad esempio "getUserProfile(3);", che restituisce il tipo User da me creato, java lancia la seguente eccezione: Codice:
- Exception: org.xml.sax.SAXException: Deserializing parameter 'getUserProfileReturn': could not find deserializer for type {User}User at org.apache.axis.message.RPCHandler.onStartChild(RPCHandler.java:277) at org.apache.axis.encoding.DeserializationContext.startElement(DeserializationContext.java:1035) at org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:165) at org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:1141) at org.apache.axis.message.RPCElement.deserialize(RPCElement.java:345) at org.apache.axis.message.RPCElement.getParams(RPCElement.java:384) at org.apache.axis.client.Call.invoke(Call.java:2467) at org.apache.axis.client.Call.invoke(Call.java:2366) at org.apache.axis.client.Call.invoke(Call.java:1812) at org.apache.axis.client.Call.invoke(Call.java:1727) at client.client.getUserProfile(client.java:119) at client.client.main(client.java:38) Grazie in anticipo, ciao! |
28-03-2010, 10:51 | #2 |
Senior Member
Iscritto dal: Feb 2002
Messaggi: 1370
|
Ok, ho risolto, era solo un problema con le classi generate da netbeans, ho provato a fare tutto a mano e (per ora) sembra funzionare!
Grazie lo stesso, alla prossima! |
29-03-2010, 11:18 | #3 |
Senior Member
Iscritto dal: Feb 2002
Messaggi: 1370
|
Eccomi di nuovo, a quanto pare i problemi non sono stati del tutto risolti.
Questo è il mio file wsdd di deploy: Codice:
<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> <service name="CL" provider="java:RPC"> <parameter name="className" value="CL.CL"/> <parameter name="allowedMethods" value="*"/> </service> <typeMapping xmlns:ns="http://soapinterop.org/xsd" qname="ns:Action" type="java:commObjects.Action" serializer="org.apache.axis.encoding.ser.BeanSerializerFactory" deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" /> <beanMapping qname="ns:User" xmlns:ns="User" languageSpecificType="java:commObjects.User"/> <beanMapping qname="ns:Service" xmlns:ns="Service" languageSpecificType="java:commObjects.Service"/> </deployment> Il deploy va a buon fine tuttavia nel wsdl associato non c'è traccia del bean Action quindi se provo a creare le classi con wsdl2J non mi genera la classe Action. La differenza tra gli altri bean (User e Service) e il bean Action è che quest'ultimo non viene restituito direttamente da un metodo del CL, ma è un oggetto che si trova all'interno di Service. Il problema è che quando richiamo un metodo remoto che restituisce un service viene lanciata una eccezione perché non viene trovato un deserializzatore per Action quindi l'oggetto Service non può essere creato. (Se invece richiamo un metodo remoto che restituisce un User o una lista di User tutto funziona correttamente). Mi date qualche consiglio per risolvere il problema? Come mai Action non viene deployato sul server? C'è un metodo per creare un deserializzatore di Action manualmente? Se richiamo il metodo che restituisce un Service da browser viene visualizzato il messaggio SOAP che viene restituito dal server, questo messaggio è corretto dunque la serializzazione lato server viene effettuata correttamente (anche Action viene serializzato correttamente), il problema dunque è solo lato client. Grazie in anticipo per le risposte. |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 15:50.