gpt4 book ai didi

spring - Apache CXF 噩梦

转载 作者:行者123 更新时间:2023-12-01 11:56:08 28 4
gpt4 key购买 nike

我有一个基于 Spring Framework 的应用程序,我们之前已成功部署它并正在添加新功能。我们的开发机器是 JDK6 和 Tomcat7。我们正在使用 Spring 3.1.0.M2。旧代码使用 Apache CXF 2.4.1 提供 Web 服务并部署到我们的测试服务器 Tomcat 5.0 和 JDK5。

作为新功能的一部分,我做了这个 spring web 服务客户端定义来访问外部服务

<bean id="urlWebService" class="org.springframework.remoting.jaxws.JaxWsPortProxyFactoryBean">
<property name="serviceInterface" value="au.com.company.app.client.urlservice.UrlWebService" />
<property name="wsdlDocumentUrl" value="http://dev.urlservice-int.services.company.com.au/v1_0/shortener?wsdl" />
<property name="namespaceUri" value="http://urlservice.services.company.com.au/shortener" />
<property name="serviceName" value="GenerateShortenedUrlWebServiceImplService" />
<property name="portName" value="generateShortenedUrlWebServicePort" />
</bean>

但现在当我尝试部署到测试服务器时,我得到:

Caused by: java.lang.AbstractMethodError: org.apache.xerces.dom.ElementNSImpl.setUserData(Ljava/lang/String;Ljava/lang/Object;Lorg/w3c/dom/UserDataHandler;)Ljava/lang/Object;
at org.apache.cxf.staxutils.StaxUtils.addLocation(StaxUtils.java:1083)
at org.apache.cxf.staxutils.StaxUtils.readDocElements(StaxUtils.java:971)
at org.apache.cxf.staxutils.StaxUtils.readDocElements(StaxUtils.java:947)
at org.apache.cxf.staxutils.StaxUtils.read(StaxUtils.java:874)
at org.apache.cxf.wsdl11.WSDLManagerImpl.loadDefinition(WSDLManagerImpl.java:226)
at org.apache.cxf.wsdl11.WSDLManagerImpl.getDefinition(WSDLManagerImpl.java:186)
at org.apache.cxf.wsdl11.WSDLServiceFactory.<init>(WSDLServiceFactory.java:92)
at org.apache.cxf.jaxws.ServiceImpl.initializePorts(ServiceImpl.java:203)
at org.apache.cxf.jaxws.ServiceImpl.<init>(ServiceImpl.java:147)
at org.apache.cxf.jaxws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:90)
at javax.xml.ws.Service.<init>(Service.java:56)
at javax.xml.ws.Service.create(Service.java:697)
at org.springframework.remoting.jaxws.LocalJaxWsServiceFactory.createJaxWsService(LocalJaxWsServiceFactory.java:125)
at org.springframework.remoting.jaxws.JaxWsPortClientInterceptor.prepare(JaxWsPortClientInterceptor.java:334)
at org.springframework.remoting.jaxws.JaxWsPortClientInterceptor.afterPropertiesSet(JaxWsPortClientInterceptor.java:316)
at org.springframework.remoting.jaxws.JaxWsPortProxyFactoryBean.afterPropertiesSet(JaxWsPortProxyFactoryBean.java:42)

我已经研究了两天,并尝试了所有我能用谷歌搜索和想到的方法。 Tomcat 5.0 似乎在其认可的目录中安装了旧版本的 Xerces,而 CXF 似乎正在尝试使用。

现实情况是,我根本不希望 CXF 涉及此 spring 客户端代码。它之所以存在,是因为我无法删除遗留代码。无论如何,我一直无法弄清楚让 CXF 忽略此客户端的方法。我无法升级服务器和 JDK,也无法删除旧的 Xerces。我已经尝试包含更高版本的 Xerces 和范围广泛的其他 XML API,希望 CXF 将开始使用其中之一而不是 Xerces,并且我已经尝试了我能找到的任何配置类型更改。但到目前为止没有任何效果。

有没有人知道如何 (a) 阻止 CXF 将其 Hook 到这个 bean 中?或者 (b) 告诉 CXF 至少不要使用过时的 Xerces?

最佳答案

您已经通过 Tomcat 层次结构中 Xerces 的旧副本迫使该版本的 Xerces 进入 CXF 的喉咙。您需要升级 tomcat 中的 Xerces——这就是“认可”的工作方式。

在 Java 1.5 中,您无法避免将 CXF 用于 Web 服务客户端。没有内置的 JAX-WS 替代方案。如果您在 1.6 中运行,则可以改用内置提供程序。

关于spring - Apache CXF 噩梦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7089296/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com