getSupportCity这个方法没有问题
getWeatherbyCityName这个方法报错
而且用jdk1.7原生的wsimport生成并且不导入cxf 不会有错。是不是jdk1.7和cxf冲突
还有可能是soap1.2 和saop1.1的问题
天气预报服务器端好像支持soap1.2
(http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl)
错误栈:
org.apache.cxf.binding.soap.SoapFault: No namespace on "html" element. You must send a SOAP message.
at org.apache.cxf.binding.soap.interceptor.ReadHeadersInterceptor.readVersion(ReadHeadersInterceptor.java:122)
at org.apache.cxf.binding.soap.interceptor.ReadHeadersInterceptor.handleMessage(ReadHeadersInterceptor.java:172)
at org.apache.cxf.binding.soap.interceptor.ReadHeadersInterceptor.handleMessage(ReadHeadersInterceptor.java:69)
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308)
at org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:798)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:1669)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:1550)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1347)
at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56)
at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:651)
at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308)
at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:514)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:423)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:324)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:277)
at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:96)
at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:139)
at com.sun.proxy.$Proxy43.getWeatherbyCityName(Unknown Source)
at com.xxt.ws.jdk.service.LookExample_WeatherService.main(LookExample_WeatherService.java:27)

解决方案 »

  1.   

    可以添加一个cxf的日志拦截器,查看请求和响应的soap信息,出现这个异常,soap请求应该是没问题的,问题应该出在响应
    可以尝试一下调用其他的方法,如果其他方法没有问题,就证明是这个方法的响应数据有问题,响应的应该是soap格式的数据,但是却响应了其他格式的
    这个问题我也遇到了,但是我又想用cxf来调用查询,后来我换另外一个需要输入用户id的查询天气的方法就解决了,不需要删除cxf的jar包