在实现过程中,遇到两个问题:

1: schema 写错:

错误: http://myschool.com/schemas/st

正确: http://myschool.com/st/schemas    ---- schemas必须结尾才是schema  这个决定了Namspace

2: Response 对 server 端有 response 返回 需要通过采用jaxb实现

配置如下:

  1. package school.info.pojo;
  2.  
  3. import javax.xml.bind.annotation.XmlAccessType;
  4. import javax.xml.bind.annotation.XmlAccessorType;
  5. import javax.xml.bind.annotation.XmlRootElement;
  6.  
  7. import org.springframework.stereotype.Component;
  8.  
  9. @Component
  10. @XmlRootElement
  11. @XmlAccessorType(XmlAccessType.FIELD)
  12. public class FindByIdResponse {
  13.  
  14. private Student student;
  15.  
  16. public Student getStudent() {
  17. return student;
  18. }
  19.  
  20. public void setStudent(Student student) {
  21. this.student = student;
  22. }
  23.  
  24. }
  1. package school.info.endpoint;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.Iterator;
  5. import java.util.List;
  6.  
  7. import org.jdom2.Element;
  8. import org.jdom2.JDOMException;
  9. import org.jdom2.Namespace;
  10. import org.jdom2.filter.Filters;
  11. import org.jdom2.xpath.XPathExpression;
  12. import org.jdom2.xpath.XPathFactory;
  13. import org.springframework.ws.server.endpoint.annotation.Endpoint;
  14. import org.springframework.ws.server.endpoint.annotation.PayloadRoot;
  15. import org.springframework.ws.server.endpoint.annotation.RequestPayload;
  16. import org.springframework.ws.server.endpoint.annotation.ResponsePayload;
  17.  
  18. import school.info.pojo.FindAllStudentsResponse;
  19. import school.info.pojo.FindByIdResponse;
  20. import school.info.pojo.Student;
  21. import school.info.service.IStudentService;
  22. import school.info.service.StudentService;
  23.  
  24. @Endpoint
  25. public class StudentInfoEndpoint {
  26.  
  27. private static final String namespace_schema="http://myschool.com/st/schemas";
  28.  
  29. private IStudentService service=new StudentService();;
  30.  
  31. private XPathExpression<Element> ageExpression;
  32. private XPathExpression<Element> nameExpression;
  33. private XPathExpression<Element> passwordExpression;
  34. private XPathExpression<Element> studentIdExpression;
  35. private XPathExpression<Element> levelExpression;
  36.  
  37. public StudentInfoEndpoint() throws JDOMException{
  38. Namespace namespace=Namespace.getNamespace("st",namespace_schema);
  39. XPathFactory xpathFactory = XPathFactory.instance();
  40. studentIdExpression = xpathFactory.compile("//st:StudentId",Filters.element(),null,namespace);
  41. nameExpression = xpathFactory.compile("//st:Name",Filters.element(),null,namespace);
  42. passwordExpression = xpathFactory.compile("//st:Password",Filters.element(),null,namespace);
  43. ageExpression = xpathFactory.compile("//st:Age",Filters.element(),null,namespace);
  44. levelExpression = xpathFactory.compile("//st:Level",Filters.element(),null,namespace);
  45. }
  46.  
  47. @PayloadRoot(namespace = namespace_schema, localPart = "RegisterRequest")
  48. public void handleRegisterRequest(@RequestPayload Element registerRequest){
  49. String name=nameExpression.evaluate(registerRequest).get(0).getValue();
  50. String password=passwordExpression.evaluate(registerRequest).get(0).getValue();
  51. String age_str=ageExpression.evaluate(registerRequest).get(0).getValue();
  52. long age=Long.parseLong(age_str);
  53. String level=levelExpression.evaluate(registerRequest).get(0).getValue();
  54. System.out.println(name+":"+password+":"+age+":"+level);
  55. service.register(name, password, age, level);
  56. }
  57. @PayloadRoot(namespace = namespace_schema, localPart = "UpdateRequest")
  58. public void handleUpdateRequest(@RequestPayload Element updateRequest){
  59. long studentId=Long.parseLong(studentIdExpression.evaluate(updateRequest).get(0).getValue());
  60. String name=nameExpression.evaluate(updateRequest).get(0).getValue();
  61. String password=passwordExpression.evaluate(updateRequest).get(0).getValue();
  62. String age_str=ageExpression.evaluate(updateRequest).get(0).getValue();
  63. long age=Long.parseLong(age_str);
  64. String level=levelExpression.evaluate(updateRequest).get(0).getValue();
  65. service.update(name, password, age, level,studentId);
  66. }
  67. @PayloadRoot(namespace = namespace_schema, localPart = "DeleteRequest")
  68. public void handleDeleteRequest(@RequestPayload Element deleteRequest){
  69. long studentId=Long.parseLong(studentIdExpression.evaluate(deleteRequest).get(0).getValue());
  70. service.delete(studentId);
  71. }
  72. @PayloadRoot(namespace = namespace_schema, localPart = "FindByIdRequest")
  73. @ResponsePayload
  74. public FindByIdResponse handleFindByIdRequest(@RequestPayload Element findByIdRequest){
  75. long studentId=Long.parseLong(studentIdExpression.evaluate(findByIdRequest).get(0).getValue());
  76. Student stu=service.findById(studentId);
  77. FindByIdResponse response=new FindByIdResponse();
  78. response.setStudent(stu);
  79. return response;
  80. }
  81. @PayloadRoot(namespace = namespace_schema, localPart = "FindAllStudentsRequest")
  82. @ResponsePayload
  83. public FindAllStudentsResponse handleFindAllStudentsRequest(@RequestPayload Element FindAllStudentsRequest){
  84. //long studentId=Long.parseLong(studentIdExpression.evaluate(FindAllStudentsRequest).get(0).getValue());
  85. List list=service.findAllStudents();
  86. List<Student> students=new ArrayList<Student>();
  87. Iterator ir=list.iterator();
  88. while(ir.hasNext()){
  89. Object[] tuple=(Object[])ir.next();
  90. Student s=new Student();
  91. s.setStudentId(Long.parseLong(tuple[0].toString()));
  92. s.setName(tuple[1].toString());
  93. s.setLevel(tuple[2].toString());
  94. s.setAge(Long.parseLong(tuple[3].toString()));
  95. s.setPassword(tuple[4].toString());
  96. students.add(s);
  97. }
  98. FindAllStudentsResponse all=new FindAllStudentsResponse();
  99. all.setList(students);
  100. return all;
  101. }
  102. }
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <wsdl:definitions xmlns:st="http://myschool.com/st/schemas" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://myschool.com/stu/definitions" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://myschool.com/st/schemas">
  3. <wsdl:types>
  4. <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
  5. xmlns:st="http://myschool.com/st/schemas"
  6. elementFormDefault="qualified"
  7. targetNamespace="http://myschool.com/st/schemas">
  8. <xs:element name="RegisterRequest">
  9. <xs:complexType>
  10. <xs:all>
  11. <xs:element name="Age" type="xs:long"/>
  12. <xs:element name="Name" type="xs:string"/>
  13. <xs:element name="Password" type="xs:string"/>
  14. <xs:element name="Level" type="xs:string"/>
  15. </xs:all>
  16. </xs:complexType>
  17. </xs:element>
  18. <xs:element name="UpdateRequest">
  19. <xs:complexType>
  20. <xs:all>
  21. <xs:element name="Student" type="st:StudentType"/>
  22. </xs:all>
  23. </xs:complexType>
  24. </xs:element>
  25. <xs:element name="DeleteRequest">
  26. <xs:complexType>
  27. <xs:all>
  28. <xs:element name="StudentId" type="xs:long"/>
  29. </xs:all>
  30. </xs:complexType>
  31. </xs:element>
  32. <xs:element name="FindByIdRequest">
  33. <xs:complexType>
  34. <xs:all>
  35. <xs:element name="StudentId" type="xs:long"/>
  36. </xs:all>
  37. </xs:complexType>
  38. </xs:element>
  39. <xs:element name="FindByIdResponse">
  40. <xs:complexType>
  41. <xs:all>
  42. <xs:element name="Student" type="st:StudentType"/>
  43. </xs:all>
  44. </xs:complexType>
  45. </xs:element>
  46. <xs:element name="FindAllStudentsRequest">
  47. </xs:element>
  48. <xs:element name="FindAllStudentsResponse">
  49. <xs:complexType>
  50. <xs:all>
  51. <xs:element name="list" type="st:StudentTypeList"></xs:element>
  52. </xs:all>
  53. </xs:complexType>
  54. </xs:element>
  55. <xs:complexType name="StudentTypeList">
  56. <xs:sequence>
  57. <xs:element name="Student" type="st:StudentType" maxOccurs="unbounded"></xs:element>
  58. </xs:sequence>
  59. </xs:complexType>
  60. <xs:complexType name="StudentType">
  61. <xs:sequence>
  62. <xs:element name="StudentId" type="xs:long"/>
  63. <xs:element name="Age" type="xs:long"/>
  64. <xs:element name="Name" type="xs:string"/>
  65. <xs:element name="Password" type="xs:string"/>
  66. <xs:element name="Level" type="xs:string"/>
  67. </xs:sequence>
  68. </xs:complexType>
  69. </xs:schema>
  70. </wsdl:types>
  71. <wsdl:message name="DeleteRequest">
  72. <wsdl:part element="st:DeleteRequest" name="DeleteRequest"></wsdl:part>
  73. </wsdl:message>
  74. <wsdl:message name="RegisterRequest">
  75. <wsdl:part element="st:RegisterRequest" name="RegisterRequest"></wsdl:part>
  76. </wsdl:message>
  77. <wsdl:message name="FindByIdRequest">
  78. <wsdl:part element="st:FindByIdRequest" name="FindByIdRequest"></wsdl:part>
  79. </wsdl:message>
  80. <wsdl:message name="UpdateRequest">
  81. <wsdl:part element="st:UpdateRequest" name="UpdateRequest"></wsdl:part>
  82. </wsdl:message>
  83. <!-- added -->
  84. <wsdl:message name="FindAllStudentsRequest">
  85. <wsdl:part element="st:FindAllStudentsRequest" name="FindAllStudentsRequest"></wsdl:part>
  86. </wsdl:message>
  87. <wsdl:message name="FindByIdResponse">
  88. <wsdl:part element="st:FindByIdResponse" name="FindByIdResponse"></wsdl:part>
  89. </wsdl:message>
  90. <wsdl:message name="FindAllStudentsResponse">
  91. <wsdl:part element="st:FindAllStudentsResponse" name="FindAllStudentsResponse"></wsdl:part>
  92. </wsdl:message>
  93. <!-- added -->
  94. <wsdl:portType name="StudentService">
  95. <wsdl:operation name="Delete">
  96. <wsdl:input message="st:DeleteRequest" name="DeleteRequest"></wsdl:input>
  97. </wsdl:operation>
  98. <wsdl:operation name="Register">
  99. <wsdl:input message="st:RegisterRequest" name="RegisterRequest"></wsdl:input>
  100. </wsdl:operation>
  101. <wsdl:operation name="FindById">
  102. <wsdl:input message="st:FindByIdRequest" name="FindByIdRequest"></wsdl:input>
  103. <wsdl:output message="st:FindByIdResponse" name="FindByIdResponse"></wsdl:output>
  104. </wsdl:operation>
  105. <wsdl:operation name="Update">
  106. <wsdl:input message="st:UpdateRequest" name="UpdateRequest"></wsdl:input>
  107. </wsdl:operation>
  108. <!-- added -->
  109. <wsdl:operation name="FindAllStudentsRequest">
  110. <wsdl:input message="st:FindAllStudentsRequest" name="FindAllStudentsRequest"></wsdl:input>
  111. <wsdl:output message="st:FindAllStudentsResponse" name="FindAllStudentsResponse"></wsdl:output>
  112. </wsdl:operation>
  113. <!-- added -->
  114. </wsdl:portType>
  115. <wsdl:binding name="StudentServiceSoap11" type="st:StudentService">
  116. <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
  117. <wsdl:operation name="Delete">
  118. <soap:operation soapAction=""/>
  119. <wsdl:input name="DeleteRequest">
  120. <soap:body use="literal"/>
  121. </wsdl:input>
  122. </wsdl:operation>
  123. <wsdl:operation name="Register">
  124. <soap:operation soapAction=""/>
  125. <wsdl:input name="RegisterRequest">
  126. <soap:body use="literal"/>
  127. </wsdl:input>
  128. </wsdl:operation>
  129. <wsdl:operation name="FindById">
  130. <soap:operation soapAction=""/>
  131. <wsdl:input name="FindByIdRequest">
  132. <soap:body use="literal"/>
  133. </wsdl:input>
  134. <wsdl:output name="FindByIdResponse">
  135. <soap:body use="literal"/>
  136. </wsdl:output>
  137. </wsdl:operation>
  138. <wsdl:operation name="Update">
  139. <soap:operation soapAction=""/>
  140. <wsdl:input name="UpdateRequest">
  141. <soap:body use="literal"/>
  142. </wsdl:input>
  143. </wsdl:operation>
  144. <!-- added -->
  145. <wsdl:operation name="FindAllStudentsRequest">
  146. <soap:operation soapAction=""/>
  147. <wsdl:input name="FindAllStudentsRequest">
  148. <soap:body use="literal"/>
  149. </wsdl:input>
  150. <wsdl:output name="FindAllStudentsResponse">
  151. <soap:body use="literal"/>
  152. </wsdl:output>
  153. </wsdl:operation>
  154. <!-- added -->
  155. </wsdl:binding>
  156. <wsdl:service name="StudentServiceService">
  157. <wsdl:port binding="st:StudentServiceSoap11" name="StudentServiceSoap11">
  158. <soap:address location="http://localhost:8080/StudentInformationTool/"/>
  159. </wsdl:port>
  160. </wsdl:service>
  161. </wsdl:definitions>

我的实现代码:https://github.com/IamGabrielWu/SpringWebService

spring webservice 开发demo (实现基本的CRUD 数据库采用H2)的更多相关文章

  1. Spring的简单demo

    ---------------------------------------- 开发一个Spring的简单Demo,具体的步骤如下: 1.构造一个maven项目 2.在maven项目的pom.xml ...

  2. Spring MVC + Spring + Mybitis开发Java Web程序基础

    Spring MVC + Spring + Mybitis是除了SSH外的另外一种常见的web框架组合. Java web开发和普通的Java应用程序开发是不太一样的,下面是一个Java web开发在 ...

  3. Spring Security OAuth2 Demo

    Spring Security OAuth2 Demo 项目使用的是MySql存储, 需要先创建以下表结构: CREATE SCHEMA IF NOT EXISTS `alan-oauth` DEFA ...

  4. Webservice开发概念

    一.Web Service基本概念 Web Service由两部分组成 SOAP--Web Service之间的基本通信协议. WSDL--Web Service描述语言,它定义了Web Servic ...

  5. spring.net 在demo中的分析

    1.认识spring.net Spring.NET是一个应用程序框架,其目的是协助开发人员创建企业级的.NET应用程序.它提供了很多方面的功能,比如依赖注入.面向方面编程(AOP).数据访问抽象及AS ...

  6. 基于Myeclipse+Axis2的WebService开发实录

    最近开始学习了下在Myeclipse开发工具下基于WebSerivce的开发,下面将相关相关关键信息予以记录 Myeclipse的安装,本文以Myeclipse2014-blue为开发环境,相关配置执 ...

  7. 使用 Spring HATEOAS 开发 REST 服务--转

    原文地址:https://www.ibm.com/developerworks/cn/java/j-lo-SpringHATEOAS/index.html?ca=drs-&utm_source ...

  8. 天天玩微信,Spring Boot 开发私有即时通信系统了解一下

    1/ 概述 利用Spring Boot作为基础框架,Spring Security作为安全框架,WebSocket作为通信框架,实现点对点聊天和群聊天. 2/ 所需依赖 Spring Boot 版本 ...

  9. 使用 Spring HATEOAS 开发 REST 服务

    使用 Spring HATEOAS 开发 REST 服务 学习博客:https://www.ibm.com/developerworks/cn/java/j-lo-SpringHATEOAS/ htt ...

随机推荐

  1. 读取XML

    public sealed class ConfigManger { public XDocument XmlDocs { set; get; } string path = @"{0}\C ...

  2. nodejs ssh2

    https://www.npmjs.com/package/ssh2 npm install ssh2  ssh2文件下载: //前台命令下发 app.get('/test/fileDownload' ...

  3. Mac OS + Nginx + Mysql + PHP 本地环境搭建

    本文是用Mac系统下搭建的环境,使用Linux的童鞋也不要在意,因为很相似,只有下载安装的方式有一点区别.直接进入正文: 1.首先我们需要下载Homebrew,Homebrew简称brew,是Mac ...

  4. jQuery基础选择器

    attr()方法的功能是设置或获取元素的某项属性值. attr("disabled", "true”)表示使该功能不可用. #id 选择器 $("#my_id& ...

  5. 如何在C#中实现图片缩放

    //下面给出三个简单的方法,后面两个方法是扩展,估计有时用得着 //************************************************************// /// ...

  6. 通过百度地图API显示当前位置在地图上(图标显示)--第三方开源--百度地图(二)

    1.下载百度地图的demo,下载地址:http://lbsyun.baidu.com/sdk/download?selected=mapsdk_basicmap,mapsdk_searchfuncti ...

  7. Oracle 10g RAC 启动与关闭

    一. 检查共享设备 一般情况下,存放OCR和Voting Disk的OCFS2 或者raw 都是自动启动的. 如果他们没有启动,RAC 肯定是启动不了. 1.1 如果使用ocfs2的 检查ocfs2 ...

  8. Python中Cookie的处理(一)Cookie库

    Cookie用于服务器实现会话,用户登录及相关功能时进行状态管理.要在用户浏览器上安装cookie,HTTP服务器向HTTP响应添加类似以下内容的HTTP报头: Set-Cookie:session= ...

  9. itertools模块速查

    学习itertools模块记住这张表就OK了 参考:http://docs.python.org/2/library/itertools.html#module-itertools Infinite ...

  10. thinkphp join 查询

    $user=M('user')->table(C('DB_PREFIX').'user as a')->join(C('DB_PREFIX').'role_user as b on a.u ...