wsimport生成wsdl代码
1. webservice接口wsdl生成代码示例
以天气接口为例天气wsdl链接
2. 打开以上链接,右键查看网页源代码
将内容复制保存到本地,并命名为weather.wsdl
3. 替换复制中的部分内容
<s:element ref="s:schema" />
替换为
<s:any minOccurs="2" maxOccurs="2"/>
如不替换,用wsimport工具会报以下错误
src-resolve.4.2: 解析组件 ‘s:schema’ 时出错。在该组件中检测到 ‘s:schema’ 位于名称空间 ‘http://www.w3.org/2001/XMLSchema’ 中,
4. 将以下内容保存为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>
此步骤的目的是为了解决如下错误
属性 “Any” 已定义。请使用 <jaxb:property> 解决此冲突
5. 将以下内容保存为jaxp.properties文件
javax.xml.accessExternalSchema=all
javax.xml.accessExternalDTD=all
将文件保存在D:\jdk1.8.0_xxx\jre\lib文件下(路径修改为自己的路径)
该步骤是为解决下面错误
[ERROR] 外部 DTD: 无法读取外部 DTD ‘XMLSchema.dtd’, 因为 accessExternalDTD 属性设置的限制导致不允许 ‘http’ 访问。
http://www.w3.org/2001/XMLSchema.xsd的第 67 行
org.xml.sax.SAXParseException; systemId: http://www.w3.org/2001/XMLSchema.xsd; lineNumber: 67; columnNumber: 11; 外部 DTD: 无法读取外部 DTD ‘XMLSchema.dtd’, 因为 accessExternalDTD 属性设置的限制导致不允许 ‘http’ 访问。
6. 在命令行中执行以下命令生成java代码
wsimport -extension -encoding utf-8 -keep -d D:\temp\d -s D:\temp\s -b http://www.w3.org/2001/XMLSchema.xsd -b xsd.xjb -verbose weather.wsdl
-d 生成的源码的目录
-s 生成的class文件的目录
生成代码过程