Lo + Leído
Eventos destacados
Artículos para tus primeros pasos
Si estás empezando a introducirte en el mundo de Groovy y Grails, no te pierdas nuestros artículos básicos:
- Introducción a Groovy, parte 1 (Andrés Almiray)
- Introducción a Groovy, parte 2 (Andrés Almiray)
- Introducción a Groovy, parte 3 (Andrés Almiray)
- Introducción a Grails (Material Seminario ImaginaWorks)
Los protagonistas te cuentan de qué van los proyectos más importantes del mundo Groovy:
Grails
Problema con wsClient
Pablo Betancor - martes 16/03/2010Hola tengo el siguiente problema con la clase wsClient de groovyx.net.ws:
Tengo un servicio que instancia el proxy de la siguiente forma:
def proxy = new WSClient('miContrato.wsdl', grailsApplication.classLoader)
Si instancio el proxy cada vez que quiero realizar una operación sobre el webservice no tengo problemas y todo funciona correctamente.
El problema aparece cuando hago que el proxy sea una propiedad que se inicialice sólo una vez junto al singleton (ya que estar instanciandolo cada vez que quiera realizar una operación es un gasto muy elevado de tiempo), en este caso cuando voy a llamar a las operaciones del webservice me da un error de marshalling indicando que no encuentra las clases que se generan dinámicamente desde el webservice y las cuales utilizo como requests y responses.
Me imagino que será un problema del classloader ya que no encuentra las clases. También he probado a cambiar 'grailsApplication.classLoader' por 'this.getClass().getClassLoader()' o por 'ApplicationHolder.application.classLoader' y tampoco funciona.
Gracias y saludos
Re: Problema con wsClient
Pablo Betancor - jueves 18/03/2010la solución:
http://jira.codehaus.org/browse/GMOD-85?focusedCommentId=210192&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#action_210192
Re: Problema con wsClient
Pablo Betancor - miércoles 17/03/2010[code]
def proxy = new WSClient(wsdlLocation, grailsApplication.getClassLoader())
proxy.initialize()
def myRequest = proxy.create('myNamespace.myRequest');
myRequest.setParams(myParams)
def myResponse = proxy.MyOperation(myRequest)
[/code]
pero si inicializo el proxy en un servicio sólo una vez, la última línea falla
[code]
def proxy = myService.getProxy() // funciona
def myRequest = proxy.create('myNamespace.myRequest'); // funciona
myRequest.setParams(myParams) // funciona
def myResponse = proxy.MyOperation(myRequest) // da un error
[/code]
el error:
org.apache.cxf.interceptor.Fault: Marshalling Error: class myNamespace.myRequest nor any of its super class is known to this context.