如何在Glassfish上的Metro上选择CXF

Tim*_*Tim 6 cxf glassfish java-metro-framework jax-ws classpath

我在Glassfish下运行我的企业应用程序时遇到以下问题(由其他人报告).在Jetty下它工作正常.

javax/xml/ws/spi/Provider提到创建META-INF/services/javax.xml.ws.spi.Provider资源,但这已经提供给CXF并且创建一个额外的资源文件并不能解决Glassfish下的这个问题.

有谁知道如何确保在GlassFish下使用CXF?
(我正在使用具有CXF依赖性2.2.5的Maven多模块项目)

谢谢!
蒂姆


编辑#1

暂时解决问题,只是使用Metro,但我真的很想知道如何使用CXF,如果有人有任何指示..如果没有任何作用我可能必须切换Web应用程序容器(或看看Metro填补我的要求)


编辑#2

一些解决方案通过添加<class-loader delegate="false"/>到sun-web.xml文件来详细说明war的修复.但是,这对非战争ee应用程序不起作用.

Nig*_*olf 5

添加一个sun-web.xml并将delegate = false设置为类加载器:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE sun-web-app PUBLIC '-//Sun Microsystems, Inc.//DTD 
Application Server 9.0 Servlet 2.5//EN' 
'http://www.sun.com/software/appserver/dtds/sun-web-app_2_5-0.dtd'> 
<sun-web-app> 
    <class-loader delegate="false"/> 
</sun-web-app> 
Run Code Online (Sandbox Code Playgroud)


Kev*_*vin 1

Metro(Glassfish 的 JAX-WS 实现)jar 可能包含在 Glassfish 中,您可以将它们从类路径中排除吗?由于您使用的是 Maven,因此您应该分析 glassfish 依赖项并使用 Metro jar 的排除项。


看来您需要在 Metro jar 之前将 CXF jar 放在应用程序类路径上。您可能无法修改系统类加载器/类路径,但您可以更改它Thread.currentThread().getContextClassLoader()以使其首先加载 CXF。Glassfish 中还可能有一个类路径设置,您可以修改

查看javax.xml.ws.spi.FactoryFinder#find() 的源代码以了解提供程序实际上是如何加载的