首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring3、JAXB2、Java6、NamespacePrefixMapper问题

Spring3、JAXB2、Java6、NamespacePrefixMapper问题
EN

Stack Overflow用户
提问于 2011-01-05 07:04:01
回答 2查看 1.8K关注 0票数 3

我构建了一个简单的Spring3,Hibernate3/(JPA2),RESTful服务,托管在Tomcat6上,它使用JAXB2来编组结果。(它使用带注释的pojos。)我需要使用特定的名称空间前缀,所以我编写了一个自定义的com.sun.xml.bind.marshaller.NamespacePrefixMapper.我将JAXB2 RI jars包含在我的应用程序中,一切工作正常。

然后有人说这很好,我们也需要在WebLogic 11g (10.3.3)下托管它。没问题,我创建了特殊的weblogic部署描述符以偏爱应用程序WAR,重命名为my persistence.xml,并用JPA2 WAR将战争包装在耳朵中。它几乎工作得很好。

不幸的是,我们的WebLogic服务器运行的自定义安全领域也使用JAXB,并导致与我的应用程序发生冲突。因此,我从应用程序中删除了JAXB jar,它在WebLogic中运行得很好。当然,除非我将JAXB jars添加到Tomcat中,否则它将不再在Tomcat下运行。我想避免这种情况。

所以我的问题..。我读过很多关于stackoverflow的帖子,其中包含了很多关于使用sun“内部”JAXB2实现与将RI打包到应用程序中的观点/分歧。这个问题还没有一个干净的解决方案吗?我的堆栈是否支持另一种不包含JAXB2 RI的自定义名称空间前缀映射方式?我可以安全地使用Java6的“内部”Java吗?或者它会随各种NamespacePrefixMapper版本一起出现和消失吗?Spring3是否提供了另一种解决方案?关于Java6 JAXB2实现的真实故事是什么?它是否仅供Sun(Oracle)内部使用?

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2011-01-05 20:41:46

正如评论中提到的,我将总结一下http://www.func.nl/community/knowledgebase/customize-namespace-prefix-when-marshalling-jaxb中提到的内容。

注意:我自己没有尝试过,所以它可能不起作用。

本质上,您将JAXB编组程序配置为在编组时使用XMLStreamWriter,并将其配置为映射前缀,例如

代码语言:javascript
复制
XMLStreamWriter xmlStreamWriter = XMLOutputFactory.newInstance().createXMLStreamWriter(writer);
xmlStreamWriter.setPrefix("func", "http://www.func.nl");

JAXBContext context = JAXBContext.newInstance(object.getClass());
Marshaller marshaller = context.createMarshaller();

marshaller.marshal(object, xmlStreamWriter);

其思想是,如果没有为JAXB提供前缀映射器,那么它将把处理前缀的工作留给XMLStreamWriter,通过执行上述操作,您就可以告诉它如何处理前缀。

再说一次:我只是在重复网站上被屏蔽的内容,所以我不认为它是对的,也不会因为它是错的而责怪它。

票数 0
EN

Stack Overflow用户

发布于 2011-01-27 01:28:17

EclipseLink JAXB (MOXy)将使用@XmlSchema注释中声明的名称空间前缀。

有关详细信息,请参阅:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4599367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档