webservice24--基于契约优先开发用户管理小功能--实现wsdl
来源:互联网 发布:对java面向对象的理解 编辑:程序博客网 时间:2024/05/16 08:32
基于契约优先开发用户管理小功能–实现wsdl
1、编写schema
<?xml version="1.0" encoding="UTF-8"?><!-- 默认的命名空间,就是xmlns,没有后追, 只能有一个。 --><xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/user" xmlns:tns="http://www.example.org/user" elementFormDefault="qualified"> <!-- User (username nickname password) 使用百叶窗方式, 只有一个根节点。 --> <xsd:element name="user" type="tns:userType"></xsd:element> <!-- 方法: add delete login list --> <xsd:element name="add" type="tns:addType"></xsd:element> <xsd:element name="addResponse" type="tns:addResponseType"></xsd:element> <xsd:element name="delete" type="tns:deleteType"></xsd:element> <xsd:element name="deleteResponse" type="tns:deleteResponseType"></xsd:element> <xsd:element name="login" type="tns:loginType"></xsd:element> <xsd:element name="logResponse" type="tns:loginResponseType"></xsd:element> <xsd:element name="list" type="tns:listType"></xsd:element> <xsd:element name="listResponse" type="tns:listResponseType"></xsd:element> <xsd:complexType name="addType"> <xsd:sequence> <xsd:element name="user" type="tns:userType"></xsd:element> </xsd:sequence> </xsd:complexType> <xsd:complexType name="addResponseType"> <xsd:sequence> <xsd:element name="addResponse" type="xsd:boolean"></xsd:element> </xsd:sequence> </xsd:complexType> <xsd:complexType name="deleteType"> <xsd:sequence> <xsd:element name="username" type="tns:usernameType"></xsd:element> </xsd:sequence> </xsd:complexType> <xsd:complexType name="deleteResponseType"> <xsd:sequence> <xsd:element name="deleteResponse" type="xsd:boolean"></xsd:element> </xsd:sequence> </xsd:complexType> <xsd:complexType name="loginType"> <xsd:sequence> <xsd:element name="username" type="tns:usernameType"></xsd:element> <xsd:element name="password" type="tns:passwordType"></xsd:element> </xsd:sequence> </xsd:complexType> <xsd:complexType name="loginResponseType"> <xsd:sequence> <xsd:element name="loginResponse" type="xsd:boolean"></xsd:element> </xsd:sequence> </xsd:complexType> <xsd:complexType name="listType"> <xsd:sequence> </xsd:sequence> </xsd:complexType> <xsd:complexType name="listResponseType"> <xsd:sequence > <!-- 返回的是User对象。 --> <xsd:element name="listResponse" type="tns:userType"></xsd:element> </xsd:sequence> </xsd:complexType> <!-- (username nickname password) --> <xsd:complexType name="userType"> <xsd:sequence> <xsd:element name="username" type="tns:usernameType"></xsd:element> <xsd:element name="nickname" type="xsd:string"></xsd:element> <xsd:element name="password" type="tns:passwordType"></xsd:element> </xsd:sequence> </xsd:complexType> <xsd:simpleType name="usernameType"> <xsd:restriction base="xsd:string"> <xsd:minLength value="1"></xsd:minLength> </xsd:restriction> </xsd:simpleType> <!-- 使用simpleType 限制密码的长度 --> <xsd:simpleType name="passwordType"> <xsd:restriction base="xsd:string"> <xsd:minLength value="6"></xsd:minLength> <xsd:maxLength value="30"></xsd:maxLength> </xsd:restriction> </xsd:simpleType></xsd:schema>
2、编写wsdl
2.1、schema的引用
2.1.1、使用include 的引用
<wsdl:types> <xsd:schema targetNamespace="http://service.chb.com/"> <xsd:include schemaLocation="user.xsd"></xsd:include> </xsd:schema> </wsdl:types>
2.1.1、使用import的引用,可以在import中设置命名空间。
<wsdl:types> <xsd:schema > <xsd:import schemaLocation="user.xsd" namespace="http://service.chb.com/" ></xsd:import> </xsd:schema> </wsdl:types>
2.2、设置message
<wsdl:message name="add"> <wsdl:part element="tns:add" name="parameters"/> </wsdl:message> <wsdl:message name="addResponse"> <wsdl:part element="tns:addResponse" name="parameters"/> </wsdl:message> <wsdl:message name="delete"> <wsdl:part element="tns:delete" name="parameters"/> </wsdl:message> <wsdl:message name="deleteResponse"> <wsdl:part element="tns:deleteResponse" name="parameters"/> </wsdl:message> <wsdl:message name="login"> <wsdl:part element="tns:login" name="parameters"/> </wsdl:message> <wsdl:message name="loginResponse"> <wsdl:part element="tns:loginResponse" name="parameters"/> </wsdl:message> <wsdl:message name="list"> <wsdl:part element="tns:list" name="parameters"/> </wsdl:message> <wsdl:message name="listResponse"> <wsdl:part element="tns:listResponse" name="parameters"/> </wsdl:message>
2.3、设置port’Type, 也就是方法
2.3.1、修改service的名称
name="user"改为name="UserService"
2.3.2、设置portType
<!-- 接口 --> <wsdl:portType name="IUserService"> <!-- 设置方法, operation就是方法。 --> <wsdl:operation name="add"> <wsdl:input message="tns:add"/> <wsdl:output message="tns:addResponse"/> </wsdl:operation> <wsdl:operation name="delete"> <wsdl:input message="tns:delete"/> <wsdl:output message="tns:deleteResponse"/> </wsdl:operation> <wsdl:operation name="login"> <wsdl:input message="tns:login"/> <wsdl:output message="tns:loginResponse"/> </wsdl:operation> <wsdl:operation name="list"> <wsdl:input message="tns:list"/> <wsdl:output message="tns:listResponse"/> </wsdl:operation> </wsdl:portType>
2.4、binding
2.5 service
<!-- service --> <wsdl:service name="UserService"> <wsdl:port binding="tns:userServiceSOAP" name="UserServicePort"> <soap:address location="http://localhost:9990/us/"/> </wsdl:port> </wsdl:service>
至此, wsdl已经完成,
契约已经定好, 通过定制好的wsdl生成, java文件
G:\JavaWeb\qyyx_01\WebContent\WEB-INF\wsdl>wsimport -d G:\JavaWeb\qyyx_01\src -keep -verbose user.wsdl
服务端
客户端,使用http://localhost:9999/us?wsdl导文件(注意: 使用的是wsdlurl, 而不是wsdl文件。
G:\JavaWeb\qyyx_01\WebContent\WEB-INF\wsdl>wsimport -d G:\JavaWeb\qyyx_01_client\src -verbose -keep http://localhost:9999/us?wsdl
2.6、问题, 测试客户端时候发现, list方法报错, 无法将User 对象转化为List<User>的错误,
查看IUserService中的list方法返回值,是User, 而不是List<User>
这是wsdl文件的listResponse类型有问题。
public User list();
listResponse类型有问题。
<xsd:complexType name="listResponseType"> <xsd:sequence > <!-- 返回的是User对象。 --> <xsd:element name="listResponse" type="tns:userType"></xsd:element> </xsd:sequence> </xsd:complexType>
解决:minOccurs=”0” maxOccurs=”unbounded”限定。
<xsd:complexType name="listResponseType"> <!-- 返回的是List<User>对象。 --> <xsd:sequence minOccurs="0" maxOccurs="unbounded"> <xsd:element name="listResponse" type="tns:user"></xsd:element> </xsd:sequence> </xsd:complexType>
客户端测试
package com.chb.service.client;import java.net.MalformedURLException;import java.net.URL;import javax.xml.namespace.QName;import com.chb.service.IUserService;import com.chb.service.User;import com.chb.service.UserService;/** * wsimport -d G:\JavaWeb\qyyx_01_client\src -verbose -keep http://localhost:9999/us?wsdl */public class MyClient { public static void main(String[] args) throws MalformedURLException { //创建访问的URL URL url = new URL("http://localhost:9999/us?wsdl"); QName qName = new QName("http://service.chb.com/", "UserService"); UserService msis = new UserService(url, qName); //获取IMyService, 简单多了 IUserService iMyService = msis.getUserservicePort(); User user = new User(); user.setUsername("wx"); user.setNickname("wuxin"); user.setPassword("111"); iMyService.add(user); for (User u : iMyService.list()) { System.out.println(u); } System.out.println(iMyService.login("chb", "123456")); }}
阅读全文
0 0
- webservice24--基于契约优先开发用户管理小功能--实现wsdl
- Webservice_21_SOAP的基于契约优先开发用户管理_实现Wsdl
- webservice25--基于契约优先开发用户管理小功能--异常处理
- webservice26--基于契约优先开发用户管理小功能--部署在Tomcat
- Webservice_25_SOAP的基于契约优先开发用户管理_实现Jsp页面功能
- soap基于契约优先WSDL的开发
- Webservice_23_SOAP的基于契约优先开发用户管理_实现客户端
- WebService:跟孔浩学习(契约优先、Schema、WSDL、SOAP、用户管理小系统)
- Webservice_19_SOAP的基于契约优先WSDL的开发流程
- Webservice_23_SOAP的基于契约优先开发用户管理_添加异常
- Webservice_24_SOAP的基于契约优先开发用户管理_部署到Tomcat
- Webservice_26_SOAP的基于契约优先开发用户管理_通过Hander加入控制信息
- webservice基于契约优先开发
- 一个简单的模拟用户名是否存在的基于契约优先WSDL的webservice开发实例
- CXF Spring 基于契约优先开发
- webservice(六)基于契约优先的wsdl文件生成webservice服务代码实例
- 契约优先方式编写wsdl + 隐式Header
- 基于bootstrap实现简单用户管理功能
- C/C++获取CPU的赫兹(GHZ)
- 剑指Offer题目1522:包含min函数的栈
- 欢迎使用CSDN-markdown编辑器
- “第二盖茨”
- sqlite efcore
- webservice24--基于契约优先开发用户管理小功能--实现wsdl
- 微软ef文档
- 用C++实现选择排序
- 【CC2640R2F】香瓜CC2640R2F之自定义周期事件
- Mysql登录不要密码,怎么设定密码.
- Blender 如何创建一个中空圆柱(圆筒、空心柱)
- 使用JSR-303验证框架
- 3.1.10等待wait的条件变化
- leetcode练习 Add Two Numbers