问题描述
使用环境:jdk 1.7
转换工具:apche-cxf-3.1.4
在java开发中,如果需要调用webService,有一种方案是使用cxf生成本地代码,然后直接调用,本文重在描述在转换的过程中出现的问题,以及应对方法,自己遇到的问题记录下来,也方便初学者,关于java调用webServcie的方式,大家可以百度或者谷歌。
一、遇到undefined element declaration 's:schema' 导致无法生成本地代码,命令如下:
一般来说遇到这个问题是因为异构语言生成的wsdl的解析问题。详细的原因请参考网友的总结:
摘录解决办法,知道原理之后对症下药即可,其实问题很简单:
其实就是把wsdl文件下载下来,打开下载的wsdl文件,将出现 <s:element ref="s:schema" />的地方全部删除,再用修改后的wsdl文件就可以生成
其实到这一步,问题应该说已经得到了解决。部分不细心的网友可能会出现接下来的问题。
难过,我属于这部分。
二、com.ctc.wstx.exc.WstxParsingException: Illegal processing instruction target ("xml"); xml (case insensitive) is reserved by the specs.at [row,col,system-id]: [1,7,"file:/E:/cxfoutput/src/com/ceair/jzzhxt/fx/fx.wsdl"],命令如下:
英文好的朋友可能直接知道了问题的原因,道理很简单,wsdl生成的xml格式问题,打开xml后,是不是发现第一行多了一行空白。对了,真正影响问题的就是这一行代码。
解决办法就是:删掉即可。
至此,本次遇到的问题圆满解决,附上成功的截图。
总结:
1、对于第一个问题,其实是解析原理的问题,在异构语言中应该要考虑提供接口的方式,我认为这也是现在webService没落的一个理由。
2、对于第二个问题,相信很多喜欢C-V大法的朋友们一定很容易出现,凡事要细心。