webservice的引用数据类型的参数化

来源:互联网 发布:免费com网站域名注册 编辑:程序博客网 时间:2024/04/28 22:54

一、问题的引进

刚才我们的参数都是基本数据类型,那么如果参数是引用数据类型,那么将是如何表现的呢?

一、定义一个User类

具体的类如下:
package com.npf.model;import java.io.Serializable;public class User implements Serializable{private static final long serialVersionUID = 1L;private String id;private String username;private String password;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}}

三、在web service的接口和实现类中添加方法

接口:
package com.npf.server;import javax.jws.WebParam;import javax.jws.WebResult;import javax.jws.WebService;import com.npf.model.User;@WebServicepublic interface MyService {@WebResult(name="addReturnResult")public int add(@WebParam(name="a")int a, @WebParam(name="b")int b);@WebResult(name="loginReturnUser")public User login(@WebParam(name="username")String username,@WebParam(name="password")String password);}

实现类:
package com.npf.server;import javax.jws.WebService;import com.npf.model.User;@WebService(endpointInterface="com.npf.server.MyService")public class MyServiceImpl implements MyService {@Overridepublic int add(int a, int b) {System.out.println("a+b"+"="+(a+b));return a+b;}@Overridepublic User login(String username, String password) {User user = new User();user.setId("1");user.setUsername("Jack");user.setPassword("npf123");return user;}}

四、发布web service

package com.npf.server;import javax.xml.ws.Endpoint;public class ServerStart {public static void main(String[] args) {MyService service = new MyServiceImpl();Endpoint.publish("http://localhost:8888/ns", service);}}

五、测试

访问:http://localhost:8888/ns?wsdl


接着我们访问http://localhost:8888/ns?xsd=1, 查看参数的具体信息。


1. 首先我们分析:
<xs:element name="login" type="tns:login"/>
这个元素的名称为login, 它对应的数据类型是"tns:login"。接着我们看他的数据类型:
<xs:complexType name="login"><xs:sequence><xs:element name="username" type="xs:string" minOccurs="0"/><xs:element name="password" type="xs:string" minOccurs="0"/></xs:sequence></xs:complexType>
很明显,它是由2个基本的(xml数据类型)string类型的username和password两个基本参数。
2. 我们接着分析:
<xs:element name="loginResponse" type="tns:loginResponse"/>
这个元素的名称为loginResponse, 它对应的数据类型是"tns:loginResponse"。接着我们看他的数据类型:
<xs:complexType name="loginResponse"><xs:sequence><xs:element name="loginReturnUser" type="tns:user" minOccurs="0"/></xs:sequence></xs:complexType>
很明显,它又引用了一个数据类型为"tns:user"的类型:
<xs:complexType name="user"><xs:sequence><xs:element name="id" type="xs:string" minOccurs="0"/><xs:element name="password" type="xs:string" minOccurs="0"/><xs:element name="username" type="xs:string" minOccurs="0"/></xs:sequence></xs:complexType>
到这里,很清楚的看到,其实"tns:user"就是一个xml格式的文档。至此,我们知道,再复杂的数据类型,都可以转换成xml格式的文档进行传输。
<user>    <id>1</id>    <username>Jack</username>    <password>npf123</password></user>

0 0
原创粉丝点击