在spring结合cxf时,客户端出现如下的异常,浪费了一天多的时间,最终搞定了,太高兴了。嘻嘻……
crawlerConfigureService:ws.cxf.crawler.configure.ICrawlerConfigureService@6a469846
crawlerConfigure:JAX-WS RI 2.2.4-b01: Stub for http://localhost:8080/ir23/cxf/crawlerConfigureWebservice Exception in thread "main" javax.xml.ws.soap.SOAPFaultException: object is not an instance of declaring class while invoking public abstract java.lang.Long ws.cxf.crawler.configure.ICrawlerConfigure.getCounts() with params []. at com.sun.xml.internal.ws.fault.SOAP11Fault.getProtocolException(SOAP11Fault.java:178) at com.sun.xml.internal.ws.fault.SOAPFaultBuilder.createException(SOAPFaultBuilder.java:111) at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:108) at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:78) at com.sun.xml.internal.ws.client.sei.SEIStub.invoke(SEIStub.java:135) at com.sun.proxy.$Proxy29.getCounts(Unknown Source) at www.skiff.com.webservice.client.TestClient.main(TestClient.java:31)解决方案:主要是服务端配置错误,与客户端无关。
<!-- author:一叶扁舟 爬虫网址配置的对外接口 --> <jaxws:server id="crawlerConfigureWebservice" serviceClass="ws.cxf.crawler.configure.ICrawlerConfigure" address="/crawlerConfigureWebservice"> <jaxws:serviceBean > <ref bean="crawlerConfigureService"/> </jaxws:serviceBean> </jaxws:server>
我将这个配置<jaxws:serviceBean > <ref bean="crawlerConfigureService"/> </jaxws:serviceBean>理解为实现类中要引入的方法,真实的情况这个要<ref bean=""/>需要写的是对外发布接口ICrawlerConfigure的实现类的bean方法,而在实现类中才写系统中的crawlerConfigureService
这个方法。因此改为:
<bean id="crawlerConfigureWS" class="ws.cxf.crawler.configure.impl.CrawlerConfigureImpl"> <property name="crawlerConfigureService" ref="crawlerConfigureService"/> </bean> <!-- author:一叶扁舟 爬虫网址配置的对外接口 --> <jaxws:server id="crawlerConfigureWebservice" serviceClass="ws.cxf.crawler.configure.ICrawlerConfigure" address="/crawlerConfigureWebservice"> <jaxws:serviceBean > <ref bean="crawlerConfigureWS"/> </jaxws:serviceBean> </jaxws:server>
所以这个问题处在对webservice在spring中配置的理解上不清楚,之后我会将整个服务端的配置给整理出来。解决了问题,太高兴……