栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在多个服务之间重用CXF jaxb上下文

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在多个服务之间重用CXF jaxb上下文

解决该问题的一种可能方法是在spring配置中添加以下内容:

<bean  >    <constructor-arg index="0" value="#{GlobalContextBean.context}"/></bean>

其中的值只是对包含全局(单个)JAXBContext并具有以下方法的bean的引用:

public javax.xml.bind.JAXBContext getContext() {...}

您可以在以下线程中查看更多详细信息(包括CXF专家Daniel Kulp的输入):
Reuse-JAXB-context-in-jaxws

在测试之后,我发现将当前的JAXBDataBinding设置为多个服务的全局实例是行不通的,因为在其initialize方法中有一个“
if”语句,一旦第一个服务设置了上下文,该语句就会返回。
这就是为什么我最终通过扩展类并收集所有必需的服务类和模型来结束。所有服务初始化结束后,我将创建一个具有所有必需类的全局上下文,并将其返回给所有服务。
您可以使用以下类。
初始化所有Web服务之后,调用compileGlobalJAXBContext方法以创建全局上下文。您可以在其中添加应用程序需要的其他类以及错过的初始化。
不要忘记将服务配置为与此bean一起使用。

public class GlobalJAXBDataBinding extends JAXBDataBinding{private Set<Class<?>> globalContextClasses;private boolean contextBuilt = false;public GlobalJAXBDataBinding(Set<Class<?>> classes) {    globalContextClasses = new HashSet<>(classes);    globalContextClasses.add(CPUUID.class);}public GlobalJAXBDataBinding() {}}public synchronized void initialize(Service service) {    if (contextBuilt)        return;    super.initialize(service);    globalContextClasses.addAll(getContextClasses());    super.setContext(null);}public void compileGlobalJAXBContext() {    if (contextBuilt) return;    setContext(JAXBContext.newInstance(globalContextClasses));    contextBuilt *equals* true; }

由于某些奇怪的原因,编辑器不允许我在compileGlobalJAXBContext的最后一行中添加等号,因此只需将等号替换为相关的号即可。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/419330.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号