非常感谢孙浩老师。
先编写schema,user.xsd:
<?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://service.lichen.cn" xmlns:tns="http://service.lichen.cn" elementFormDefault="qualified"> <xsd:element name="add" type="tns:addType" /> <xsd:element name="addResponse" type="tns:addResponseType" /> <xsd:element name="delete" type="tns:deleteType" /> <xsd:element name="deleteResponse" type="tns:deleteResponseType" /> <xsd:element name="list" type="tns:listType" /> <xsd:element name="listResponse" type="tns:listResponseType" /> <xsd:element name="login" type="tns:loginType" /> <xsd:element name="loginResponse" type="tns:loginResponseType" /> <xsd:complexType name="addType"> <xsd:sequence> <xsd:element name="user" type="tns:user" /> </xsd:sequence> </xsd:complexType> <xsd:complexType name="addResponseType"> <xsd:sequence /> </xsd:complexType> <xsd:complexType name="deleteType"> <xsd:sequence> <xsd:element name="username" type="xsd:string" /> </xsd:sequence> </xsd:complexType> <xsd:complexType name="deleteResponseType"> <xsd:sequence /> </xsd:complexType> <xsd:complexType name="listType"> <xsd:sequence /> </xsd:complexType> <xsd:complexType name="listResponseType"> <xsd:sequence minOccurs="1" maxOccurs="unbounded"> <xsd:element name="user" type="tns:user" /> </xsd:sequence> </xsd:complexType> <xsd:complexType name="loginType"> <xsd:sequence> <xsd:element name="username" type="xsd:string" /> <xsd:element name="passwrod" type="xsd:string" /> </xsd:sequence> </xsd:complexType> <xsd:complexType name="loginResponseType"> <xsd:sequence> <xsd:element name="user" type="tns:user" /> </xsd:sequence> </xsd:complexType> <xsd:complexType name="user"> <xsd:sequence> <xsd:element name="username" type="xsd:string" /> <xsd:element name="nickname" type="xsd:string" /> <xsd:element name="passwrod" type="xsd:string" /> </xsd:sequence> </xsd:complexType> </xsd:schema>
@H_404_15@
编写wsdl:user.wsdl
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <wsdl:deFinitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://service.lichen.cn" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="UserService" targetNamespace="http://service.lichen.cn"> <wsdl:types> <xsd:schema targetNamespace="http://service.lichen.cn"> <xsd:include schemaLocation="user.xsd"></xsd:include> </xsd:schema> </wsdl:types> <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> <wsdl:portType name="IMyService"> <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> <wsdl:binding name="userServiceSOAP" type="tns:IMyService"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" /> <wsdl:operation name="add"> <wsdl:input> <soap:body use="literal" /> </wsdl:input> <wsdl:output> <soap:body use="literal" /> </wsdl:output> </wsdl:operation> <wsdl:operation name="delete"> <wsdl:input> <soap:body use="literal" /> </wsdl:input> <wsdl:output> <soap:body use="literal" /> </wsdl:output> </wsdl:operation> <wsdl:operation name="login"> <wsdl:input> <soap:body use="literal" /> </wsdl:input> <wsdl:output> <soap:body use="literal" /> </wsdl:output> </wsdl:operation> <wsdl:operation name="list"> <wsdl:input> <soap:body use="literal" /> </wsdl:input> <wsdl:output> <soap:body use="literal" /> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:service name="UserService"> <wsdl:port binding="tns:userServiceSOAP" name="UserServicePort"> <soap:address location="http://localhost:8800/us/" /> </wsdl:port> </wsdl:service> </wsdl:deFinitions>
@H_404_15@使用wsimport得到Java文件,把接口IMyService.java拷贝到服务端项目中(删除IMyService中报错的注解)。
由于IMyService.java需要User.java,在服务端中新建:
package cn.lichen.entity; import java.io.Serializable; public class User implements Serializable{ private static final long serialVersionUID = 1L; private String username; private String nickname; private String password; public User() { } public User(String username,String nickname,String password) { super(); this.username = username; this.nickname = nickname; this.password = password; } public String getUsername() { return username; } public String getNickname() { return nickname; } public String getpassword() { return password; } public void setUsername(String username) { this.username = username; } public void setNickname(String nickname) { this.nickname = nickname; } public void setPassword(String password) { this.password = password; } }
@H_404_15@
package cn.lichen.service; import java.util.List; @WebService(endpointInterface = "cn.lichen.service.IMyService",wsdlLocation = "meta-inf/wsdl/user.wsdl",portName = "UserServicePort",serviceName = "UserService",targetNamespace = "http://service.lichen.cn") public class MyServiceImpl implements IMyService { @Override public void add(User user) { } @Override public void delete(String username) { } @Override public User login(String username,String passwrod) { return null; } @Override public List<User> list() { return null; } }
@H_404_15@
在服务端新建服务方法:
package cn.lichen.service; import javax.xml.ws.Endpoint; public class MyService { public static void main(String[] args) { Endpoint.publish("http://localhost:8800/us",new MyServiceImpl()); } }
@H_404_15@
启动服务后,可成功访问http://localhost:8800/us?wsdl。但使有wsimport导出Java会报错,需要把user.xsd和user.wsdl整合。
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <wsdl:deFinitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://service.lichen.cn" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="UserService" targetNamespace="http://service.lichen.cn"> <wsdl:types> <xsd:schema targetNamespace="http://service.lichen.cn"> <!-- <xsd:include schemaLocation="user.xsd"></xsd:include> --> <xsd:element name="add" type="tns:addType" /> <xsd:element name="addResponse" type="tns:addResponseType" /> <xsd:element name="delete" type="tns:deleteType" /> <xsd:element name="deleteResponse" type="tns:deleteResponseType" /> <xsd:element name="list" type="tns:listType" /> <xsd:element name="listResponse" type="tns:listResponseType" /> <xsd:element name="login" type="tns:loginType" /> <xsd:element name="loginResponse" type="tns:loginResponseType" /> <xsd:complexType name="addType"> <xsd:sequence> <xsd:element name="user" type="tns:user" /> </xsd:sequence> </xsd:complexType> <xsd:complexType name="addResponseType"> <xsd:sequence /> </xsd:complexType> <xsd:complexType name="deleteType"> <xsd:sequence> <xsd:element name="username" type="xsd:string" /> </xsd:sequence> </xsd:complexType> <xsd:complexType name="deleteResponseType"> <xsd:sequence /> </xsd:complexType> <xsd:complexType name="listType"> <xsd:sequence /> </xsd:complexType> <xsd:complexType name="listResponseType"> <xsd:sequence minOccurs="1" maxOccurs="unbounded"> <xsd:element name="user" type="tns:user" /> </xsd:sequence> </xsd:complexType> <xsd:complexType name="loginType"> <xsd:sequence> <xsd:element name="username" type="xsd:string" /> <xsd:element name="passwrod" type="xsd:string" /> </xsd:sequence> </xsd:complexType> <xsd:complexType name="loginResponseType"> <xsd:sequence> <xsd:element name="user" type="tns:user" /> </xsd:sequence> </xsd:complexType> <xsd:complexType name="user"> <xsd:sequence> <xsd:element name="username" type="xsd:string" /> <xsd:element name="nickname" type="xsd:string" /> <xsd:element name="passwrod" type="xsd:string" /> </xsd:sequence> </xsd:complexType> </xsd:schema> </wsdl:types> <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> <wsdl:portType name="IMyService"> <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> <wsdl:binding name="userServiceSOAP" type="tns:IMyService"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" /> <wsdl:operation name="add"> <wsdl:input> <soap:body use="literal" /> </wsdl:input> <wsdl:output> <soap:body use="literal" /> </wsdl:output> </wsdl:operation> <wsdl:operation name="delete"> <wsdl:input> <soap:body use="literal" /> </wsdl:input> <wsdl:output> <soap:body use="literal" /> </wsdl:output> </wsdl:operation> <wsdl:operation name="login"> <wsdl:input> <soap:body use="literal" /> </wsdl:input> <wsdl:output> <soap:body use="literal" /> </wsdl:output> </wsdl:operation> <wsdl:operation name="list"> <wsdl:input> <soap:body use="literal" /> </wsdl:input> <wsdl:output> <soap:body use="literal" /> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:service name="UserService"> <wsdl:port binding="tns:userServiceSOAP" name="UserServicePort"> <soap:address location="http://localhost:8800/us/" /> </wsdl:port> </wsdl:service> </wsdl:deFinitions>
@H_404_15@
使用wsimport导出Java文件,拷贝到客户端中。
基本构架完成。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。