我有一个基于Spring框架的应用程序,我们以前已经部署成功并添加了新功能。我们的开发机器是JDK6和Tomcat7。我们使用Spring 3.1.0.M2。旧代码使用Apache CXF 2.4.1提供Web服务并部署到我们的Tomcat 5.0和JDK5测试服务器上。Apache CXF梦魇
随着新功能我做这个春天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参与这个春天的客户端代码。它只是因为我无法删除的遗留代码。无论如何,我一直无法弄清楚CXF忽视这个客户的方式。我无法升级服务器和JDK,或者删除旧的Xerces。我试图包含更高版本的Xerces以及其他各种各样的XML API,希望CXF能够开始使用其中的一个而不是Xerces,并且我尝试了任何可以找到的配置类型更改。但迄今为止没有任何工作。
有没有人有任何想法如何(一)阻止CXF获取它挂钩到这个bean?或(b)告诉CXF至少不使用过期的Xerces?
在Tomcat7/Java6上开发并在Tomcat5/Java5上部署是完全疯狂的。你在这么做时遇到重大麻烦。 – skaffman