我构建了一个简单的 Spring3、Hibernate3/(JPA2)、RESTful 服务,托管在 Tomcat6 上,它使用 JAXB2 来编组结果。(它使用带注释的 pojo。)我需要使用特定的命名空间前缀,所以我编写了一个自定义的 com.sun.xml.bind.marshaller.NamespacePrefixMapper。我在我的应用程序中包含了 JAXB2 RI jar,一切正常。
然后有人说很好,我们也需要在WebLogic 11g(10.3.3)下托管它。没问题,我创建了特殊的 weblogic 部署描述符来首选应用程序 jar,重命名我的 persistence.xml,并将 WAR 包装在带有 JPA2 jar 的 EAR 中。它工作得很好,几乎。
不幸的是,我们的 WebLogic 服务器运行一个自定义安全领域,该领域也使用 JAXB 并导致与我的应用程序发生冲突。所以我从应用程序中删除了 JAXB jar,它在 WebLogic 中运行良好。当然,除非我将 JAXB jar 添加到 Tomcat,否则它不再在 Tomcat 下运行。我想避免这种情况。
所以我的问题......我已经阅读了很多关于 stackoverflow 的帖子,其中包含很多关于使用 sun“内部”JAXB2 实现与将 RI 与您的应用程序打包的意见/分歧。这个问题还没有干净的解决方案吗?我的堆栈是否支持在不包括 JAXB2 RI 的情况下自定义映射我的命名空间前缀的另一种方式?我可以安全地使用 Java6“内部”JAXB NamespacePrefixMapper,还是会随各种 Java 版本一起出现?Spring3 是否提供另一种解决方案?Java6 JAXB2 实现的真实故事是什么?它只供 Sun(Oracle)内部使用吗?
谢谢。