生成webservice客户端的一些坑
一、undefinedelement declaration 's:schema'(来自:https://blog.csdn.net/binbinxyz/article/details/8906717)
用<s:any minOccurs="2" maxOccurs="2"/>替代<s:element ref="s:schema"/><s:any />
二、undefined simple or complex type 'soap-enc:Array' (来自:http://sky-sz.iteye.com/blog/1480937)
1.在浏览器中打开webservice url,保存wsdl文件,如ContentService.xml
2.通过cxf命令“wsdl2java –d E:/file –frontend jaxws21 –client C:\ ContentService.xml”生成客户端代码
3.若报WSDLToJava Error: Thrown by JAXB : undefined simple or complex type 'soap-enc:Array' ,
则需要在生成的文件中找到
<import namespace="http://schemas.xmlsoap.org/soap/encoding/" />,
在浏览器中打开http://schemas.xmlsoap.org/soap/encoding/,
保存文件soap-encoding.xsd,
然后修改成<import namespace="http://schemas.xmlsoap.org/soap/encoding/" schemaLocation="soap-encoding.xsd"/>,
再运行上面的命令即可。
4.如果需要NTLM认证,则需在代码中加入如下的代码:
Client client = ClientProxy.getClient(port);
HTTPConduit http = (HTTPConduit) client.getConduit();
HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
httpClientPolicy.setConnectionTimeout(36000);
httpClientPolicy.setAllowChunking(false);
http.setClient(httpClientPolicy);
http.getAuthorization().setAuthorizationType("NTLM");
http.getAuthorization().setUserName("xxxx");
http.getAuthorization().setPassword("xxxxx");
三、具有相同名称 "xxxxx" 的类/接口已在使用。请使用类定制设置来解决此冲突。
wsdl2java命令添加参数 -autoNameResolution 解决
四、属性 "xxxx" 已定义。请使用 <jaxb:property> 解决此冲突 (三、四 均来自:https://www.cnblogs.com/boazy/p/9131438.html)
采用xjb文件方式重命名处理解决(wsdl2java命令添加参数 -b d:/xxx.xjb)
wsdl2java -d D:\boazy\Desktop\ama D:\boazy\Desktop\20180529_145043\1ASIWGUGGUG_PDT_20180529_145042-ama.wsdl -b D:\boazy\Desktop\20180529_145043\zz_xjb.xjb
以 "any" 为例(参考:https://blog.csdn.net/yfisaboy/article/details/38376511)
添加配置文件xsd.xjb:
<?xml version="1.0" encoding="UTF-8"?>
<bindings xmlns="http://java.sun.com/xml/ns/jaxb"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
version="2.0">
<globalBindings>
<xjc:simple />
</globalBindings>
<bindings scd="~xsd:complexType">
<class name="ComplexTypeType"/>
</bindings>
<bindings scd="~xsd:simpleType">
<class name="SimpleTypeType"/>
</bindings>
<bindings scd="~xsd:group">
<class name="GroupType"/>
</bindings>
<bindings scd="~xsd:attributeGroup">
<class name="AttributeGroupType"/>
</bindings>
<bindings scd="~xsd:element">
<class name="ElementType"/>
</bindings>
<bindings scd="~xsd:attribute">
<class name="attributeType"/>
</bindings>
</bindings>
使用命令 wsimport(或者wsdl2java) -b http://www.w3.org/2001/XMLSchema.xsd -b xsd.xjb SecureConversation.wsdl
五、不允许 'file' 访问或者http请求之类的
(参考:https://blog.csdn.net/SpicyCoder/article/details/78920837
https://*.com/questions/42928279/wsimport-two-declarations-cause-a-collision)
在jdk的安装路径下的jre\lib下(我的路径为/usr/local/jdk1.8.0_151/jre/lib),添加一个属性文件jaxp.properties,并写上如下内容
javax.xml.accessExternalSchema = all
javax.xml.accessExternalDTD=all
wsimport 也可以在命令行上加参数 参见上面的*地址
六、乱码
-encoding utf-8
推荐阅读
-
生成webservice客户端的一些坑
-
从客户端到服务器再到数据库的一些思考与疑问
-
客户端webSocket的一些基本用法
-
cocoscreator+js客户端需要掌握的一些基础内容
-
project生成aar文件并且在另一个project中使用遇到的坑和解决方案
-
基于Axis的Web Service客户端调用 博客分类: webservice WebWebServicelog4jjunitApache
-
基于Axis的Web Service客户端调用 博客分类: webservice WebWebServicelog4jjunitApache
-
git一些进阶的操作和坑
-
Apache CXF 自动生成客户端代码 博客分类: WebService记忆零拾 apachewebserviceCXF
-
用 wsimport 命令生成webservice客户端代码 博客分类: java wsimportwebservice客户端代码wsdl命令