`
hevowish
  • 浏览: 3468 次
  • 性别: Icon_minigender_1
  • 来自: Mars
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

工作总结Spring + axis2

阅读更多

       最近工作用到spring+axis,现在抽空整理一下,由于实际工作中仍有细节没有弄清楚,在此只总结一下一般流程,分享给大家,希望对你有帮助,如果能解答我的疑惑还望指教。在网上查了很多资料,大多数是使用Myeclipse,出于个人喜好,我使用的IDE是Eclipse+tomcat6.0。

 

      步骤1:在Eclipse中建立一个web项目,这里起名叫AxisTest,需要的jar包有:

commons-discovery.jar、jaxrpc.jar、saaj.jar、wsdl4j.jar、axis.jar、commons-logging.jar、spring.jar,由于网上大多数例子都是用MyEclipse自动导入jar,所以有的文章中介绍还需要activation.jar、ant.jar,但是在项目把这两个jar包去掉,照样跑通,所以此处不明白这个两个jar有何用,有谁知道请留言给我,谢谢。

    

     步骤2:导入jar包后,分别写如下代码:

   

    声明接口

package com.webservice.axis.test;

/**
 * 声明方法接口
 */
public interface IHelloWorld {

          public String getMessage(String word);
	
}

   

    实现类

   

package com.webservice.axis.test;

/**
 * 实现接口的类,Ioc的依赖注入可以在此处自由发挥
 */
public class HelloWorldImpl implements IHelloWorld {

    private String helloStr; // Spring 中需要注入的字符串        

   public String getHelloStr() { 
       return helloStr; 
    } 

    public void setHelloStr(String helloStr) { 
       this.helloStr = helloStr; 
    } 

    // 实现接口中的方法 
    @Override
    public String getMessage(String name) { 
        return helloStr + ":" + name; 
    }     

}

 

    下面一个类,感觉上像是spring和axis的结合点,用来将类发布成webService,但有些地方值得说一下。

package com.webservice.axis.test;

import javax.xml.rpc.ServiceException;
import org.springframework.remoting.jaxrpc.ServletEndpointSupport;

/**
  * ServletEndpointSupport 是spring提供支持WS的类,这里只需要继承,但是这个类是依赖jaxrpc.jar包,
  * 而从Apache下载的axis1.4中并没有找到jaxrpc.jar包,网上查了很多资料,貌似jaxrpc.jar现在被
  * jaxws-1.4.1.jar代替,曾试过将jaxws导入项目,倒是ServletEndpointSupport 仍然不支持,难
  * 道spring没有对jaxws的支持?
 */
public class HelloWorldWebService extends ServletEndpointSupport implements IHelloWorld {

     private HelloWorldImpl helloWorld;

     protected void onInit()throws ServiceException { 
        // 在 Spring 容器中获取 Bean 的实例 
        helloWorld = (HelloWorldImpl) getApplicationContext() 
                      .getBean("myHelloWorldBean"); 
     } 

     @Override
     public String getMessage(String name) { 
        // 执行 Bean 中的相同的方法 
        return helloWorld.getMessage(name); 
     } 

}

 

步骤3:配置web.xml,这个没什么好说的

  <!--Spring 框架需要引入的配置文件及相关类 --> 
	<context-param> 
		<param-name>contextConfigLocation</param-name> 
		<param-value>classpath*:applicationContext.xml</param-value> 
	</context-param> 

	<servlet> 
		<servlet-name>context</servlet-name> 
		<servlet-class>
        org.springframework.web.context.ContextLoaderServlet
     </servlet-class> 
		<load-on-startup>1</load-on-startup> 
	</servlet> 

	<!--axis 需要引入的 Servlet --> 
	<servlet> 
		<servlet-name>axis</servlet-name> 
		<servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class> 
		<load-on-startup>2</load-on-startup> 
	</servlet> 
	
	<!--axis 的 Web Service 的 Web 发布路径 --> 
	<servlet-mapping> 
		<servlet-name>axis</servlet-name> 
		<url-pattern>/services/*</url-pattern> 
	</servlet-mapping>

 

步骤4:配置server-config.wsdd

<deployment xmlns=http://xml.apache.org/axis/wsdd/ 
   xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> 
       
       <handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper"/>    

       <!-- 系统服务 --> 
       <service name="AdminService" provider="java:MSG"> 
              <parameter name="allowedMethods" value="AdminService" /> 
              <parameter name="enableRemoteAdmin" value="false" /> 
              <parameter name="className" value="org.apache.axis.utils.Admin" /> 
              <namespace>http://xml.apache.org/axis/wsdd/</namespace> 
       </service> 

       <service name="Version" provider="java:RPC"> 
              <parameter name="allowedMethods" value="getVersion" /> 
              <parameter name="className" value="org.apache.axis.Version" /> 
       </service>      

       <!-- 自定义服务 --> 
       <service name="myWebService" provider="java:RPC"> 
              <parameter name="className"
               value="com.webservice.axis.test.HelloWorldWebService" /> 
              <parameter name="allowedMethods" value="*" /> 
              <parameter name="scope" value="request" /> 
       </service> 

       <transport name="http"> 
              <requestFlow> 
		<handler type="URLMapper" /> 
              </requestFlow> 
       </transport> 

</deployment>

 

步骤5:配置applicationContext

<beans xmlns ="http://www.springframework.org/schema/beans" 
    xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:aop ="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation ="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
    http://www.springframework.org/schema/tx   
	http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> 

	<bean id="myHelloWorldBean" class="com.webservice.axis.test.HelloWorldImpl"> 
		<property name="helloStr" value="Say Hello to :" /> 
	</bean> 
	
</beans>

  

 项目目录为:

 

这样服务就发布了,你可以访问http://localhost:8080/AxisTest/services/myWebService或者访问http://localhost:8080/AxisTest/services/myWebService?wsdl来查看生成的myWebService.wsdl文件

 

 有几点想和大家讨论一下:

 

第一:

 在HelloWorldWebService 中helloWorld是通过下面一句,实现注入的,个人感觉不是很优雅

 helloWorld =  (HelloWorldImpl) getApplicationContext().getBean("myHelloWorldBean"); 

 于网上查了不少资料,有一种说法是在server-config.wsdd中将配置改成

 <!-- 自定义服务 --> 
       <service name="myWebService" provider="java:SPRING"> 
              <parameter name="className" value="Spring中Bean的名字" /> 
              <parameter name="allowedMethods" value="*" /> 
              <parameter name="scope" value="request" /> 
       </service>

 

但是这样做会出异常,查了一些资料得知provider的服务类型有4种:RPC、Document、Wrapped和Message,是org.apache.axis.providers包中的API提供的支持,不清楚上面java:SPRING是怎么出来的,或许是我哪里配错了?

 

第二、当访问http://localhost:8080/AxisTest/services/myWebService.wsdl时,会出现警告

警告: The class com.webservice.axis.test.IHelloWorld does not contain a default constructor, which is a requirement for a bean class.  The class cannot be converted into an xml schema type.  An xml schema anyType will be used to define this class in the wsdl file.

 

目前解决方法是将HelloWorldWebService中的helloWorld私有变量声明称HelloWorldImpl类型,为什么有这种情况不得而知,如果哪位牛人经过指点迷津。

 

第三、就是用JDK6自带的一个WSImport工具根据wsdl生成客户端代码,具体的操作如下:

     1、首先要交代WSImport.exe的位置,他在JDK安装目录的bin文件下,cmd可以直接使用%JAVA_HOME%"\bin\WSImport调用

     2、打开cmd命令行,输入指令wsimport -s filePath http://localhost:8080/AxisTest/services/myWebService.wsdl

说明: wsimport -s 生成代码保存路径 wsdl文件路径 详情参见http://www.blogjava.net/downmoon/archive/2010/08/29/330136.html

 

上面的做法是正确无误的,但是我试过会出异常[ERROR] rpc/encoded wsdls are not supported in JAXWS 2.0,上网查过,但没查出所以然。。。 求真相!!!

 

 

 

 

  • 大小: 39.2 KB
1
1
分享到:
评论
1 楼 77tt77 2011-03-20  
怎么没有WSDL文件?

相关推荐

    spring3 + axis2

    在实际项目中,"Spring3 + Axis2"的整合可能涉及到源码级别的工作,包括编写服务接口和服务实现,配置Spring容器,以及处理Axis2的部署描述符。同时,开发过程中会用到一系列工具,如IDE(如Eclipse、IntelliJ IDEA...

    Spring整合axis2经典

    总结,Spring整合Axis2能够充分利用两者的优势,构建高性能、易于维护的Web服务。无论是服务提供者还是消费者,Spring的灵活性和Axis2的效率都能在Web服务开发中发挥重要作用。通过了解和实践这些知识点,开发者可以...

    axis2+Spring提供WebService服务

    总结来说,Axis2+Spring的组合提供了一种强大的方式来构建和管理Java环境下的Web服务。Spring的DI和AOP特性使得服务的配置和扩展更为简单,而Axis2则专注于高效地处理SOAP消息。这种组合不仅降低了复杂性,也提高了...

    webservice axis 实例

    总结,AXIS是一个强大且灵活的Web服务工具,结合Spring框架可以进一步提升Web服务的开发效率和管理能力。理解AXIS的工作原理和最佳实践,对于构建高效、可靠的分布式系统具有重要意义。通过实际操作和学习"spring+...

    用axis2+Tomcat5.5+MyEclipse7.5部署和访问Web服务

    总结来说,这篇文章详细阐述了在MyEclipse环境中使用Axis2和Tomcat搭建Web服务的步骤,适合初学者了解和实践Web服务的部署和开发。整个过程涵盖了从环境配置到服务发布的一系列操作,对于理解Web服务的生命周期管理...

    Axis2 WebService常用功能详解

    6. **集成Spring框架**:Axis2可以与Spring框架无缝集成,使得服务的依赖注入和管理更加简便,同时也方便了服务的部署和测试。 7. **JSON支持**:除了XML(通过SOAP)之外,Axis2还支持JSON数据格式,JSON通常用于...

    webservice学习二之(1)axis2服务器端方式开发总结(附件含有项目)

    【标题】:Web服务接口(WebService)学习二之(1)——Axis2服务器端开发总结 在本文中,我们将深入探讨使用Apache Axis2框架进行Web服务(WebService)服务器端开发的相关知识点。Apache Axis2是Java平台上一个高效...

    Axis2 WebService 开发指南

    为了能够顺利地进行Axis2 WebService的开发工作,首先需要完成必要的软件环境搭建。 - **下载Axis2相关jar包**:访问[Axis官方网站](http://axis.apache.org/axis2/java/core/download.cgi),获取最新版本的依赖包...

    Axis2集成SSH搭建WebService支持事务(图文详解含核心代码)

    总结,通过以上步骤,你可以成功地在SSH框架的基础上构建一个支持事务的Axis2 WebService,同时享受到SSH的灵活性和Axis2的强大功能。记得在实际项目中根据需求调整配置,确保系统的稳定性和安全性。

    Axis教程

    了解Axis2的源码可以帮助开发者更好地理解其工作原理和优化服务。主要关注的组件包括: - `MessageReceiver`:处理来自客户端的消息。 - `Module`:提供服务增强功能,如安全、事务等。 - `TransportSender` 和 `...

    apache axis1.4实例

    总结,Apache Axis1.4虽已过时,但在某些特定场景下,它的稳定性和灵活性依然具有很高的价值。理解并掌握如何使用Apache Axis1.4,对于开发者来说,仍然是提升技能树的重要一环。通过实践,你可以更好地理解Web服务...

    axis2_WebService_开发指南

    ### Axis2 WebService 开发指南知识点详述 #### 背景与介绍 Axis2作为Apache组织下的一个开源项目,提供了强大的Web Service框架,支持SOAP和REST等多种协议,旨在简化Web服务的创建、部署和调用。相比于其前身...

    axis2_WebService_开发指南.docx

    总结,Apache Axis2为Web服务开发提供了全面的工具集和灵活的架构,无论是在简单还是复杂的场景下,都能有效地支持Web服务的开发、部署和管理。通过深入学习和实践,开发者可以充分利用Axis2的强大功能,构建高效、...

    axis jar包下载

    在开发过程中,理解AXIS的工作原理,熟悉其API,以及如何使用WSDL来定义和调用Web服务是非常重要的。AXIS也提供了命令行工具,如wsdl2java,用于从WSDL生成Java客户端代码,以及java2wsdl,用于从Java类生成WSDL文件...

    axis1 webservice案例

    总结来说,"axis1 webservice案例"提供了一个学习和实践Web服务开发的实例,涵盖了服务端的部署和服务接口的创建,以及客户端的调用过程。理解并掌握这个案例,对于深入理解Web服务工作原理,以及在实际项目中使用...

    axis的eclilpse插件

    总结起来,"Axis的Eclipse插件"是一个强大的工具,它为Java开发者提供了一站式的Web服务开发解决方案,从代码生成到部署,再到测试和调试,都可在Eclipse这个熟悉的环境中完成,极大地提升了开发效率和代码质量。

    axis-src-1_3.zip_axis_axis-src-1_3_axis1 1.3 src_axis源码

    Axis 可以很好地与其他 Java EE 技术集成,例如,它可以与 JBoss、Tomcat 等应用服务器配合使用,也可以与 Spring 框架结合,实现服务的依赖注入和事务管理。 五、总结 通过对 Axis 1.3 的源码研究,我们可以深入...

    springMVC_Mybatis_Axis2_Task java Project

    总结来说,这个项目是一个综合性的Java Web应用,利用Spring MVC处理Web请求,MyBatis处理数据库操作,Axis2提供Web服务,而Task框架则负责后台的任务调度。整个项目通过Maven进行统一管理和构建,体现了现代Java...

    Axis1 创建Webservice 服务端

    总结起来,创建Axis1 Web服务服务端涉及到的主要知识点包括Web服务的基础理论、Axis1框架的使用、Java类与Web服务的关联、Stub类的生成、服务的配置与部署,以及服务的测试和调用。理解并掌握这些步骤,开发者可以...

    AXIS开发的基于JAVA的webservice及客户端

    AXIS是Apache软件基金会开发的一个开源工具,它主要用于创建、部署和使用Web服务。基于Java的AXIS使得开发者...参考文献中可能包含更多关于AXIS使用的实例和详细教程,对于理解AXIS的工作原理和实践应用会大有裨益。

Global site tag (gtag.js) - Google Analytics