我有两个内部客户端库。一个使用JAX-WS RI(我认为它现在是Metro)和另一个Apache CXF。这两个客户端都需要加载到同一个Web App中。两者都无法使用Metro的原因是因为其中一个客户端需要XmlBeans(尽管我最好尝试在XJB上转换模式,但我无法使JAXB工作)。
我猜的明显的解决方案是将其他客户端移植到CXF但是如果我创建一个自定义假Provider
使用ThreadLocal
变量来说明要使用哪个真正的提供者然后使用静态方法在使用客户端之前设置ThreadLocal
变量。
这是个坏主意吗?
答案 0 :(得分:0)
我最终创建了基于ThreadLocal的提供程序,它运行得非常好。
您可以在此gist看到代码。
您可以从JAXWS和CXF切换,如:
强制提供者
ThreadLocalProvider.setProvider(ThreadLocalProvider.JAXWS_RI_PROVIDER);
OR
ThreadLocalProvider.setProvider(ThreadLocalProvider.CXF_PROVIDER);