加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

XFire的标注服务开发

发布时间:2020-12-17 02:37:46 所属栏目:安全 来源:网络整理
导读:?package echo; import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebResult; import javax.jws.WebService; @WebService(name = "EchoService",serviceName = "EchoServiceTest",targetNamespace = "http://www.cnpeng.org/HelloW

?package echo;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;

@WebService(name = "EchoService",serviceName = "EchoServiceTest",targetNamespace = "http://www.cnpeng.org/HelloWorld")
public class Jsr181EchoService {
?@WebMethod(operationName = "echoString",action = "urn:EchoString")
?@WebResult(name = "echoResult")
?public String echo(@WebParam(name = "echoParama",header = true)
?String inputa,@WebParam(name = "echoParamb",header = true)
?String inputb) {
??return inputa + inputb;
?}
}

?

?

这个代码中有很多标注,绝大部分都可以在最后生成的 WSDL 文档中找到对应值。
@WebService 这个标注放置在 Java 类之前,注明这个类的部分方法可以被发布为Web 服务(还记得上一章提到的标注嘛?这个标注最终被 XFire 读取后进行分析后会进一步处理成 Web 服务) 。它的属性用于设置? Web 服务被发布时的配置信息,常用的属性包括:?
name(可选) :Web 服务的名字,WSDL 中 wsdl:portType元素的 name属性和它保持一致,默认是 Java类或者接口的名字,也可以进行自定义,例如本例中的 EchoService。??

serviceName(可选) :Web 服务的服务名,WSDL 中 wsdl:service元素的 name 属性和它保持一致,默认是 Java类的名字(Jsr181EchoService) ,不过如果设置了 name 属性,则名字改为 name 属性的取值。
targetNamespace(可选) : WSDL 文件所使用的 namespace,该 Web 服务中所产生的其他 XML文档同样采用这个作为 namespace,一般取值为 Web 服务所在网站的名字,不过看起来任意取值并无出错之处。?
@WebMethod(可选) 标注放在需要发布成 Web 服务的方法之前,有一些属性可以设置。例如 openrationName指明了 SOAP 调用时所看到的方法名为 echoString,而不是类中的方法名 echo,action 则定义了操作的类型。一个类里面可以定义多个
@WebMethod。
@WebResult(可选)标注定义了返回值(SOAP Response Envolope)中的 name(名字)为 echoResult。
@WebParam(可选)则定义了哪些参数可以作为 Web 服务中的远程可见的参数被调用,name设置了其属性。
乍看之下,这个 Web 服务中所用的标注有点多,实际上,这些标注可以不加任何属性,例如只写下@WebService,@WebMethod 即可,甚至于整个类只需要一个@WebService标注即可,此时代码如下所示:


package echo;
?
import javax.jws.WebService;
?
@WebService
public class Jsr181EchoService {
? public String echo(
? String input) {
?? return input;
?}

}

。此时最后所生成的 Web 服务中,所有的操作名,方法名和参数名都和此通 Java 类中的
名称一致。在这种情况下,该 Web 服务的访问地址应为:
http://localhost:8080/HelloWorldService/services/Jsr181EchoService?wsdl 。
? 最后一步,乃是在 XFire中配置并发布此服务了,在 services.xml 中加入的 Web 服务
配置格式如下:
? <service>
?? <!-- 如果配置文件中配置了额外的name属性,那么最终的Web Service 名字将会
以此处为准,即:
?? ServiceName?wsdl;同样的namespace的取值也会覆盖Java类中的标注的
值。
?? <name>ServiceName</name>
?? <namespace>http://www.cnpeng.org/HelloEcho</namespace>
? -->
?? <serviceClass>echo.Jsr181EchoService</serviceClass>
?? <serviceFactory>
?? org.codehaus.xfire.annotations.AnnotationServiceFactory
?? </serviceFactory>
? </service>
,此配置相当的简单,需要注意的是 serviceClass 就是我们写有 Web 服务标注的 Java类,而 serviceFactory 则必须是 AnnotationServiceFactory(标注服务工厂) ,否则此 Web 服务将无法正常发布。
进行测试了:
http://localhost:8080/HelloWorldService/services/EchoServiceTest?wsdl 。 EchoServiceTest 的名字是因为在类中标注了@WebService 的 serviceName 属性。之后就可以在 Web Service Explorer 中对它进行测试,或者是生成客户端代码。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读