Contract-First方式开发WebService及WSDL2Java工具

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目录下的脚本。

猜你喜欢

转载自springsfeng.iteye.com/blog/1633593