Problema Struts + Weblogic10 = Resolvido

Galera tenho uma aplicação rodando no weblogic 8.1 mais o cliente decidiu migrar pra o weblogic10, achei que a aplicação iria rodar sem problemas mais ela apresenta o seguinte erro quando tenho subir.

[HTTP:101216]Servlet: “StartupServlet” failed to preload on startup in Web application: “sispe.war”. java.lang.IllegalAccessError: tried to access method com.sun.xml.bind.DatatypeConverterImpl.<init>()V from class com.sun.xml.bind.DefaultJAXBContextImpl at com.sun.xml.bind.DefaultJAXBContextImpl.<init>(DefaultJAXBContextImpl.java:60) at com.sun.xml.bind.ContextFactory.createContext(ContextFactory.java:27) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:142) at javax.xml.bind.ContextFinder.find(ContextFinder.java:259) at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:372) at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:337) at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:244) at br.com.cit.caf.core.config.Config.createCafConfig(Config.java:176) at br.com.cit.caf.core.config.Config.init(Config.java:106) at br.com.petrobras.sispe.startup.StartupServlet.init(StartupServlet.java:38) at weblogic.servlet.internal.StubSecurityHelper$ServletInitAction.run(StubSecurityHelper.java:282) at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321) at weblogic.security.service.SecurityManager.runAs(Unknown Source) at weblogic.servlet.internal.StubSecurityHelper.createServlet(StubSecurityHelper.java:63) at weblogic.servlet.internal.StubLifecycleHelper.createOneInstance(StubLifecycleHelper.java:58) at weblogic.servlet.internal.StubLifecycleHelper.<init>(StubLifecycleHelper.java:48) at weblogic.servlet.internal.ServletStubImpl.prepareServlet(ServletStubImpl.java:504) at weblogic.servlet.internal.WebAppServletContext.preloadServlet(WebAppServletContext.java:1830) at weblogic.servlet.internal.WebAppServletContext.loadServletsOnStartup(WebAppServletContext.java:1807) at weblogic.servlet.internal.WebAppServletContext.preloadResources(WebAppServletContext.java:1727) at weblogic.servlet.internal.WebAppServletContext.start(WebAppServletContext.java:2890) at weblogic.servlet.internal.WebAppModule.startContexts(WebAppModule.java:948) at weblogic.servlet.internal.WebAppModule.start(WebAppModule.java:353) at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:204) at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:26) at weblogic.application.internal.flow.ModuleStateDriver.start(ModuleStateDriver.java:60) at weblogic.application.internal.flow.ScopedModuleDriver.start(ScopedModuleDriver.java:200) at weblogic.application.internal.flow.ModuleListenerInvoker.start(ModuleListenerInvoker.java:117) at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:204) at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:26) at weblogic.application.internal.flow.ModuleStateDriver.start(ModuleStateDriver.java:60) at weblogic.application.internal.flow.StartModulesFlow.activate(StartModulesFlow.java:26) at weblogic.application.internal.BaseDeployment$2.next(BaseDeployment.java:635) at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:26) at weblogic.application.internal.BaseDeployment.activate(BaseDeployment.java:212) at weblogic.application.internal.DeploymentStateChecker.activate(DeploymentStateChecker.java:154) at weblogic.deploy.internal.targetserver.AppContainerInvoker.activate(AppContainerInvoker.java:80) at weblogic.deploy.internal.targetserver.operations.AbstractOperation.activate(AbstractOperation.java:566) at weblogic.deploy.internal.targetserver.operations.ActivateOperation.activateDeployment(ActivateOperation.java:136) at weblogic.deploy.internal.targetserver.operations.ActivateOperation.doCommit(ActivateOperation.java:104) at weblogic.deploy.internal.targetserver.operations.StartOperation.doCommit(StartOperation.java:139) at weblogic.deploy.internal.targetserver.operations.AbstractOperation.commit(AbstractOperation.java:320) at weblogic.deploy.internal.targetserver.DeploymentManager.handleDeploymentCommit(DeploymentManager.java:816) at weblogic.deploy.internal.targetserver.DeploymentManager.activateDeploymentList(DeploymentManager.java:1223) at weblogic.deploy.internal.targetserver.DeploymentManager.handleCommit(DeploymentManager.java:434) at weblogic.deploy.internal.targetserver.DeploymentServiceDispatcher.commit(DeploymentServiceDispatcher.java:161) at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer.doCommitCallback(DeploymentReceiverCallbackDeliverer.java:181) at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer.access$100(DeploymentReceiverCallbackDeliverer.java:12) at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer$2.run(DeploymentReceiverCallbackDeliverer.java:67) at weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:464) at weblogic.work.ExecuteThread.execute(ExecuteThread.java:200) at weblogic.work.ExecuteThread.run(ExecuteThread.java:172)

