无法将.war应用程序部署到GlassFish 3.1.2

我有一个.war应用程序模块,可以成功部署,无需任何奇怪的更改和服务器调整。 但是,我无法将此应用程序部署到GF 3.1.2:服务器抛出以下exception:

java.lang.Exception:java.lang.IllegalStateException:ContainerBase.addChild:start:org.apache.catalina.LifecycleException:org.apache.catalina.LifecycleException:java.lang.NoSuchFieldError:theInstance

我做错了什么? 有人建议我吗? 是否有成功部署.war模块的其他设置?

非常感谢提前。

UPD

更精确的日志条目:

javax.xml.bind.JAXBException:无法实例化提供程序com.sun.xml.bind.ContextFactory_1_0_1:javax.xml.bind.JAXBException – 包含链接exception:[java.lang.NoSuchFieldError:theInstance]
– 链接exception:[javax.xml.bind.JAXBException – 带链接exception:[java.lang.NoSuchFieldError:theInstance]]

听起来像是类加载器问题。

您需要在GlassFish JAXB jar之前使用WEB-INF / lib JAXB jar。 或者更改您的应用程序以使用GlassFish 3.1.2捆绑的版本。

Servlet规范说Web应用程序在委托父代之前应该使用本地类加载器。 我认为GlassFish默认委托给Web应用程序的父类加载器。 在web.xml或glassfish-web.xml中使用

请注意,如果不起作用,可能还有其他方法可以修改GlassFish中的类加载器。

在部署到许多应用程序服务器期间,此类问题很常见。 我过去5年多来每天都使用GlassFish,并经常看到这一点。 最近在CloudBees上部署到JBoss时出现了类似的问题,并相应地修改了部署描述符。

谷歌搜索“glassfish更喜欢web-inf / libjar子”。

响应对于以下注释的注释, EJB接口必须驻留在Web模块和EJB模块共享的类路径层次结构中。 如果WEB-INF / lib中有EJB接口jar,EJB模块类路径上有EJB接口jar的另一个副本,则在Web应用程序中注入/定位EJB时会出现ClassCastException。 我认为WebServices有同样的问题。 但是,通过EAR共享EJB接口jar应该可以解决此问题。 请注意,我可能还有其他一些我不知道的问题

您不应该将JAXB jar与您的应用程序捆绑在一起 – Glassfish已经拥有它们,并且它似乎导致了冲突(顺便说一下,我最近一直在挖掘JAXB代码,并且theInstanceMarshallerImpl定义的静态类的一部分)

您应该将所有jar文件放入运行时服务器lib …

此指令适用于GlassFish 3.1.2问题是来自JAXB 2.2.5的运行时类不能向后编译JAXB 1代码。 这个问题已通过JAXB 2.2.6修复,但是,它不是最新的GlassFish版本。 因此,要么等到下一次GlassFish升级,要么手动执行。

我是这样做的,我从GlassFish模块中删除了2个捆绑文件

 C:\glassfish3\glassfish\modules\jaxb-osgi.jar C:\glassfish3\glassfish\modules\endorsed\jaxb-api-osgi.jar 

通过删除所有子文件夹来清除osgi-cache

 C:\glassfish3\glassfish\domains\domain1\osgi-cache 

从ORACLE JAXB下载JAXB 2.2.6

将zip文件解压缩到临时位置[C:\ Java \ jaxb-ri-2.2.6 \ jaxb-ri-2.2.6 \ osgi]

将C:\ Java \ jaxb-ri-2.2.6 \ jaxb-ri-2.2.6 \ osgi \ jaxb-osgi.jar复制到C:\ glassfish3 \ glassfish \ modules \

将C:\ Java \ jaxb-ri-2.2.6 \ jaxb-ri-2.2.6 \ osgi \ jaxb-api-osgi.jar复制到C:\ glassfish3 \ glassfish \ modules \ endorsed \

重启你的服务器…我希望这会有所帮助。 祝好运