WebService XFire 使用
一.??介绍 XFire是下一代的java?SOAP框架。XFire提供了非常方便的API,使用 这些API可以开发面向服务(SOA)的程序。 支持多个重要的Web Service标准,包括SOAP、WSDL、WS-I Basic Profile、WSAddressing 、WS-Security等 ? 高性能的SOAP栈 ? 可选的绑定(binding)方式,如POJO、XMLBeans,JAXB1.1、JAXB2.0、Castor和JiBX等 ? 支持JSR181 API ? 多种传输方式,如HTTP、JMS、XMPP、In-JVM等 ? 灵活的接口 ? 支持多个容器,如Spring、Pico、Plexus、Loom ? 支持JBI,参看servicemix项目(http://servicemix.org) ? 客户端和服务器代码生成 官方地址:http://xfire.codehaus.org/ 二.简单例子 A.发布web service 1.新建一个web?工程,加入xfire所依赖的lib,配置web.xml: <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" ????xmlns="http://java.sun.com/xml/ns/j2ee" ????xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ????xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee ????http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <servlet> <servlet-name>XFireServlet</servlet-name> <display-name>XFire Servlet</display-name> <servlet-class> org.codehaus.xfire.transport.http.XFireConfigurableServlet </servlet-class> </servlet> <servlet-mapping> <url-pattern>/servlet/XFireServlet/*</url-pattern> </servlet-mapping> <url-pattern>/services/*</url-pattern> </web-app> 在这个web.xml文件中定义了一个?XfireServlet,它负责提供Web Services,并提供每个Web Service的WSDL。通过网址http://<server_url[:port]>/<context>/services/XXXXService?WSDL得到这个Web Service的WSDL信息。 2.编写要发布的接口和实现,与普通的POJO没有任何区别。 package?cn.cares; ? public?interface?HelloService { ????public?String?hello(String name); } class?HelloServiceImpl?implements?HelloService { public?String hello(String name) { ???????//?TODO?Auto-generated method stub ???????return?"HI,"+name; ????} } 3.在源文件src目录下新建??META-INF/xfire/services.xml,编译发布时会复制到WEB-INF/classes/META-INF/xfire下. services.xml:?(写法有很多,要多研究下) <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://xfire.codehaus.org/config/1.0"> ??<service> ????<name>HelloService</name> <namespace>http://cn.cares/HelloService</namespace> <serviceClass>cn.cares.HelloService</serviceClass> <implementationClass>cn.cares.HelloServiceImpl</implementationClass> ??</service> </beans> 4.发布到web server?上,访问:?http://localhost:8080/web_project_name/services 就可看到所发布的web service,?后面的蓝色的链接,就会得到这个Web Service 的WSDL信息。 B?客户端访问 方法一: 1.如果web service发布成功了,就要看如何使用这web service 根据WSDL生成客户端代码,我们采用eclipse plugin?这样更简单,也可采用ant 具体xfire插件安装:?Help ->Software Updates->Find and Install->Search for new features to install->Create New Remote Site,并输入"XFire"?名字和http://dist.codehaus.org/xfire/update/eclipse?更新站点。 ? 2.File->new ->Other->XFire->Code generation from WSDL document 输入WSDL URL或PATH,以及要生成的客户端代码目录。 3.测试: import?cares.cn.helloservice.HelloServiceClient; import?cares.cn.helloservice.HelloServicePortType; class?Test { static?void?main(String[] args) { ???????HelloServiceClient client =?new?HelloServiceClient(); ???????HelloServicePortType helloService = client.getHelloServiceHttpPort(); //?????调用服务 ???????String result = helloService.hello("Tome"); ???????System.out.println("结果:"?+ result); 注意: 当运行时可能失败,是因为提示缺少jar包,因此,要将commons-codec-1.3.jar和commons-httpclient-3.0.jar只放到lib中并在工程中引用 如果输出:HI,Tome??说明客户端调用web service?成功。整个过程就完成了。 ? 方法二: 直接动态访问web service,测试代码如下: import?java.net.MalformedURLException; import?java.net.URL; import?org.codehaus.xfire.client.Client; class?Test2 { void?main(String[] args)?throws?MalformedURLException,Exception { ???????Client client =?new?Client( ??????????????new?URL( ?????????????????????"http://localhost:8080/ws/services/HelloService?wsdl")); ???????Object[] results = client.invoke("hello",?new?Object[] {?"Tome"?}); //invoke的第一个参数你要调用的方法,第二参数表示调用方法传递的参数 out.println((String) results[0]); ????} 目录结构: 转自:http://blog.csdn.net/pengchua/article/details/2712646 http://www.blogjava.net/fastzch/archive/2008/01/03/172535.html http://8366.iteye.com/blog/585358 http://blog.csdn.net/meteorlwj/article/details/4545100 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |