Webservice_21_SOAP的基於契約優先開發用戶管理_實現Wsdl

非常感謝孫浩老師。

先編寫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>


 

編寫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>


使用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;
	}
	
	
}


 

添加接口實現類,還沒有實現功能,注意類名上的註解必須要:

 

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;
	}

}


 

在服務端新建服務方法:

 

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());
	}
}


 

啓動服務後,可成功訪問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>


 

使用wsimport導出Java文件,拷貝到客戶端中。

基本構架完成。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章