一个简单的模拟用户名是否存在的基于契约优先WSDL的webservice开发实例
来源:互联网 发布:神州科捷工作知乎 编辑:程序博客网 时间:2024/05/16 09:04
服务端
新建java工程MyWebservice,在类路径下新建META-INF/wsdl目录,新建check.wsdl文件
<?xml version="1.0" encoding="UTF-8" standalone="no"?><wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://www.example.org/check/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="CheckUserService" targetNamespace="http://www.example.org/check/"> <!-- 定义类型 --> <wsdl:types> <xsd:schema targetNamespace="http://www.example.org/check/"> <xsd:element name="checkUser" type="tns:checkUserType" /> <xsd:element name="checkUserResponse" type="tns:checkUserResponseType" /> <xsd:complexType name="checkUserType"> <xsd:sequence> <xsd:element name="userName" type="xsd:string"></xsd:element> </xsd:sequence> </xsd:complexType> <xsd:complexType name="checkUserResponseType"> <xsd:sequence> <xsd:element name="checkUserResult" type="xsd:boolean"></xsd:element> </xsd:sequence> </xsd:complexType> </xsd:schema> </wsdl:types> <!-- 定义消息 --> <wsdl:message name="checkUserRequest"> <wsdl:part element="tns:checkUser" name="parameters"/> </wsdl:message> <wsdl:message name="checkUserResponse"> <wsdl:part element="tns:checkUserResponse" name="parameters"/> </wsdl:message> <wsdl:portType name="ICheckUserService"> <wsdl:operation name="checkUser"> <wsdl:input message="tns:checkUserRequest"/> <wsdl:output message="tns:checkUserResponse"/> </wsdl:operation> </wsdl:portType> <wsdl:binding name="checkUserSOAP" type="tns:ICheckUserService"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <wsdl:operation name="checkUser"> <wsdl:input> <soap:body use="literal"/> </wsdl:input> <wsdl:output> <soap:body use="literal"/> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:service name="CheckUserService"> <wsdl:port binding="tns:checkUserSOAP" name="CheckUserPort"> <soap:address location="http://127.0.0.1:9090/cu/"/> </wsdl:port> </wsdl:service></wsdl:definitions>
使用wsimport命令生成服务端代码,在cmd下进到wsdl文件目录下
wsimport -d G:\workspace\EclipseWorkspaceNew\MyWebservice\src -keep -verbose check.wsdl
-d 表示生成的文件保存路径,这里我直接保存在工程的src目录下,完成之后刷新工程即可看到生成的java代码
生成的接口如下
package org.example.check;import javax.jws.WebMethod;import javax.jws.WebParam;import javax.jws.WebResult;import javax.jws.WebService;import javax.xml.bind.annotation.XmlSeeAlso;import javax.xml.ws.RequestWrapper;import javax.xml.ws.ResponseWrapper;/** * This class was generated by the JAX-WS RI. * JAX-WS RI 2.1.6 in JDK 6 * Generated source version: 2.1 * */@WebService(name = "ICheckUserService", targetNamespace = "http://www.example.org/check/")@XmlSeeAlso({ ObjectFactory.class})public interface ICheckUserService { /** * * @param userName * @return * returns boolean */ @WebMethod @WebResult(name = "checkUserResult", targetNamespace = "") @RequestWrapper(localName = "checkUser", targetNamespace = "http://www.example.org/check/", className = "org.example.check.CheckUserType") @ResponseWrapper(localName = "checkUserResponse", targetNamespace = "http://www.example.org/check/", className = "org.example.check.CheckUserResponseType") public boolean checkUser( @WebParam(name = "userName", targetNamespace = "") String userName);}
编写这个接口的实现类,并指定wsdl文件,如下
package qlj.service.impl;import java.util.ArrayList;import java.util.List;import javax.jws.WebService;import org.example.check.ICheckUserService;@WebService(endpointInterface="org.example.check.ICheckUserService", targetNamespace="http://www.example.org/check/", wsdlLocation="META-INF/wsdl/check.wsdl")public class CheckUser implements ICheckUserService {private static List<String> users = new ArrayList<String>();{users.add("aa");users.add("bb");users.add("cc");users.add("dd");System.out.println("add complete");}@Overridepublic boolean checkUser(String userName) {System.out.println(userName);return users.contains(userName);//模拟用户是否存在}}这个实现类的类名必须是CheckUser(wsdl文件定义的服务name属性为CheckUserService,把后缀Service去掉),否则发布服务时会报错
编写测试类手动发布服务
package qlj.service.main;import javax.xml.ws.Endpoint;import qlj.service.impl.CheckUser;public class ServicePublish {public static void main(String[] args) {Endpoint.publish("http://127.0.0.1:9090/cu/", new CheckUser());}}这里的发布地址就是wsdl文件里soap:address中定义的location的属性值
用浏览器访问http://127.0.0.1:9090/cu/?wsdl结果如下
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://www.example.org/check/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="CheckUserService" targetNamespace="http://www.example.org/check/"><!-- 定义类型 --><wsdl:types><xsd:schema targetNamespace="http://www.example.org/check/"><xsd:element name="checkUser" type="tns:checkUserType"/><xsd:element name="checkUserResponse" type="tns:checkUserResponseType"/><xsd:complexType name="checkUserType"><xsd:sequence><xsd:element name="userName" type="xsd:string"/></xsd:sequence></xsd:complexType><xsd:complexType name="checkUserResponseType"><xsd:sequence><xsd:element name="checkUserResult" type="xsd:boolean"/></xsd:sequence></xsd:complexType></xsd:schema></wsdl:types><!-- 定义消息 --><wsdl:message name="checkUserRequest"><wsdl:part element="tns:checkUser" name="parameters"/></wsdl:message><wsdl:message name="checkUserResponse"><wsdl:part element="tns:checkUserResponse" name="parameters"/></wsdl:message><wsdl:portType name="ICheckUserService"><wsdl:operation name="checkUser"><wsdl:input message="tns:checkUserRequest"/><wsdl:output message="tns:checkUserResponse"/></wsdl:operation></wsdl:portType><wsdl:binding name="checkUserSOAP" type="tns:ICheckUserService"><soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/><wsdl:operation name="checkUser"><wsdl:input><soap:body use="literal"/></wsdl:input><wsdl:output><soap:body use="literal"/></wsdl:output></wsdl:operation></wsdl:binding><wsdl:service name="CheckUserService"><wsdl:port binding="tns:checkUserSOAP" name="CheckUserPort"><soap:address location="http://127.0.0.1:9090/cu/"/></wsdl:port></wsdl:service></wsdl:definitions>
服务发布成功!
客户端
新建java工程MyWebservice_client,在cmd下使用wsimport命令,如下
wsimport -d G:\workspace\EclipseWorkspaceNew\MyWebservice_client\src -keep -verbose http://127.0.0.1:9090/cu/?wsdl
把生成的文件保存到工程的src目录下,刷新工程即可看到这些java源码
生成的接口跟上面说的接口ICheckUserService一样
另外有一个CheckUserService类继承了javax.xml.ws.Service,这个类提供了获取ICheckUserService的方法,如下
package org.example.check;import java.net.MalformedURLException;import java.net.URL;import java.util.logging.Logger;import javax.xml.namespace.QName;import javax.xml.ws.Service;import javax.xml.ws.WebEndpoint;import javax.xml.ws.WebServiceClient;import javax.xml.ws.WebServiceFeature;/** * This class was generated by the JAX-WS RI. * JAX-WS RI 2.1.6 in JDK 6 * Generated source version: 2.1 * */@WebServiceClient(name = "CheckUserService", targetNamespace = "http://www.example.org/check/", wsdlLocation = "http://127.0.0.1:9090/cu/?wsdl")public class CheckUserService extends Service{ private final static URL CHECKUSERSERVICE_WSDL_LOCATION; private final static Logger logger = Logger.getLogger(org.example.check.CheckUserService.class.getName()); static { URL url = null; try { URL baseUrl; baseUrl = org.example.check.CheckUserService.class.getResource("."); url = new URL(baseUrl, "http://127.0.0.1:9090/cu/?wsdl"); } catch (MalformedURLException e) { logger.warning("Failed to create URL for the wsdl Location: 'http://127.0.0.1:9090/cu/?wsdl', retrying as a local file"); logger.warning(e.getMessage()); } CHECKUSERSERVICE_WSDL_LOCATION = url; } public CheckUserService(URL wsdlLocation, QName serviceName) { super(wsdlLocation, serviceName); } public CheckUserService() { super(CHECKUSERSERVICE_WSDL_LOCATION, new QName("http://www.example.org/check/", "CheckUserService")); } /** * * @return * returns ICheckUserService */ @WebEndpoint(name = "CheckUserPort") public ICheckUserService getCheckUserPort() { return super.getPort(new QName("http://www.example.org/check/", "CheckUserPort"), ICheckUserService.class); } /** * * @param features * A list of {@link javax.xml.ws.WebServiceFeature} to configure on the proxy. Supported features not in the <code>features</code> parameter will have their default values. * @return * returns ICheckUserService */ @WebEndpoint(name = "CheckUserPort") public ICheckUserService getCheckUserPort(WebServiceFeature... features) { return super.getPort(new QName("http://www.example.org/check/", "CheckUserPort"), ICheckUserService.class, features); }}
编写客户端测试类
package qlj.service.test;import java.net.URL;import javax.xml.namespace.QName;import org.example.check.CheckUserService;import org.example.check.ICheckUserService;public class Test_client {public static void main(String[] args) throws Exception {String namespace = "http://www.example.org/check/";QName qName = new QName(namespace, "CheckUserService");URL url = new URL("http://127.0.0.1:9090/cu/?wsdl");CheckUserService checkUserService = new CheckUserService(url,qName);ICheckUserService iCheckUserService = checkUserService.getCheckUserPort();boolean isExist = iCheckUserService.checkUser("aa");System.out.println(isExist);}}
运行结果如下
客户端输出结果true
服务端运行结果aa
结论:正确。
0 0
- 一个简单的模拟用户名是否存在的基于契约优先WSDL的webservice开发实例
- soap基于契约优先WSDL的开发
- webservice(六)基于契约优先的wsdl文件生成webservice服务代码实例
- Webservice_19_SOAP的基于契约优先WSDL的开发流程
- Webservice_21_SOAP的基于契约优先开发用户管理_实现Wsdl
- webservice基于契约优先开发
- 基于wsdl 文件的webService接口开发
- 一个简单的Java开发WebService实例
- 一个简单的用ajax验证注册用户名是否存在的例子
- 使用jquery实现判断用户名是否存在的实例
- 异步检测用户名是否存在的一个案例
- Webservice_23_SOAP的基于契约优先开发用户管理_实现客户端
- Webservice_23_SOAP的基于契约优先开发用户管理_添加异常
- Webservice_24_SOAP的基于契约优先开发用户管理_部署到Tomcat
- Webservice_25_SOAP的基于契约优先开发用户管理_实现Jsp页面功能
- Webservice_26_SOAP的基于契约优先开发用户管理_通过Hander加入控制信息
- Webservice_20_SOAP的基于契约优先头信息处理(隐式头信息)
- IOS -- 基于WebService WSDL 的请求
- 三员之三权分立BMB20-2007
- 《数据结构》实验二: 线性表实验
- hadoop(七) - hadoop集群环境搭建
- Sicily 1011.Lenny's Lucky Lotto
- C++中const用法总结
- 一个简单的模拟用户名是否存在的基于契约优先WSDL的webservice开发实例
- [统计学习方法]K近邻法
- 《数据结构》实验三: 栈和队列实验
- 安卓编译工具
- MDK和IAR环境仿真时,当全速运行的时候如何查看全局变量的值
- Centos java版本变更
- HDU 1429
- Android - ImageButton单击切换按钮图片效果的实现
- POJ 1704-Georgia and Bob(阶梯博弈)