列宿乃施于上荣兮 日月才经于柍桭

………… 白驹过隙 岁月如斯 梦萦回绕 心灵之声
posts - 57, comments - 8, trackbacks - 0, articles - 41
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

基于Axis 1.X的Web Service开发(二)

Posted on 2007-04-03 11:35 默认为零 阅读(223) 评论(0)  编辑  收藏 所属分类: 技术

  Handler的基本概念
  J2EE web service中的Handler技术特点非常像Servlet技术中的Filter。我们知道,在Servlet中,当一个HTTP到达服务端时,往往要经过多个Filter对请求进行过滤,然后才到达提供服务的Servlet,这些Filter的功能往往是对请求进行统一编码,对用户进行认证,把用户的访问写入系统日志等。相应的,Web服务中的Handler通常也对soap请求和响应包灵活操作,功能非常强大。

  使用Axis SOAP Monitor
  SOAP Monitor可以监测Axis soap包的内容,它是Axis内置的Handler,不过它默认并没有发布,我们在需要用到的时候可以发布之。
  1、到目录%TOMCAT_HOME%\webapps\axis下,你会找到SOAPMonitorApplet.java,在命令行中编译它:
             javac -classpath %AXIS_HOME%\lib\axis.jar SOAPMonitorApplet.java
  编译完之后你会看见目录下多了很多CLASS文件,它们的名字是SOAPMonitorApplet*.class

  2、在目录%TOMCAT_HOME%\webapps\axis\WEB-INF下打开server-config.wsdd文件,将下面的两部分代码直接加入其中相应的位置
  第一部分:

    <handler name="soapmonitor"   type="java:org.apache.axis.handlers.SOAPMonitorHandler">
        
<parameter name="wsdlURL"   value="/axis/SOAPMonitorService-impl.wsdl"/>
        
<parameter name="namespace"   value="http://tempuri.org/wsdl/2001/12/SOAPMonitorService-impl.wsdl"/>
        
<parameter name="serviceName" value="SOAPMonitorService"/>
        
<parameter name="portName" value="Demo"/>
    
</handler>

  第二部分:

    <service name="SOAPMonitorService" provider="java:RPC">
        
<parameter name="allowedMethods" value="publishMessage"/>
        
<parameter name="className"   value="org.apache.axis.monitor.SOAPMonitorService"/>
        
<parameter name="scope" value="Application"/>
    
</service>


  3、选择你要监控的服务
  以上次的Hello服务为例,在server-config.wsdd中你会找到这段代码:

    <service name="Hello" provider="java:RPC">
        
<parameter name="allowedMethods" value="sayHello"/>
        
<parameter name="className" value="HelloWorld"/>
    
</service>

  在这段代码中加入以下的代码:

    <requestFlow>
        
<handler type="soapmonitor"/>
    
</requestFlow>
    
<responseFlow>
        
<handler type="soapmonitor"/>
    
</responseFlow>


  最后的样子是:

    <service name="HelloWorld" provider="java:RPC">
        
<requestFlow>
            
<handler type="soapmonitor"/>
        
</requestFlow>
        
<responseFlow>
            
<handler type="soapmonitor"/>
        
</responseFlow>
        
<parameter name="allowedMethods" value="sayHello"/>
        
<parameter name="className" value="HelloWorld"/>
    
</service>

  这样Hello服务就被SOAP Monitor监控了。
      
  同样,可以通过depoly-monitor.wsdd的方式发布monitor:

    <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
        
<handler name="soapmonitor" type="java:org.apache.axis.handlers.SOAPMonitorHandler">
            
<parameter name="wsdlURL" value="/axis/SOAPMonitorService-impl.wsdl"/>
                
<parameter name="namespace" value="http://tempuri.org/wsdl/2001/12/SOAPMonitorService-impl.wsdl"/>
            
<parameter name="serviceName" value="SOAPMonitorService"/>
            
<parameter name="portName" value="Demo"/>
        
</handler>

        
<service name="SOAPMonitorService" provider="java:RPC">
            
<parameter name="allowedMethods" value="publishMessage"/>
            
<parameter name="className" value="org.apache.axis.monitor.SOAPMonitorService"/>
            
<parameter name="scope" value="Application"/>
        
</service>
    
</deployment>

  启动服务,在DOS下切换目录到%TOMCAT_HOME%\webapps\axis\WEB-INF\目录下,执行下:
       java -cp %AXISCLASSPATH% org.apache.axis.client.AdminClient deploy-monitor.wsdd
  然后,在需要监测的web service里面加上<handler type="soapmonitor"/>就可以了。
  不过需要注意的是,服务通过JWS方式调用的话SOAP Monitor没有监控效果。
  同样的道理,为自己的需求实现的Handler都可以通过这样的方式发布在对应的Web服务中。网上有很多关于诸如日志、数字签名、加密之类的Handler功能,可以找来看看。


只有注册用户登录后才能发表评论。


网站导航: