吕展辉

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

1、首先编写Wsdl(基于契约优先的方式),要注意的是命名空间(若是使用include或import)最好使用一致的,代码如下:

  1 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
  2 <wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
  3                 xmlns:tns="http://www.xiaoqiaolv/ws" 
  4                 xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
  5                 xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
  6                 name="UserServiceImpl" 
  7                 targetNamespace="http://www.xiaoqiaolv/ws">
  8   <wsdl:types>
  9     <xsd:schema targetNamespace="http://www.xiaoqiaolv/ws">
 10      <!-- <xsd:include schemaLocation="UserSchema.xsd"/> -->
 11      <!-- <xsd:import namespace="http://www.xiaoqiaolv/ws" schemaLocation="UserSchema.xsd"/>-->
 12     
 13         <xsd:element name="add" type="tns:add"/>
 14         <xsd:element name="addResponse" type="tns:addResponse"/>
 15         <xsd:element name="delete" type="tns:delete"/>
 16         <xsd:element name="deleteResponse" type="tns:deleteResponse"/>
 17         <xsd:element name="login" type="tns:login"/>
 18         <xsd:element name="loginResponse" type="tns:loginResponse"/>
 19         <xsd:element name="list" type="tns:list"/>
 20         <xsd:element name="listResponse" type="tns:listResponse"/>
 21         
 22         <xsd:complexType name="add">
 23             <xsd:sequence>
 24                 <xsd:element name="user" type="tns:user"/>
 25             </xsd:sequence>
 26         </xsd:complexType>
 27         <xsd:complexType name="addResponse">
 28             <xsd:sequence/>
 29         </xsd:complexType>
 30         
 31         <xsd:complexType name="delete">
 32             <xsd:sequence>
 33                 <xsd:element name="username" type="xsd:string"/>
 34             </xsd:sequence>
 35         </xsd:complexType>
 36         <xsd:complexType name="deleteResponse">
 37             <xsd:sequence/>
 38         </xsd:complexType>
 39         
 40         <xsd:complexType name="list">
 41             <xsd:sequence/>
 42         </xsd:complexType>
 43         <xsd:complexType name="listResponse">
 44             <xsd:sequence minOccurs="0" maxOccurs="unbounded">
 45                 <xsd:element name="user" type="tns:user"/>
 46             </xsd:sequence>
 47         </xsd:complexType>
 48         
 49         <xsd:complexType name="login">
 50             <xsd:sequence>
 51                 <xsd:element name="username" type="xsd:string"/>
 52                 <xsd:element name="password" type="xsd:string"/>
 53             </xsd:sequence>
 54         </xsd:complexType>
 55         <xsd:complexType name="loginResponse">
 56             <xsd:sequence/>
 57         </xsd:complexType>
 58         <xsd:complexType name="user">
 59             <xsd:sequence>
 60                 <xsd:element name="id" type="xsd:int"/>
 61                 <xsd:element name="username" type="xsd:string"/>
 62                 <xsd:element name="password" type="xsd:string"/>
 63             </xsd:sequence>
 64         </xsd:complexType>
 65     </xsd:schema>
 66   </wsdl:types>
 67   
 68   <wsdl:message name="addMessage">
 69     <wsdl:part element="tns:add" name="add"/>
 70   </wsdl:message>
 71   <wsdl:message name="addResponseMessage">
 72     <wsdl:part element="tns:addResponse" name="addResponse"/>
 73   </wsdl:message>
 74   
 75   <wsdl:message name="deleteMessage">
 76       <wsdl:part name="delete" element="tns:delete"/>
 77   </wsdl:message>
 78   <wsdl:message name="deleteResponseMessage">
 79       <wsdl:part name="deleteResponse" element="tns:deleteResponse"/>
 80   </wsdl:message>
 81   
 82   <wsdl:message name="listMessage">
 83       <wsdl:part name="list" element="tns:list"/>
 84   </wsdl:message>
 85   <wsdl:message name="listResponseMessage">
 86       <wsdl:part name="listResponse" element="tns:listResponse"/>
 87   </wsdl:message>
 88   
 89   <wsdl:message name="loginMessage">
 90       <wsdl:part name="login" element="tns:login"/>
 91   </wsdl:message>
 92   <wsdl:message name="loginResponseMessage">
 93       <wsdl:part name="loginResponse" element="tns:loginResponse"></wsdl:part>
 94   </wsdl:message>
 95   
 96   <wsdl:portType name="UserService">
 97     <wsdl:operation name="add">
 98       <wsdl:input message="tns:addMessage"/>
 99       <wsdl:output message="tns:addResponseMessage"/>
100     </wsdl:operation>
101     
102     <wsdl:operation name="delete">
103       <wsdl:input message="tns:deleteMessage"/>
104       <wsdl:output message="tns:deleteResponseMessage"/>
105     </wsdl:operation>
106     
107     <wsdl:operation name="list">
108       <wsdl:input message="tns:listMessage"/>
109       <wsdl:output message="tns:listResponseMessage"/>
110     </wsdl:operation>
111     
112     <wsdl:operation name="login">
113       <wsdl:input message="tns:loginMessage"/>
114       <wsdl:output message="tns:loginResponseMessage"/>
115     </wsdl:operation>
116   </wsdl:portType>
117   
118   <wsdl:binding name="userBinding" type="tns:UserService">
119     <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
120     <wsdl:operation name="add">
121       <soap:operation soapAction="http://www.xiaoqiaolv/ws/add"/>
122       <wsdl:input>
123         <soap:body use="literal"/>
124       </wsdl:input>
125       <wsdl:output>
126         <soap:body use="literal"/>
127       </wsdl:output>
128     </wsdl:operation>
129     
130     <wsdl:operation name="delete">
131       <soap:operation soapAction="http://www.xiaoqiaolv/ws/delete"/>
132       <wsdl:input>
133         <soap:body use="literal"/>
134       </wsdl:input>
135       <wsdl:output>
136         <soap:body use="literal"/>
137       </wsdl:output>
138     </wsdl:operation>
139     
140     <wsdl:operation name="login">
141       <soap:operation soapAction="http://www.xiaoqiaolv/ws/login"/>
142       <wsdl:input>
143         <soap:body use="literal"/>
144       </wsdl:input>
145       <wsdl:output>
146         <soap:body use="literal"/>
147       </wsdl:output>
148     </wsdl:operation>
149     
150     <wsdl:operation name="list">
151       <soap:operation soapAction="http://www.xiaoqiaolv/ws/list"/>
152       <wsdl:input>
153         <soap:body use="literal"/>
154       </wsdl:input>
155       <wsdl:output>
156         <soap:body use="literal"/>
157       </wsdl:output>
158     </wsdl:operation>
159   </wsdl:binding>
160   <wsdl:service name="UserServiceImpl">
161     <wsdl:port binding="tns:userBinding" name="UserServiceImplPort">
162       <soap:address location="http://localhost:9999/ws"/>
163     </wsdl:port>
164   </wsdl:service>
165 </wsdl:definitions>

2、实现服务器端的应用实现,这个就不加代码了,根据wsdl文档用wsimport生成服务,只取出接口service,然后其他的和我们正常的web开发都一致。

3、服务端发布服务:public static void main(String[] args) {
        Endpoint.publish("http://localhost:9999/ws", new UserServiceImpl());
    }

4、实现客户端:根据服务网址http://localhost:9999/ws,生成服务,得到所有以.java为后缀的类,把整个包包含在自己的项目中

5、编写测试类:代码如下:

 1 public class Test {
 2     private UserService userService;
 3     private UserServiceImpl userServiceImpl;
 4     
 5     public void testWsdl(){
 6         try {
 7             URL url = new URL("http://localhost:9999/ws?wsdl");
 8             QName  qname = new QName("http://www.xiaoqiaolv/ws","UserServiceImpl");
 9             userServiceImpl = new UserServiceImpl(url,qname);
10             userService = userServiceImpl.getUserServiceImplPort();
11             User user = new User();
12             user.setUsername("aaa");
13             user.setPassword("1111");
14             user.setId(21212);
15             userService.add(user);
16             List<User> list = userService.list();
17             for(User u:list){
18                 System.out.println(u.getUsername());
19             }
20         } catch (MalformedURLException e) {
21             // TODO Auto-generated catch block
22             e.printStackTrace();
23         }
24         
25     }
26     public static void main(String[] args) {
27         new Test().testWsdl();
28     }
29 }

6、有问题的话可以打开tcpmon,对接口服务进行监听,查看客户端与服务端传递的信息java -jar tcpmon.jar

posted on 2014-02-25 09:59  吕展辉  阅读(262)  评论(0编辑  收藏  举报