webservice-之使用axis+spring开发(转自勇哥的BLOG)

一、环境配置 :在 eclipse 中配置引入相应的 Spring 框架( core/Remoting/Web )、 axis 包。 <o:p> </o:p>

<v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"> <v:stroke joinstyle="miter"> </v:stroke> <v:formulas> <v:f eqn="if lineDrawn pixelLineWidth 0"> </v:f> <v:f eqn="sum @0 1 0"> </v:f> <v:f eqn="sum 0 0 @1"> </v:f> <v:f eqn="prod @2 1 2"> </v:f> <v:f eqn="prod @3 21600 pixelWidth"> </v:f> <v:f eqn="prod @3 21600 pixelHeight"> </v:f> <v:f eqn="sum @0 0 1"> </v:f> <v:f eqn="prod @6 1 2"> </v:f> <v:f eqn="prod @7 21600 pixelWidth"> </v:f> <v:f eqn="sum @8 21600 0"> </v:f> <v:f eqn="prod @7 21600 pixelHeight"> </v:f> <v:f eqn="sum @10 21600 0"> </v:f> </v:formulas> <v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"> </v:path> <o:lock aspectratio="t" v:ext="edit"> </o:lock> </v:shapetype> <v:shape id="_x0000_i1025" style="WIDTH: 414.75pt; HEIGHT: 273pt" type="#_x0000_t75"> <v:imagedata o:title="" src="file:///D:\Winbak\Temp\msohtml1\01\clip_image001.png"> </v:imagedata> </v:shape> <o:p> </o:p>

<o:p> </o:p>

二、代码开发 <o:p> </o:p>

1、  MyEclipse 中建立一个新的 J2EEWeb Project, 新建 javatest <o:p> </o:p>

2、  接口文件 HelloWorldRemote.java<o:p></o:p>

package test;<o:p></o:p>

//Spring 工程中要使用的接口文件 <o:p> </o:p>

public interface HelloWorldRemote <o:p></o:p>

{<o:p></o:p>

       public String getMessage(String name);<o:p></o:p>

}<o:p></o:p>

3、  接口实现文件 HelloWorldBean.java<o:p></o:p>

package test;<o:p></o:p>

//Spring 工程中要使用的接口实现文件 <o:p> </o:p>

public class HelloWorldBean implements HelloWorldRemote <o:p></o:p>

{     <o:p></o:p>

       private String helloStr; // Spring 中需要注入的字符串        <o:p> </o:p>

       public String getHelloStr() <o:p></o:p>

       {<o:p></o:p>

              return helloStr;<o:p></o:p>

       }<o:p></o:p>

       public void setHelloStr(String helloStr) <o:p></o:p>

       {<o:p></o:p>

              this.helloStr = helloStr;<o:p></o:p>

       }<o:p></o:p>

       // 实现接口中的方法 <o:p> </o:p>

       public String getMessage(String name) <o:p></o:p>

       {<o:p></o:p>

              return helloStr + ":" + name;<o:p></o:p>

       }     <o:p></o:p>

}<o:p></o:p>

4、  Spring 中对 Web Service 进行封装很简单,仅仅需要继承 <o:p> </o:p>

org.springframework.remoting.jaxrpc.ServletEndpointSupport 类,实现里面的一些方法,包装一次,将其发布出来就可以。 HelloWorldWebService.java<o:p></o:p>

package test;<o:p></o:p>

import javax.xml.rpc.ServiceException;<o:p></o:p>

import org.springframework.remoting.jaxrpc.ServletEndpointSupport;<o:p></o:p>

public class HelloWorldWebService <o:p></o:p>

              extends ServletEndpointSupport <o:p></o:p>

              implements HelloWorldRemote <o:p></o:p>

{<o:p></o:p>

       private HelloWorldRemote helloWorld;<o:p></o:p>

       protected void onInit() throws ServiceException <o:p></o:p>

       {<o:p></o:p>

              // Spring 容器中获取 Bean 的实例 <o:p> </o:p>

              helloWorld = (HelloWorldRemote) getApplicationContext()<o:p></o:p>

                            .getBean("myHelloWorldBean");<o:p></o:p>

       }<o:p></o:p>

       public String getMessage(String name)  <o:p></o:p>

       {<o:p></o:p>

              // 执行 Bean 中的相同的方法 <o:p> </o:p>

              return helloWorld.getMessage(name);<o:p></o:p>

       }<o:p></o:p>

}<o:p></o:p>

<o:p> </o:p>

