Verificaţi clasa de iniţializare a fabricii de context JAXB

Această regulă este pentru modificările clasei de iniţializare Java Architecture for XML Binding (JAXB) şi conflictele care pot apărea când se realizează migrarea de la versiunile WebSphere Application Server mai vechi decât V7.0. Există două scenarii de migrare JAXB care au cauzat probleme cu aplicaţiile clientului. Primul se referă la aplicaţiile migrate de la WebSphere 6.1 Feature Pack for Web Services. Al doilea scenariu se referă la aplicaţiile clientului care includ o implementare JAXB şi sunt migrate la WebSphere V7.0 sau versiuni ulterioare.

În WebSphere V7.0, JAXB 2.1 este livrat ca parte a runtime-ului Java 6. Înainte de V7.0, WebSphere 6.1 Feature Pack for Web Services livra JAXB 2.0, care utiliza o clasă de iniţializare diferită de cea utilizată în JAXB 2.1 sau 2.2 (V8.0). Dacă aplicaţia specifică utilizarea vechii clase de iniţializare, pot fi generate excepţii de clasă negăsită atunci când este rulată aplicaţia. Clasa de iniţializare pot fi definită utilizând proprietatea javax.xml.bind.context.factory. Vechea clasă de iniţializare este com.sun.xml.bind.ContextFactory. Dacă pentru proprietatea javax.xml.bind.context.factory este setat numele vechii clase, veţi obţine o java.lang.ClassNotFoundException când sunt utilizate bibliotecile JAXB disponibile cu Java 6.

Această regulă scanează metoda javax.xml.bind.JAXBContext.newInstance care este utilizată pentru a obţine un JAXBContext. Dacă utilizaţi JAXB, ar trebui să vă verificaţi aplicaţia, pentru a vedea dacă utilizează vechea fabrică de context. De asemenea, regula detectează literalii şir "com.sun.xml.bind.ContextFactory" sau "com.sun.xml.bind.DefaultJAXBContextImpl" din codul Java, dar nu scanează fişierele de proprietăţi în care aceste valori sunt adesea setate. Acestea pot fi setate, de asemenea, în proprietățile de sistem Java.

Proprietăţile JAXB sunt de obicei încărcate dintr-un fişier jaxb.properties. Scanaţi-vă manual aplicaţia pentru a determina dacă este definită vechea fabrică de context.

Pentru a scana fișierele de proprietăți în Eclipse, selectați Search > File.... În câmpul Containing text, tastaţi com.sun.xml.bind.ContextFactory. În câmpul File name patterns, tastaţi *.properties. Repetaţi căutarea pentru şirul com.sun.xml.bind.DefaultJAXBContextImpl.

Când se utilizează JAXB în WebSphere V7 sau V8, clasa de iniţializare implicită este com.ibm.xml.xlxp2.jaxb.JAXBContextFactory dacă nu este setată o proprietate javax.xml.bind.context.factory.

Pentru al doilea scenariu, clienţii care au inclus o implementare JAXB în aplicaţia lor înainte de V7 se pot confrunta de asemenea cu problemele deja descrise sau cu modificări de comportament atunci când migrează la WebSphere V7.0 sau o versiune ulterioară. Aceasta se întâmplă când sunt încărcate versiunile JAXB 2.1 sau 2.2 furnizate ca parte a runtime-ului Java, în loc să fie încărcată implementarea JAXB livrată cu aplicaţia. Articolul Activarea unei aplicaţii JAX-WS terţă parte în WebSphere Application Server V7 prezintă un paliativ pentru problemele încărcătorului de clase, dacă vreţi să utilizaţi în continuare implementarea dumneavoastră JAXB.

Pentru informaţii suplimentare, vedeţi următoarele referinţe