当前位置: 代码迷 >> Web前端 >> Contract-First模式开发WebService及WSDL2Java工具
  详细解决方案

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

热度:571   发布时间:2012-11-11 10:07:57.0
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目录下的脚本。

  相关解决方案