Verificar a classe de inicialização de factory de contexto JAXB

Esta regra está relacionada a mudanças na classe de inicialização do Java Architecture for XML Binding (JAXB) e conflitos que podem ocorrer ao migrar de versões do WebSphere Application Server anteriores a V7.0. Existem dois cenários de migração JAXB que causaram problemas com os aplicativos do cliente. O primeiro está relacionado aos aplicativos migrados do WebSphere 6.1 Feature Pack para Serviços da Web. O segundo cenário está relacionado aos aplicativos clientes que compactam uma implementação JAXB e estão migrados ao WebSphere V7.0 ou mais recentes.

No WebSphere V7.0, o JAXB 2.1 é enviado como parte do tempo de execução Java 6. Antes de V7.0, o WebSphere 6.1 Feature Pack para Serviços da Web enviava JAXB 2.0 que usava uma classe de inicialização diferente da usada no JAXB 2.1 ou 2.2 (V8.0). Se o aplicativo especificar o uso de uma classe de inicialização antiga, exceções de classe não localizada podem ser geradas quando o aplicativo for executado. A classe de inicialização pode ser definida usando a propriedade javax.xml.bind.context.factory. A antiga classe de inicialização é com.sun.xml.bind.ContextFactory. Se o antigo nome de classe estiver configurado na propriedade javax.xml.bind.context.factory, você receberá uma java.lang.ClassNotFoundException ao usar as bibliotecas JAXB disponíveis com Java 6.

Esta regra faz a varredura para encontrar o método javax.xml.bind.JAXBContext.newInstance que é usado para obter um JAXBContext. Se você estiver usando JAXB, deve verificar seu aplicativo para uso do factory de contexto antigo. A regra também detectará as sequências literais "com.sun.xml.bind.ContextFactory" ou "com.sun.xml.bind.DefaultJAXBContextImpl" no código Java, mas não varre os arquivos de propriedade em que esses valores sejam geralmente configurados. Eles também podem ser configurados nas propriedades de sistema Java.

As propriedades JAXB geralmente são carregadas a partir de um arquivo jaxb.properties. Varra manualmente seus arquivos de propriedade de aplicativo para determinar se o antigo factory de contexto está definido.

Para varrer os arquivos de propriedades no Eclipse, selecione Procurar > Arquivo.... No campo Texto Contido, digite com.sun.xml.bind.ContextFactory. No campo Padrões de Nome do Arquivo, digite *.properties. Repita a procura para cada sequência com.sun.xml.bind.DefaultJAXBContextImpl.

Ao usar JAXB no WebSphere V7 ou V8, a classe de inicialização padrão é com.ibm.xml.xlxp2.jaxb.JAXBContextFactory, se nenhuma propriedade javax.xml.bind.context.factory estiver configurada.

Para o segundo cenário, os clientes que compactaram uma implementação JAXB como parte de seus aplicativos antes de V7 também podem apresentar os problemas recém-descritos ou mudanças de comportamento ao migrar para o WebSphere V7.0 ou mais recente. Isso ocorre quando o JAXB versões 2.1 ou 2.2 fornecido como parte do tempo de execução Java for carregado em vez da implementação JAXB enviada com o aplicativo. O artigo Ativando um aplicativo JAX-WS de terceiros no WebSphere Application Server V7 descreve como trabalhar uma solução alternativa para problemas no carregador de classes se você desejar continuar usando a sua implementação JAXB.

Para obter informações adicionais, consulte as referências a seguir