和小白一起探讨,觉得如果xfire用jsr181去驱动,一定会非常简洁。
从jsr175发展过来的jsr181,早期实现于weblogic workshop 7.1,我们
对@webservice, @webmethod这些标记的最初理解是将java类通过annotation
直接编译成weblogic的jws,bea作为jsr181标准的leader,很大胆地将
jsr181用于weblogic 9.1,去驱动weblogic下一代的webservice框架。
springside团队开始选用xfire作为ss 1.0的时候,已经充分考虑xfire在jsr181
支持上的优势(对比于axis)。
作为spring web services的一个最佳实践,我们已经开始考虑基于jsr181驱动的
web service框架,我们一致认为jsr181能够为架构解耦提供非常切实有效的
途径。
在下一个ss2.0版本中,我们考虑提供以下的demo:
1,基于security的jsr181 demo
2,基于conversation的jsr181 demo
3,基于transaction的jsr181 demo
4,基于context的jsr181 demo
另外,在框架考虑上,会使用jsr标记handlers的方式(配置文件也是可以,但放在
annotation,带来的是更好的易读性)
package
examples.webservices.handlers;
@webservice ()
@soapmessagehandlers ( {
@soapmessagehandler (
classname
=
"
examples.webservices.soap_handlers.simple.serverhandler1
"
),
@soapmessagehandler (
classname
=
"
examples.webservices.soap_handlers.simple.serverhandler2
"
)
} )
public
class
handlersimpl {
//
your code
}
另外,在ss2.0的下一个版本中,提供soapbinding,可以设置其style为document或者rpc,encode和literal也是能够定制的(跟workshop一样方便),也是一件简单的事情:
@webservice
@soapbinding(style=soapbinding.style.document,
use=soapbinding.use.literal,
parameterstyle=soapbinding.parameterstyle.bare)
public class echoservice {
@webmethod(action="echo")
@webresult(targetnamespace=“http://www.springside.org.cn”, name="echoresult")
public string echo(
@webparam(targetnamespace=“http://www.springside.org.cn”, name="echomsg") string msg){
return msg;
}
} 同时,考虑很多人喜欢搞作soap header,利用它来做一些业务标记处理,我们会支持下面的方式
@webmethod
public string echo(
@webparam(name="myheader",
header=true,
mode=webparam.mode.inout) stringholder header,
string msg){
string ret = header.value ", " msg;
header.value = "got it";
return ret;
}
来自:
[
http://www.blogjava.net/security/archive/2006/10/31/spring_jsr181_xfire_webservice.html]