Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Glassfish上选择CXF而不是Metro_Glassfish_Classpath_Jax Ws_Cxf_Java Metro Framework - Fatal编程技术网

如何在Glassfish上选择CXF而不是Metro

如何在Glassfish上选择CXF而不是Metro,glassfish,classpath,jax-ws,cxf,java-metro-framework,Glassfish,Classpath,Jax Ws,Cxf,Java Metro Framework,在Glassfish下运行企业应用程序时,我(在那里被其他人报告)。在防波堤下,它工作得很好 提到创建META-INF/services/javax.xml.ws.spi.Provider资源,但这已经随CXF提供,在Glassfish下创建额外的资源文件并不能解决此问题 有人知道如何确保在GlassFish下拾取CXF吗? (我正在使用一个带有CXF依赖项2.2.5的Maven多模块项目) 谢谢 提姆 编辑#1 现在跳过这个问题,只使用Metro,但是如果有人有任何建议,我真的很想知道如何使

在Glassfish下运行企业应用程序时,我(在那里被其他人报告)。在防波堤下,它工作得很好

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

有人知道如何确保在GlassFish下拾取CXF吗?
(我正在使用一个带有CXF依赖项2.2.5的Maven多模块项目)

谢谢
提姆


编辑#1

现在跳过这个问题,只使用Metro,但是如果有人有任何建议,我真的很想知道如何使用CXF。。如果什么都不起作用,我可能不得不切换web应用程序容器(或者查看Metro以满足我的需求)


编辑#2

一些解决方案通过在sun-web.xml文件中添加
来详细说明war的修复。但是,这不适用于非war ee应用程序。

Glassfish可能包含Metro(Glassfish的JAX-WS实现)JAR,您可以将它们从类路径中排除吗?因为您使用的是maven,所以应该分析glassfish依赖关系,并对metro JAR使用排除


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


查看()的源代码以查看提供程序的实际加载方式添加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> 

我提出的解决方案(但我并不满意)是使用
JaxWsProxyFactoryBean
。这里有一个例子

这是你必须做的事情的jist:

public static void main(String args[]) throws Exception {

    JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();

    // I didn't need these next 2 calls, but I doubt they hurt
    factory.getInInterceptors().add(new LoggingInInterceptor());
    factory.getOutInterceptors().add(new LoggingOutInterceptor());

    factory.setServiceClass(AuthService.class);
    factory.setAddress("http://localhost:7001/authManager/services/cxfAuth");

    // 'AuthService' is whatever your interface type is
    AuthService client = (AuthService) factory.create();

    Employee employee = client.getEmployee("0223938");
    System.out.println("Server said: " + employee.getLastName() + ", " + employee.getFirstName());
    System.exit(0);

}

很可能是这样,但我不确定如何补救。。我正在上传到GlassFish的是一个编译后的.war,所以Maven排除在编译后仍然有效吗?(即:这些排除会被传递到war并在服务器上使用吗?)。我已经更新了我的帖子。嗯,上面链接的FactoryFinder对理解这个问题很有帮助,但是到目前为止,我还无法使用任何描述的方法解决我的问题。。(.Provider&.properties files&system property)将此文件添加到war web inf目录对我很有用。谢谢我发现同样的问题只存在于ear中的ejb中。我打开了一个悬赏,因为我真的很想听到一些好的答案,而不必重复这个问题,因此我进行了编辑。+1:这是Glassfish的一个坏特性,我目前正面临着
jsf
:Glassfish内置了jsf库,这些库会产生关于代码中包含jsf的冲突。真的很烦人,解决方案值得公开的赏金!我绝对想知道解决方案!也就是说,在一些Glassfish版本中,事情是如何工作的,而在一些版本中,事情不是。你能复制一下解决方案的相关部分吗?外部链接往往会随着时间的推移而中断。。