Alguem sabe o que poder ser isso ???

vlw…

Pergunta - será que você não tem de regerar alguma coisa (usando xjc ou sei lá o que você usou para JAXB) nessa versão do WebLogic, ou seja, em vez de simplesmente montar o JAR no WebLogic 8 e dar um deploy, você tem de montar o JAR no WebLogic Studio da versão 10?

É só um chute.

kra olhei aki e o erro ocorre qndo tento instanciar o parser do xml nessa linha aki

JAXBContext jc = JAXBContext.newInstance( "br.com.cit.caf.core.config.xml" );

pelo que vi aki essa linha tenta criar um objeto do tipo com.sun.xml.bind.ContextFactory e essa classe eh do jaxb-ri.jar.

Encontrei a solução:

No classpath do weblogic tinha um jar do JAXB da versão 2 e o meu projeto usava a versão 1 do JAXB com isso o weblogic dava preferência para o jar do classpath dele ignorando o meu jar que estava no WEB-INF/lib, para resolver o problema é só incluir a configuração no weblogic.xml do seu projeto como no exemplo abaixo.

&lt;?xml version='1.0' encoding='UTF-8'?&gt;
&lt;weblogic-web-app xmlns="http://www.bea.com/ns/weblogic/90"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&gt;

	&lt;jsp-descriptor&gt;
		&lt;page-check-seconds&gt;1&lt;/page-check-seconds&gt;
		&lt;verbose&gt;true&lt;/verbose&gt;
	&lt;/jsp-descriptor&gt;

	&lt;container-descriptor&gt;
		&lt;!-- Faz o weblogic dar preferencia para as classes e libs que estao dentro do WEB-INF --&gt;
		&lt;prefer-web-inf-classes&gt;true&lt;/prefer-web-inf-classes&gt;
	&lt;/container-descriptor&gt;
	
	&lt;context-root&gt;sispe&lt;/context-root&gt;
	
&lt;/weblogic-web-app&gt;

Flw…

Olá daniloh,

Acredito que esta não é uma solução adequada. O Weblogic apresenta instabilidade e problemas de segurânça no acesso ao pool de conexões após o primeiro boot quando alguma aplicação coloca a referida tag para tal lib.

Atenciosamente,

Walter D’Avila Neto

[quote=thingol]Pergunta - será que você não tem de regerar alguma coisa (usando xjc ou sei lá o que você usou para JAXB) nessa versão do WebLogic, ou seja, em vez de simplesmente montar o JAR no WebLogic 8 e dar um deploy, você tem de montar o JAR no WebLogic Studio da versão 10?

É só um chute.
[/quote]

No site do JAXB diz: (https://jaxb.dev.java.net/nonav/2.1.3/docs/jaxb-1_0.html disponível em 12/05/2009)
“JAXB 2.0 is backwards compatible with JAXB 1.0 - you can deploy your existing 1.0 applications on the 2.0 runtime (provided that you also bundle the jaxb1-impl.jar) and they should run without modification.”

Então, acrescentando o jaxb1-impl.jar no classpath, acredito que não é preciso regerar nada não.