加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

webservice客户端异常( undefinedelement declaration 's:sc

发布时间:2020-12-17 00:20:32 所属栏目:安全 来源:网络整理
导读:原文地址:代码人生(http://wensiqun.iteye.com/blog/1083340) 今天在使用CXF的wsdl2java.bat根据wsdl文件生成客户端调用时出现以下错误:?WSDL To Java Error: Thrown by JAXB: undefined element declaration's:schema' at line 49 column 19 of schemaf

原文地址:代码人生(http://wensiqun.iteye.com/blog/1083340)

今天在使用CXF的wsdl2java.bat根据wsdl文件生成客户端调用时出现以下错误:?WSDL To Java Error: Thrown by JAXB: undefined element declaration's:schema' at line 49 column 19 of schemafile:/D:/workspace/webservice/weather/wsdl/weather.wsdl?

因为也是临时接触CXF,所以一时不知是什么问题,在网上搜了半天,都是说要替换什么内容之类的,但也没说为什么,而且基本都是转载国外某人的一个文章,只知其然不知其所以然就失去了做技术工作的意义了,因为长此这样是不可能提升自己的。所以决心了解下为什么??

根据错误提示似乎是找不到s:schema,查看了一下.net生成的wsdl文件,在文件头部有s:schema命名空间的定义:?

xmlns:s=http://www.w3.org/2001/XMLSchema?

但同时也发现CXF生成的wsdl文件也用到了类似的元素,只不过定义的命名空间名称略有差异:xmlns:xs=http://www.w3.org/2001/XMLSchema?

因此基本可以排除找不到s:schema元素的问题原因肯定不是XML本身定义的问题了。

紧接着又看了下wsdl的引入是否会存在版本问题,在对比了JAVA和.NET的WSDL文件后,感觉版本也应该是一致的。因此wsdl的版本原因也可以排除。

http://schemas.xmlsoap.org/wsdl/ (java)?

http://schemas.xmlsoap.org/wsdl/soap/(.net)?

经过思考,决定从“在一个xml配置文件中ref表示什么意思“这个思路入手。查了一篇老外的文章后,大致明白了其作,ref相当于一个引用的意思,具体可见如下例子:?

<element name="foo"> 
<complexType> 
<element ref="a:bar"/> 
</complexType> 
</element> 
<element name="bar"type="string"/>?
equivalent to this:?
<element name="foo"> 
<complexType> 
<element name="bar"type="string"/> 
</complexType> 
</element> 

当明白了ref的作用后,我很自然地就想到wsdl2java是通过JAXB解析wsdl文件的,那会不会是JAXB目前还不支持ref 这种元素的解析呢,从网上找到一篇文章 还是ORACLE官网上的“xsd:element ref not working with jaxb”似乎为我的想提供了佐证,在国外的一些文章上对待这样的错误有如下的解决办法:用<s:any minOccurs="2" maxOccurs="2"/>替代<s:element ref="s:schema"/><s:any /> ,我试了下果然可以,因此我基本上可以个人武断地认为这个wsdl2java的生成错误应该是和JAXB不支持xml的ref有关。因为

<s:any minOccurs="2"maxOccurs="2"/>和<s:element ref="s:schema" /><s:any />其实是等价的。<s:element ref="s:schema"/>其实就是说这里可以用s:schema规定的任意一种元素类型来替代,<s:any />正是起到了这个作用。?

<s:any minOccurs="2"maxOccurs="2"/>只不过是把两个<s:any />写成了一句罢了。

·????????2011-06-13 11:17

评论

5楼?jiabo121?2012-10-19 ?

对于:http://www.webxml.com.cn/zh_cn/web_services.aspx网站提供的web服务是用.net生成的wsdl?如果使用Java调用,?(如天气预报服务)?

解决方式:?

http://www.webxml.com.cn/WebServices/WeatherWebService?wsdl?另存为 WeatherWebService.wsdl于wsdl2java相同目录下;打开 WeatherWebService.wsdl,将出现 <s:elementref="s:schema" />的地方全部删除;然后再bin>wsdl2javaWeatherWebService.wsdl 即可

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读