三、配置文件 (全部放在 /WEB-INF/ 目录下 <o:p> </o:p>

1、  web.xmlweb 加载 springaxis 配置 <o:p> </o:p>

<!--Spring 框架需要引入的配置文件及相关类 --><o:p></o:p>

       <context-param><o:p></o:p>

              <param-name>contextConfigLocation</param-name><o:p></o:p>

              <param-value>/WEB-INF/applicationContext.xml</param-value><o:p></o:p>

       </context-param><o:p></o:p>

       <servlet><o:p></o:p>

              <servlet-name>context</servlet-name><o:p></o:p>

              <servlet-class><o:p></o:p>

                     org.springframework.web.context.ContextLoaderServlet<o:p></o:p>

              </servlet-class><o:p></o:p>

              <load-on-startup>1</load-on-startup><o:p></o:p>

       </servlet><o:p></o:p>

       <!--axis 需要引入的 Servlet --><o:p></o:p>

       <servlet><o:p></o:p>

              <servlet-name>axis</servlet-name><o:p></o:p>

              <servlet-class><o:p></o:p>

                     org.apache.axis.transport.http.AxisServlet<o:p></o:p>

              </servlet-class><o:p></o:p>

              <load-on-startup>2</load-on-startup><o:p></o:p>

       </servlet><o:p></o:p>

       <servlet-mapping><o:p></o:p>

              <servlet-name>axis</servlet-name><o:p></o:p>

              <url-pattern>/services/*</url-pattern><o:p></o:p>

       </servlet-mapping><o:p></o:p>

       <!--axisWeb ServiceWeb 发布路径 --><o:p></o:p>

2、  applicationContext.xmlspring 的配置 <o:p> </o:p>

<?xml version="1.0" encoding="UTF-8"?>   <o:p></o:p>

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" <o:p></o:p>

"http://www.springframework.org/dtd/spring-beans.dtd">     <o:p></o:p>

<beans><o:p></o:p>

<bean id="myHelloWorldBean" class="test.HelloWorldBean"><o:p></o:p>

              <property name="helloStr"><o:p></o:p>

                     <value>Say Hello to :</value><o:p></o:p>

              </property><o:p></o:p>

       </bean><o:p></o:p>

</beans><o:p></o:p>

3、  server-config.wsddaxis 服务配置 <o:p> </o:p>

<deployment xmlns="http://xml.apache.org/axis/wsdd/"<o:p></o:p>

       xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"><o:p></o:p>

       <handler name="URLMapper"<o:p></o:p>

              type="java:org.apache.axis.handlers.http.URLMapper" />    <o:p></o:p>

       <!-- 系统服务 --><o:p></o:p>

       <service name="AdminService" provider="java:MSG"><o:p></o:p>

              <parameter name="allowedMethods" value="AdminService" /><o:p></o:p>

              <parameter name="enableRemoteAdmin" value="false" /><o:p></o:p>

              <parameter name="className" value="org.apache.axis.utils.Admin" /><o:p></o:p>

              <namespace>http://xml.apache.org/axis/wsdd/</namespace><o:p></o:p>

       </service><o:p></o:p>

       <service name="Version" provider="java:RPC"><o:p></o:p>

              <parameter name="allowedMethods" value="getVersion" /><o:p></o:p>

              <parameter name="className" value="org.apache.axis.Version" /><o:p></o:p>

       </service>      <o:p></o:p>

       <!-- 自定义服务 --><o:p></o:p>

       <service name="myWebService" provider="java:RPC"><o:p></o:p>

              <parameter name="className"<o:p></o:p>

                     value="test.HelloWorldWebService" /><o:p></o:p>

              <parameter name="allowedMethods" value="*" /><o:p></o:p>

       </service><o:p></o:p>

       <transport name="http"><o:p></o:p>

              <requestFlow><o:p></o:p>

                     <handler type="URLMapper" /><o:p></o:p>

              </requestFlow><o:p></o:p>

       </transport><o:p></o:p>

</deployment><o:p></o:p>

<o:p> </o:p>

四、测试 客户端 TestWebServiceClient.java<o:p></o:p>

package test;<o:p></o:p>

import javax.xml.namespace.QName;<o:p></o:p>

import org.apache.axis.client.Call;<o:p></o:p>

import org.apache.axis.client.Service;<o:p></o:p>

public class TestWebServiceClient <o:p></o:p>

{     <o:p></o:p>

       public static void main(String[] args)<o:p></o:p>

       {     <o:p></o:p>

              try <o:p></o:p>

              {<o:p></o:p>

                     String wsdlUrl <o:p></o:p>

= "http://localhost:8080/spring-axis/services/myWebService?wsdl";<o:p></o:p>

                     String nameSpaceUri <o:p></o:p>

= "http://localhost:8080/spring-axis/services/myWebService";<o:p></o:p>

                     // 创建调用对象 <o:p> </o:p>

                     Service service = new Service();<o:p></o:p>

                     Call call = null;<o:p></o:p>

                     call = (Call) service.createCall();<o:p></o:p>

                     // 调用 getMessage<o:p></o:p>

                     System.out.println(">>>getMessage");<o:p></o:p>

                     call.setOperationName(new QName(nameSpaceUri, "getMessage"));<o:p></o:p>

                     call.setTargetEndpointAddress(new java.net.URL(wsdlUrl));<o:p></o:p>

                     String ret = (String) call.invoke(new Object[] { "ABC" });<o:p></o:p>

                     System.out.println("return value is " + ret);<o:p></o:p>

              } <o:p></o:p>

              catch (Exception e) <o:p></o:p>

              {<o:p></o:p>

                     e.printStackTrace();<o:p></o:p>

              }<o:p></o:p>

       }<o:p></o:p>

}<o:p></o:p>

<o:p> </o:p>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值