WSDL文件:参考附件OrderProcess.wsdl
?
1. WSDL元素与Java Component之间的映射关系
??? (1) <wsdl:definitions> attribute:targetNamespace --> Java package
??? (2) <wsdl:portType> --> Java Service Endpoint Interface (SEI)
??? (3) <wsdl:portType> child Element: <wsdl:operation> --> Java methods
??? (4) <wsdl:service> --> Service class
??? (5) <wsdl:message> --> Service operation parameters
2. WSDL2Java Tool
? ? wsdl2java -impl -server -client -d generate OrderProcess.wsdl
??? 参数说明:
??? -ant:生成ANT build.xml
??? -impl:生成服务实现类
??? -server:生成Server组件,用于启动服务和发布服务
??? -client:生成Client组件,用于测试服务
??? -d:生成代码的路径
??? 例如:wsdl2java -impl -server -d generate OrderProcess.wsdl
???? wsdl2java -client -d src http://www.ignyte.com/webservices/ignyte.whatsshowing.webservice/moviefunctions.asmx?wsdl
?
???? 该工具的其他可选参数可通过添加-?,或-h,或-help的方式查看。
???? 也可直接查看官方文档:https://cwiki.apache.org/CXF20DOC/wsdl-to-java.html
3. 通过WSDL2Java Tool生成的Client调用服务器端时发生的异常
???? (1) Can not initialize the default wsdl from...
???? 产生原因:WSDL路径不正确
???? 解决方法:将WSDL文件也考到项目java文件同级中
???? (2) Error: Two classes have the same XML type name ....
????
Use @XmlType.name and @XmlType.namespace to assign different names to them...
???? 产生原因:此错误指具有同名的类或 @XMLType.name 值,但它们存在于不同的 Java 包中。
???? 解决方法:@XML.Type.namespace类添加至现有的@XMLType注释以区分XML类型。
???? 例如:
@XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "processOrder", propOrder = { "arg0" },namespace="http://generate/sample/pcdp/org/processorder/") public class ProcessOrder { }
?
@XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "processOrderResponse", propOrder = { "_return" },namespace="http://generate/sample/pcdp/org/processorderreponse/") public class ProcessOrderResponse { }
4. WSDL文件有效性验证
??? wsdlvalidator http://localhost:9082/MovieService?wsdl
??? 常用的WSDL文件操作工具客查看安装目录下的bin目录下的脚本。