我的漫漫程序之旅

专注于JavaWeb开发
随笔 - 39, 文章 - 310, 评论 - 411, 引用 - 0
数据加载中……

MyEclipse开发WebServices(基于Annotations)

XFire支持JSR 181标注方式的Web服务开发,另外,所有支持Java EE 5的应用服务器(Tomcat只是Web层的,本身不支持EJBWeb服务开发),都支持这种开发方式,例如:JBossGlassFishWebLogic10等等,本节就简要讨论使用XFire开发标注式Web服务和用JBoss开发的过程。

15.4.1 XFire的标注服务开发

       XFire支持JRS181方式的标注服务开发,这样开发的时候只需要编写一个普通的Java类,然后加上标注信息后,加入services.xml中即可。我们仍然在第2节所开发的HelloWorldService项目中进行修改。下面是创建的Web服务类echo.Jsr181EchoService

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.openuri.org/2004/04/HelloWorld")

        publicclass Jsr181EchoService

{

    @WebMethod(operationName = "echoString", action = "urn:EchoString")

    @WebResult(name = "echoResult")

    publicString echo(@WebParam(name = "echoParam", header = true) String input)

    {

        return input;

    }

}

这个代码中有很多标注,绝大部分都可以在最后生成的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,而不是类中的方法名echoaction则定义了操作的类型。一个类里面可以定义多个@WebMethod

@WebResult(可选)标注定义了返回值(SOAP Response Envolope)中的name(名字)echoResult

@WebParam(可选)则定义了哪些参数可以作为Web服务中的远程可见的参数被调用,name设置了其属性。

乍看之下,这个Web服务中所用的标注有点多,实际上,这些标注可以不加任何属性,例如只写下@WebService@WebMethod即可,甚至于整个类只需要一个@WebService标注即可,此时代码如下所示:

package echo;

import javax.jws.WebService;

@WebService

publicclass 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.un.gov/HelloEcho</namespace>

       -->

       <serviceClass>echo.Jsr181EchoService</serviceClass>

       <serviceFactory>

           org.codehaus.xfire.annotations.AnnotationServiceFactory

       </serviceFactory>

    </service>

,此配置相当的简单,需要注意的是serviceClass就是我们写有Web服务标注的Java类,而serviceFactory则必须是AnnotationServiceFactory(标注服务工厂),否则此Web服务将无法正常发布。

好了,现在按照15.2.4一节的内容发布项目并运行后,即可在浏览器中键入下面地址进行测试了:

http://localhost:8080/HelloWorldService/services/EchoServiceTest?wsdl

EchoServiceTest的名字是因为在类中标注了@WebServiceserviceName属性。之后就可以在Web Service Explorer中对它进行测试,或者是生成客户端代码。

从这里看到这种开发方式相对也简单的多,而且您将在下一节看到如果是Java EE 5的容器,开发过程将更加的简单,而且不需要XFire类库及其配置文件。



posted on 2008-04-23 15:02 々上善若水々 阅读(2518) 评论(0)  编辑  收藏 所属分类: WebService


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


网站导航: