2009-07-31 9 views
7

Próbuję użyć razem Spring i wx-xmlrpc. Problem polega na tym, że XmlRpcClient ma metodę setConfig(), która nie spełnia specyfikacji Java Bean: setter i getter nie używają tej samej klasy. Więc Wiosna skarg kiedy mam następujący context.xml:Jak używać Spring do wstrzykiwania obiektu w ustawiacz, który nie jest zgodny ze specyfikacją Java bean?

<bean id="xmlRpcClient" class="org.apache.xmlrpc.client.XmlRpcClient"> 
    <property name="config"> 
     <bean class="org.apache.xmlrpc.client.XmlRpcClientConfigImpl"> 
      <property name="serverURL" value="http://example.net" /> 
     </bean> 
    </property> 
</bean> 

mówi: Bean własność „config” nie jest zapisywalny lub ma nieprawidłową metodę seter. Czy typ parametru setera odpowiada typowi powrotu gettera?

Czy istnieje sposób, aby to zmienić? Wiem, że mógłbym napisać konkretną fabrykę tego fasoli, ale wydaje mi się, że nie jest to ostatni raz, kiedy znajduję tego rodzaju problem. Dużo pracuję nad starszym kodem wątpliwej jakości ... Możliwość używania w tym celu konfiguracji Spring XML byłaby wielką pomocą!

Odpowiedz

9

Napisz FactoryBean dla tej klasy i poproś o wywołanie odpowiedniego setera.

+0

Niezupełnie odpowiedź, którą chciałbym mieć, ale jak wydaje się, nie mogę zrobić, co chcę w XML, FactoryBean jest najczystszym rozwiązaniem. – Guillaume

+1

FactoryBeans umożliwiają integrację materiałów niezgodnych z fasolą na wiosnę. To nie jest obejście, to zamierzone rozwiązanie. – skaffman

+0

Wszystkie twoje wpisy z fasoli w XML są na końcu używane do tworzenia betonu BeanFactory. –

2

Nie sądzę, że istnieje sposób na przesłonięcie tego przy użyciu konfiguracji Spring XML.

Alternatywą do użycia fabryki może być utworzenie podklasy XmlRpcClient, która ma pasujący program pobierający i ustawiający dla XmlRpcClientConfig (np. SetClientConfig/getClientConfig). setClientConfig może po prostu wywołać super.setConfig.

Powiązane problemy