首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Apache CXF噩梦

Apache CXF噩梦
EN

Stack Overflow用户
提问于 2011-08-17 15:35:55
回答 2查看 4.5K关注 0票数 3

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

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

代码语言:javascript
复制
<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>

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

代码语言:javascript
复制
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似乎在其endoresed目录中安装了旧版本的Xerces,而CXF似乎正在尝试使用。

事实上,我根本不想让CXF涉及到这个spring客户端代码。它之所以在那里,是因为我无法删除遗留代码。无论如何,我都想不出让CXF忽略这个客户端的方法。我无法升级服务器和JDK,也无法删除旧的Xerces。我已经尝试包含更高版本的Xerces,以及广泛的其他XML,希望CXF能够开始使用其中的一个,而不是Xerces,并且我已经尝试了我能找到的任何配置类型更改。但到目前为止,还没有什么有效的方法。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-17 20:15:29

通过Tomcat层次结构中的旧Xerces副本,您已经将该版本的Xerces塞进了CXF的咽喉。您需要在tomcat中升级Xerces --这就是“认可”的工作方式。

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

票数 5
EN

Stack Overflow用户

发布于 2013-05-13 21:50:15

尝试为tomcat服务器使用TomEE 1.5.2,而不是Tomcat7.0.39,TomEE已设置为在库中包含所有jars和所需的所有内容。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7089296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档