`

初学webservices二

    博客分类:
  • ws
阅读更多
  前面我介绍了我使用webServices的一个过程,接下来更多了解一下。
  
  WSDL:web service Description Language, 基于xml的web服务描述语言,就是将自己所要发布的服务描述出来,如功能,参数,路径等。这是一套标准的方法,外界可以根据它,清楚的指导它所提供的服务。
  SOAP:simple object access protocol,简单对象访问协议,一种标准化得传输消息的xml消息格式,通过此协议来调用web服务。
  UDDI:Universal Description,Discovery and Integration,通用描述,发现和集成服务,简单的来说就是一个服务的公共网址,大家把web服务在这里注册发布,给外界的人查找并使用。这个可有可无,直接把wsdl发给需要的人就可以了。

  有时大家觉得wsdl文件难得写,不如直接生成。
  1,编写你要发布的服务,如我前面提到的功能类。
  2,生成wsdl文件
  3,编写deploy.wsdd文件
  4,发布服务,生成server-config文件
  5,和前面一样

  第一步:这里就把功能类作为了服务给发布出去了。前面是使用到的自动生成的服务框架代码。这里也不用担心你经常改变方法类容导致wsdl文件变化,wsdl只是提供一个服务接口,所以你也只要把方法名,参数定义好就可以了,这些不变,你的wsdl内容也不变
  第二步:
 
java org.apache.axis.wsdl.Java2WSDL -o hello.wsdl -l http://localhost:8080/axis/services/HelloServicePortType -n HelloServicePortType com.localFunction.LocalFunction.HelloHelp  

  后面步骤就和前面一样了,只是这里要自己去些deploy.wsdd

  我总觉的还是使用服务框架好,让功能类脱离出去,作为本地类,而不是发布服务。其实得到wsdl后,就可以按前面的步骤去做,这样就好了。

   在webservice应用过程中,还有一个需要自己编写,那就是handler类了。handler作用如同filter一样。

   Handler是接口,我们一般都是继承它的抽象类BasicHandler。
   如:
  
	public void invoke(MessageContext messagecontext) throws AxisFault {
	System.out.println("call hanlder");	
	}
   

Handler要起作用,必须在server-config里面配置。这里又二种配法,意思就和全局变量和局部变量。
   局部如:
	<service name="HelloServiceHttpPort" provider="java:RPC" style="document" use="literal">
         ...
         <requestFlow>
<handler name="a" type="java:com.webService.handler.TestHandler" />
</requestFlow>
         </service>

局部就是把handler配置在你的service里面,其它service就不能引用你的handler,只能这个service用。
   全局如:
</globalConfiguration>
<handler name="a" type="java:com.webService.handler.TestHandler" />
<service name="HelloServiceHttpPort" provider="java:RPC" style="document" use="literal">
         ...
  <requestFlow>
<handler name="a" />
</requestFlow>
         </service>
  

全局就是配置在service外面,注意也不是在globalConfiguration里面。

handler如filter一样,可以处理请求前,请求后,requestFlow代表的就是请求前,responseFlow自然是请求后,具体看你在server-config里面怎么配置。axis的handler中的involve方法并没管你是请求前,请求后,具体看你是怎么配置。如果我想在一个handler里面既有请求前和请求后怎么做了?那就直接实现java自带jax-rpc的hanlder,可以看到handleRequest,handleResponse二个方法。但是你使用的axis发布的,它只支持axis的handler,所以你直接配置在server-config里面就会报错,所以需要引用到axis的AXRPCHandler,它会处理好

<requestFlow>
<handler  type="java:org.apache.axis.handlers.JAXRPCHandler">
				<parameter name="className" value="com.webService.handler.HelloHandler" />
			</handler>
		</requestFlow>

		<responseFlow>
			<handler  type="java:org.apache.axis.handlers.JAXRPCHandler">
				<parameter name="className" value="com.webService.handler.HelloHandler" />
			</handler>
		</responseFlow>


服务端通过server-config可以配置好handler,可是客户端没有配置文件,该怎么做?axis的Call中有call.setClientHandlers(reqHandler, respHandler);方法,可以很好的处理好客户端方面的handler操作。

说了这么多Handler有什么用了?参考别人的:
•对客户端进行认证、授权;
•把用户的访问写入系统日志;
•对请求的SOAP消息进行加密,解密;
•为Web Services对象做缓存。
这上面将的很详细http://www.ibm.com/developerworks/cn/webservices/ws-handler/index.html

  上面附带了工程,还是使用的原来的工程。

   
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics