java - CXF - ClassCastException (SEIStub/ClientProxy)

标签 java cxf classcastexception

我正在尝试构建一个客户端 jar 文件来访问网络服务。我将 jar 包含在一个 servlet/war 中,它使客户端 web 服务调用。我收到以下错误:

INFO: 2011 Apr 14 14:57:32,780 MDT [http-thread-pool-8181(4)] ERROR     my.package.ClientServlet - Caught exception
java.lang.ClassCastException: com.sun.xml.ws.client.sei.SEIStub cannot be cast to org.apache.cxf.frontend.ClientProxy
at org.apache.cxf.frontend.ClientProxy.getClient(ClientProxy.java:93)
at my.package.Client.<init>(Client.java:54)
at my.package.ClientServlet.testService(TestServlet.java:118)

我看到这篇文章 http://yaytay.wordpress.com/2010/03/06/lsned-29-persuading-jdk-6-to-use-cxf-classes-rather-than-its-own-avoiding-seistub/这表示要解决问题,您需要将 cxf-rt-frontend-jaxws 作为依赖项包含在内,我就是这么做的。所以,这不是我的问题/解决方案。

我的客户端 jar pom 有这些依赖:

<properties>
    <cxf.version>2.3.3</cxf.version>
</properties>
<dependencies>
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-frontend-jaxws</artifactId>
        <version>${cxf.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-ws-security</artifactId>
        <version>${cxf.version}</version>
    </dependency>
</dependencies>

servlet war 在其库中包含以下内容:

asm-3.3.jar
bcprov-jdk15-1.45.jar
commons-logging-1.1.1.jar
cxf-api-2.3.3.jar
cxf-common-schemas-2.3.3.jar
cxf-common-utilities-2.3.3.jar
cxf-rt-bindings-soap-2.3.3.jar
cxf-rt-bindings-xml-2.3.3.jar
cxf-rt-core-2.3.3.jar
cxf-rt-databinding-jaxb-2.3.3.jar
cxf-rt-frontend-jaxws-2.3.3.jar
cxf-rt-frontend-simple-2.3.3.jar
cxf-rt-ws-addr-2.3.3.jar
cxf-rt-ws-security-2.3.3.jar
cxf-tools-common-2.3.3.jar
geronimo-javamail_1.4_spec-1.7.1.jar
jaxb-impl-2.1.13.jar
log4j-1.2.14.jar
neethi-2.0.4.jar
my-client-cxf-1.0.jar
serializer-2.7.1.jar
slf4j-api-1.4.2.jar
slf4j-log4j12-1.4.2.jar
stax2-api-3.0.2.jar
woodstox-core-asl-4.0.8.jar
wsdl4j-1.6.2.jar
wss4j-1.5.11.jar
xalan-2.7.1.jar
xml-resolver-1.2.jar
XmlSchema-1.4.7.jar
xmlsec-1.4.4.jar

我还阅读了一些讨论 javax.xml.ws.spi.Provider 文件的帖子,但未能找到任何详细说明应命名的引用资料,包含和放置。

谁能指出我正确的方向?

最佳答案

解决方案是在 war WEB-INF 中包含一个 sun-web.xml(或 glassfish-web.xml)文件。参见 How to pick CXF over Metro on Glassfish

编辑

glassfish-web.xml 的内容:

<?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'>

<glassfish-web-app>
    <!-- Need this to tell Glassfish not to load the JAX-WS RI classes so it will 
        use the CXF ones instead -->
    <class-loader delegate="false" />
</glassfish-web-app> 

关于java - CXF - ClassCastException (SEIStub/ClientProxy),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5670343/

相关文章:

java - Java实现多重分类

java : How can I cast Date from "Thu May 01 00:00:00 WEST 2014 " to "2014-01-05 00:00:00.0"

apache-spark - Spark 1.6.0 在集群模式下抛出 classcast 异常在本地模式下工作正常

java - 泛型和 ClassCastException : why do I get this exception, 我该如何处理 "work around"呢?

java - 如何使用相同的 log4j 记录器为不同的包创建不同的日志文件?

java - 使用网络 HSM 和 PDFBox 签署 PDF

java - JAXRS/Spring/CXF 端点配置中的合约详细信息——命名空间、PublishedUrl 等

java - 403 禁止将 wss4jOutInterceptor 与 Camel 和 cxf 一起使用

java - 在 java APP (CXF) 中加载 jks 文件

java - Hibernate 类转换异常