23 de janeiro de 2010

Incopatilbilidade entre as versões do Java 6 e o servidor J-BOSS 4.2.3.GA

Olá pessoal;

Estou aqui para postar um problema de incompatibilidade entre as versões do Java 6 e o J-BOSS 4.2.3.GA ao tentar acessar um determinado WebService.
Durante o desenvolvimento de um determinado projeto, precisei em um dado momento consumir um certo WebService governamental a partir de seu WSDL e em seguida, acessá-lo.
Até consumir não tive problemas, mas ao iniciar o servidor de aplicação, me foi retornada a seguinte exception:


"java.lang.UnsupportedOperationException: setProperty must be overridden by all subclasses of SOAPMessage
at javax.xml.soap.SOAPMessage.setProperty(SOAPMessage.java:424)
at org.jboss.ws.core.soap.SOAPMessageImpl.(SOAPMessageImpl.java:83)
at org.jboss.ws.core.soap.MessageFactoryImpl.createMessage(MessageFactoryImpl.java:161)

I found that the jbossws-native-saaj.jar library has an OVERWRITTEN class javax.xml.soap.SOAPMessage which has overrided the method setProperty():
"

Após alguma pesquisa e várias tentativas consegui isolar o problema e entendê-lo. A forma encontrada para solucionar o problema foi movendo a api "jboss-saaj.jar" geralmente localizada na biblioteca"client" para a biblioteca"endorsed" localizada dentro do diretório "lib", logo no primeiro nível. Ex: "/lib/endorsed>"
Dessa forma a exception é desconsiderada.
A explicação para esse problema se dá ao fato de que na versão atual da SUN (Java 6) essa api já vem implementada. Ao iniciar a aplicação para tentar acessar o WebService requerido, a classe SOAPMessage da SUN (protocolo SOAP) que se encontra na api "jboss-saaj.jar" é utilizada, causando a exception.
A solução é carregar essa api "jboss-saaj.jar" antes da JDK, adicionando-a na biblioteca "endorsed" do servidor de aplicação, conforme falei.
Dessa forma a prioridade são as apis que se encontram nessa biblioteca. Ao iniciar o servidor de aplicação, "sempre" serão iniciadas as apis que se encontram na biblioteca "endorsed" do servidor antes das apis da JDK, resolvendo o conflito de apis.
Espero ter ajudado.

Arthur Gomes.