2012-09-07 17 views
8

Estoy tratando de encontrar la manera de pasar objetos a SpringMethodInvokingFactoryBean lista de argumentos. Aquí está mi configuración Spring:Pase los parámetros a Spring MethodInvokingFactoryBean lista de argumentos

<bean id="qName" class="javax.xml.namespace.QName"> 
    <constructor-arg index="0" value="${com.groupgti.esb.online.tests.talentq.tns}"/> 
    <constructor-arg index="1" value="${com.groupgti.esb.online.tests.talentq.serviceName}"/> 
</bean> 

<bean id="wsdlUrl" class="java.net.URL"> 
    <constructor-arg index="0" value="${com.groupgti.esb.online.tests.talentq.url}"/> 
</bean> 

<bean id="service" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"> 
    <property name="targetObject"> 
     <bean id="serviceObject" class="com.groupgti.onlinetest.talentq.jaxb.TQIntegrationV2"/> 
    </property> 
    <property name="targetMethod"> 
     <value>create</value> 
    </property> 
    <property name="arguments"> 
     <list> 
      <value type="java.net.URL">wsdlUrl</value> 
      <value type="javax.xml.namespace.QName">qName</value> 
     </list> 
    </property> 
</bean> 

Esto no está funcionando:

<value type="java.net.URL">wsdlUrl</value> 
<value type="javax.xml.namespace.QName">qName</value> 

estoy recibiendo la excepción:

Caused by: org.springframework.beans.TypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'java.net.URL'; nested exception is java.lang.IllegalArgumentException: Could not retrieve URL for OSGi resource[wsdlUrl|bnd.id=573|bnd.sym=com.groupgti.esb.online.tests.talentq]: OSGi resource[wsdlUrl|bnd.id=573|bnd.sym=com.groupgti.esb.online.tests.talentq] cannot be resolved to URL because it does not exist 

Esto se debe a que el parámetro se pasa como String, simplemente wsdlUrl y no como un objeto java.net.URL.

También he intentado esto:

<property name="arguments"> 
    <ref bean="wsdlUrl"/> 
    <ref bean="qName"/> 
</property> 

Esto me da una excepción que ref atributo no es de aquí. Entonces, ¿cómo debería pasar un objeto a la lista de argumentos?

Respuesta

13

Encontré una solución. He tenido que añadir <list> y luego declarar <ref>:

<property name="arguments"> 
    <list> 
     <ref bean="wsdlUrl"/> 
     <ref bean="qName"/> 
    </list> 
</property> 

De esta manera, todo está funcionando.

Cuestiones relacionadas