Questa regola è relativa alle modifiche alla classe di inizializzazione JAXB (Java Architecture for XML Binding) ed ai conflitti che possono verificarsi durante la migrazione dalle versioni di WebSphere Application Server precedenti alla V7.0. I problemi relativi alle applicazioni customer sono stati causati in due scenari di migrazione JAXB. Il primo è relativo alle applicazioni migrate da WebSphere 6.1 Feature Pack for Web Services. Il secondo scenario è relativo alle applicazioni customer che creano un package di un'implementazione JAXB e vengono migrate in WebSphere V7.0 o versioni successive.
In WebSphere V7.0, JAXB 2.1 viene fornito come parte del runtime Java 6.
Prima della V7.0, WebSphere 6.1 Feature Pack for Web Services forniva JAXB 2.0
che utilizzava una classe di inizializzazione differente da quella utilizzata in JAXB 2.1 o 2.2 (V8.0).
Se l'applicazione specifica di utilizzare la classe di inizializzazione precedente, al momento dell'esecuzione
dell'applicazione possono essere generate eccezioni di classe non trovata.
La classe di inizializzazione può essere definita utilizzando la proprietà javax.xml.bind.context.factory. La classe di inizializzazione precedente è com.sun.xml.bind.ContextFactory.
Se nella proprietà javax.xml.bind.context.factory è impostato il nome della classe precedente, viene
generata un'eccezione java.lang.ClassNotFoundException quando vengono utilizzate le librerie JAXB
disponibili con Java 6.
Questa regola esegue la scansione del metodo javax.xml.bind.JAXBContext.newInstance utilizzato per ottenere
un JAXBContext. Se si utilizza JAXB, è necessario verificare nell'applicazione
l'utilizzo della factory di contesto precedente. La regola rileva anche i letterali stringa
"com.sun.xml.bind.ContextFactory" o "com.sun.xml.bind.DefaultJAXBContextImpl" nel codice Java,
ma non esegue la scansione dei file delle proprietà in cui questi valori sono spesso impostati.
Possono essere impostati anche a livello delle proprietà di sistema Java.
Le proprietà JAXB sono generalmente caricate da un file jaxb.properties. Eseguire la scansione
manuale dei file delle proprietà dell'applicazione per determinare se è definita la factory di contesto precedente.
Per eseguire la scansione dei file delle proprietà in Eclipse, selezionare Cerca > File....
Nel campo Testo contenuto, immettere com.sun.xml.bind.ContextFactory.
Nel campo Modelli nome file, immettere *.properties.
Ripetere la ricerca per la stringa com.sun.xml.bind.DefaultJAXBContextImpl.
Quando si utilizza JAXB in WebSphere V7 o V8, la classe di inizializzazione predefinita è
com.ibm.xml.xlxp2.jaxb.JAXBContextFactory se non è impostata alcuna proprietà
javax.xml.bind.context.factory.
Per il secondo scenario, i clienti che hanno creato un package di un'implementazione JAXB come parte della propria applicazione prima della V7 possono rilevare i problemi appena descritti o modifiche al comportamento durante la migrazione a WebSphere V7.0 o versioni successive. Ciò si verifica quando vengono caricate le versioni JAXB 2.1 o 2.2 fornite come parte del runtime Java invece dell'implementazione JAXB fornita con l'applicazione. L'articolo Enabling a third-party JAX-WS application in WebSphere Application Server V7 descrive come risolvere temporaneamente i problemi relativi al programma di caricamento classi se si desidera continuare ad utilizzare la propria implementazione JAXB.
Per ulteriori informazioni, consultare i riferimenti riportati di seguito