Tive recentemente que fazer uma prova de conceito, usando web services. Criei uma aplicação usando JAX-WS no JBoss 4.2.2 rodando na JDK 6 da Sun e me deparei um a seguinte exceção:
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.<init>(SOAPMessageImpl.java:83) at org.jboss.ws.core.soap.MessageFactoryImpl.createMessage(MessageFactoryImpl.java:161)
Pesquisando um pouco achei vários relatos similares e até uma entrada no JIRA. A classe SOAPMessage é da biblioteca SAAJ, e o problema é entre o JBoss e a JDK 6. Até a versão 6, essa biblioteca era distruida separadamente, mas na nova versão ela já vem integrada. O problema é que o JBoss já possui uma implementação própria dessa biblioteca e ao se carregar o SOAPMessage a biblioteca da Sun é utilizada, a qual está implementada de forma lançar um UnsupportedOperationException.
Uma solução é usar o esquema de endorsed da JVM. Bibliotecas endorsed são carregadas antes, tendo prioridade então sobre quaisquer outras bibliotecas. Assim, basta adicionarmos o jboss-saaj.jar (em <CONFIG_HOME>/lib) ao <JBOSS_HOME>/lib/endorsed. O script run.sh define a variável JBOSS_ENDORSED_DIRS=”$JBOSS_HOME/lib/endorsed” e cuida de setar esse diretório na propriedade java.endorsed.dirs da JVM.
Mas eu estou rodando o JBoss para JDK 6! (EDIT)
Existe uma “peculiaridade” se você estiver rodando o JBoss 5 para JDK 6 no WTP do Eclipse. O JBoss 5 usa o $JBOSS_HOME/lib/endorsed como o java.endorsed.dirs, setando esse parâmetro quando executamos o $JBOSS_HOME/bin/run.sh. O problema quando executamos via WTP é que o eclipse não usar o run.sh, portanto não seta o diretório endorsed e caímos no mesmo problema do JBoss 4.
Para resolver o problema basta clicar no “launch configuration” do servidor e adicionar o seguinte parâmetro no “VM arguments”:
-Djava.endorsed.dirs=../lib/endorsed
IMPORTANTE: O JBoss não é oficialmente suportado na JDK 6 e outros imprevistos podem vir a ocorrer. Recomenda-se utilizar a JDK 5, ao invés.



