初学webservices二

前面我介绍了我使用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

上面附带了工程,还是使用的原来的工程。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值