XML Konfigurace Springu a null reference jako výsledek

Phi

Dobrý den, teď jsem narazil v kontextu jedné aplikace
Kód: [Vybrat]
<property name="foo" ref ="#{ ${fooproperty:false}?'beanid':null}" /> a je to špatně, pokud není fooproperty true, Spring se kouká po beanu s id "null".
Googlil jsem, četl dokumentaci SpELu, ba i na StackOverflow došlo, ale pořád nevím jak to napsat. A jestli to vůbec jde. Třeba trpím nějakou slepotou, takže - nevíte někdo jak tuhle konstrukci napsat validně? (Prosím nestřilejte nějaké "myslím, že...",  opravdu jsem tenhle dotaz nepsal po pěti minutách pokusů).


Re:XML Konfigurace Springu a null reference jako výsledek
« Odpověď #1 kdy: 27. 11. 2017, 16:59:30 »
Zapomněl jste napsat, co má být výsledkem. Z nevalidní konstrukce to můžeme jenom hádat… Chcete, aby když nemá fooproperty hodnotu false, aby se do property nastavilo null?

Já si myslím (sic!), že to pomocí reference nejde – kdybyste tam chtěl vložit null přímo, musel byste použít vnořený tag <null/>. Ono by se v tom konfiguračním XML nemělo programovat, podmíněnou konfiguraci je lepší řešit profily nebo konfigurací v kódu.

anonym

Re:XML Konfigurace Springu a null reference jako výsledek
« Odpověď #2 kdy: 27. 11. 2017, 17:01:57 »
No já myslím, že by ses měl podívat do oficiální dokumentace Springu, je to komunitní projekt a ta se o Spring stará. Ikdyž počkat. Tam je vlastně tak akorát kulový, jako v každé dokumentaci k nějaké opensource splátanině. Tak nic no, snad jsem byl alespoň trochu nápomocen.

Opravdu jsem zvědavý, co ti na tohle kdo řekne, protože v dokumentaci od Springu nejsou i mnohem základnější věci než tahle specialita.

anonym

Re:XML Konfigurace Springu a null reference jako výsledek
« Odpověď #3 kdy: 27. 11. 2017, 17:05:04 »
Zapomněl jste napsat, co má být výsledkem. Z nevalidní konstrukce to můžeme jenom hádat…

A už je tady pan Jirsák a hned první věc, co řekne, že může jenom hádat, co tím autor chtěl říct. Přitom je úplně jasné, co tazatel chce udělat. Ale to by jinak nebyl pan Jirsák.

Phi

Re:XML Konfigurace Springu a null reference jako výsledek
« Odpověď #4 kdy: 27. 11. 2017, 17:40:58 »
Zapomněl jste napsat, co má být výsledkem. Z nevalidní konstrukce to můžeme jenom hádat… Chcete, aby když nemá fooproperty hodnotu false, aby se do property nastavilo null?
Najdi systémovou property "foo" (s defaultem "false"),  vyhodnot jako boolean a při true vrať referenci na bean, při false null.
Je to napraseny hned na dvou levlech, nicméně až na to vrácení null to funguje. Zřejmě roky.

Citace
Já si myslím (sic!), že to pomocí reference nejde – kdybyste tam chtěl vložit null přímo, musel byste použít vnořený tag <null/>. Ono by se v tom konfiguračním XML nemělo programovat, podmíněnou konfiguraci je lepší řešit profily nebo konfigurací v kódu.
Já si taky myslím, že to nejde a mělo by se přepsat, ale teď už mne to zajímá čistě z akademického hlediska. Akorát mne děsí, že ji budu zřejmě hledat ve zdrojaku Springu.
Kde je javaman, když člověk konečně potřebuje Java gurua.


Jaro

Re:XML Konfigurace Springu a null reference jako výsledek
« Odpověď #5 kdy: 27. 11. 2017, 23:48:45 »
No já myslím, že by ses měl podívat do oficiální dokumentace Springu, je to komunitní projekt a ta se o Spring stará. Ikdyž počkat. Tam je vlastně tak akorát kulový, jako v každé dokumentaci k nějaké opensource splátanině. Tak nic no, snad jsem byl alespoň trochu nápomocen.

Opravdu jsem zvědavý, co ti na tohle kdo řekne, protože v dokumentaci od Springu nejsou i mnohem základnější věci než tahle specialita.

Každé vlákno potrebuje nejakého blbečka. Blahoželám.

Trollopata

Re:XML Konfigurace Springu a null reference jako výsledek
« Odpověď #6 kdy: 28. 11. 2017, 00:17:49 »
No já myslím, že by ses měl podívat do oficiální dokumentace Springu, je to komunitní projekt a ta se o Spring stará. Ikdyž počkat. Tam je vlastně tak akorát kulový, jako v každé dokumentaci k nějaké opensource splátanině. Tak nic no, snad jsem byl alespoň trochu nápomocen.

Opravdu jsem zvědavý, co ti na tohle kdo řekne, protože v dokumentaci od Springu nejsou i mnohem základnější věci než tahle specialita.

Každé vlákno potrebuje nejakého blbečka. Blahoželám.
A bez lovce trollů by se to taky neobešlo ;-)

kimec

Re:XML Konfigurace Springu a null reference jako výsledek
« Odpověď #7 kdy: 28. 11. 2017, 01:05:27 »
Zapomněl jste napsat, co má být výsledkem. Z nevalidní konstrukce to můžeme jenom hádat… Chcete, aby když nemá fooproperty hodnotu false, aby se do property nastavilo null?
Najdi systémovou property "foo" (s defaultem "false"),  vyhodnot jako boolean a při true vrať referenci na bean, při false null.
Je to napraseny hned na dvou levlech, nicméně až na to vrácení null to funguje. Zřejmě roky.

Citace
Já si myslím (sic!), že to pomocí reference nejde – kdybyste tam chtěl vložit null přímo, musel byste použít vnořený tag <null/>. Ono by se v tom konfiguračním XML nemělo programovat, podmíněnou konfiguraci je lepší řešit profily nebo konfigurací v kódu.
Já si taky myslím, že to nejde a mělo by se přepsat, ale teď už mne to zajímá čistě z akademického hlediska. Akorát mne děsí, že ji budu zřejmě hledat ve zdrojaku Springu.
Kde je javaman, když člověk konečně potřebuje Java gurua.
Evidentne mixujete property placeholder so SpELom... Rychli kuk na StackOverflow hovori, ze nie ste prvy koho to napadlo.

Kazdopadne, za seba vam mozem povedat, ze keby ste mi to poslali na code review, tak vam zlomim ruky. Pozdravujem vasich kolegov, ktory to budu udrziavat a dufam, ze toto vlakno o par rokov najde aj ten vas (budci) kolega, ktory sa s tym bude trapit v tom case.

Kodu typu "podme to urobit na kretena, lebo sa to da" som v poslednej dobe videl viac nez by som si zelal a tiez podobne (ne)fungoval, ako ten vas priklad...

Re:XML Konfigurace Springu a null reference jako výsledek
« Odpověď #8 kdy: 28. 11. 2017, 07:03:38 »
Evidentne mixujete property placeholder so SpELom...
V tom ale není problém. Problém je v tom, že potřebuje vložit null hodnotu – která se normálně vkládá pomocí elementu <null/>. V ref je ale název odkazovaného beanu, takže string. Cokoli jiného, než string, se na string převede – a null se převede na string "null".

Napadlo mne, zda by místo ref nešlo použít value. Je to obecná hodnota, ne název beanu, tak by tam null možná mohlo projít.

anonym

Re:XML Konfigurace Springu a null reference jako výsledek
« Odpověď #9 kdy: 28. 11. 2017, 07:41:31 »
Evidentne mixujete property placeholder so SpELom...
V tom ale není problém. Problém je v tom, že potřebuje vložit null hodnotu – která se normálně vkládá pomocí elementu <null/>. V ref je ale název odkazovaného beanu, takže string. Cokoli jiného, než string, se na string převede – a null se převede na string "null".

Napadlo mne, zda by místo ref nešlo použít value. Je to obecná hodnota, ne název beanu, tak by tam null možná mohlo projít.

Ty jsi nejak moc chytry, to null se neprevede na string, nobrz na jmeno beany.

Phi

Re:XML Konfigurace Springu a null reference jako výsledek
« Odpověď #10 kdy: 28. 11. 2017, 07:43:20 »
Zapomněl jste napsat, co má být výsledkem. Z nevalidní konstrukce to můžeme jenom hádat… Chcete, aby když nemá fooproperty hodnotu false, aby se do property nastavilo null?
Najdi systémovou property "foo" (s defaultem "false"),  vyhodnot jako boolean a při true vrať referenci na bean, při false null.
Je to napraseny hned na dvou levlech, nicméně až na to vrácení null to funguje. Zřejmě roky.

Citace
Já si myslím (sic!), že to pomocí reference nejde – kdybyste tam chtěl vložit null přímo, musel byste použít vnořený tag <null/>. Ono by se v tom konfiguračním XML nemělo programovat, podmíněnou konfiguraci je lepší řešit profily nebo konfigurací v kódu.
Já si taky myslím, že to nejde a mělo by se přepsat, ale teď už mne to zajímá čistě z akademického hlediska. Akorát mne děsí, že ji budu zřejmě hledat ve zdrojaku Springu.
Kde je javaman, když člověk konečně potřebuje Java gurua.
Evidentne mixujete property placeholder so SpELom... Rychli kuk na StackOverflow hovori, ze nie ste prvy koho to napadlo.

Kazdopadne, za seba vam mozem povedat, ze keby ste mi to poslali na code review, tak vam zlomim ruky. Pozdravujem vasich kolegov, ktory to budu udrziavat a dufam, ze toto vlakno o par rokov najde aj ten vas (budci) kolega, ktory sa s tym bude trapit v tom case.

Kodu typu "podme to urobit na kretena, lebo sa to da" som v poslednej dobe videl viac nez by som si zelal a tiez podobne (ne)fungoval, ako ten vas priklad...
Z předchozího vyplývá, že se jedná o nějaký z#@! legacy. Pokud na diskuzi nemáte ani znalosti ani schopnost chápat psaný text, raději nic nepište.

anonym

Re:XML Konfigurace Springu a null reference jako výsledek
« Odpověď #11 kdy: 28. 11. 2017, 08:07:22 »
Phi, tak tam nech to null. Kdyz takova beana neexistuje, tak to bude null.

Phi

Re:XML Konfigurace Springu a null reference jako výsledek
« Odpověď #12 kdy: 28. 11. 2017, 08:24:39 »
Phi, tak tam nech to null. Kdyz takova beana neexistuje, tak to bude null.
Ne, bude z toho exception.

Re:XML Konfigurace Springu a null reference jako výsledek
« Odpověď #13 kdy: 28. 11. 2017, 09:08:37 »
Ak je to v projekte takto uvedené, tak to nemôže fungovať. Atribút ref sa musí resolvnúť na String reprezentujúci názov beanu. Preto Spring protestuje, že sa nedá nájsť bean s identifikátorom null (teda "n, u, l, l").

Teraz opomeniem situáciu, že toto sa rieši úplne inak (napr. profily), ale ak sa chceme kumulovať divné riešenia na divné riešenia, tak mu tam ten bean môžeme vyrobiť :-)

Kód: [Vybrat]
   
<bean class="cz.root.foo.FooService">
    <property name="foo" ref="#{ '${fooproperty:false}' ? 'beanid' : null }" />
</bean>

<bean id="beanid" class="cz.root.foo.Foo"/>

<bean id="null" class="cz.root.foo.NullFactoryBean"/>

Potrebujeme bean, ktorý je de facto ekvivalentný null, takže si ho vyrobme cez továreň:

Kód: [Vybrat]
public class NullFactoryBean implements FactoryBean<Object> {
    public Object getObject() throws Exception {
        return null;
    }

    public Class<?> getObjectType() {
        return Object.class;
    }

    public boolean isSingleton() {
        return true;
    }
}

Ak je v projekte bieda, tak aj tá rozhodovacia logika, ktorý bean vyrobiť, sa dá napchať do továrne.
« Poslední změna: 28. 11. 2017, 09:10:36 od novotnyr »

Honza

Re:XML Konfigurace Springu a null reference jako výsledek
« Odpověď #14 kdy: 28. 11. 2017, 10:12:51 »
A neslo by tohle?

Kód: [Vybrat]
<bean class="cz.root.foo.FooService">
    <property name="foo">
        <null />
    </property>
</bean>