xfire 开发基础篇 一
最近做的一个项目,因要用的webservice,因看了一下这方面的东西,以前只是听说,从未用过,目前较流行的webservice 第三方有:xfire和axis,而axis是Apache下的项目,这里我主要说的是xfire:
基于xfire的webservice开发主要由以下几步:
1.定义web接口;
2.实现web接口;
3.描述wsdl,即web服务,
4.发布webservice
5.客户端调用;
下面给出一个例子,来分析各步:
准备工作,新建一个web工程,这里我定义为:xfiretest,定义包:com.test
1)定义web接口:com.test.ITestService
public interface ITestService { public void say(); }
2)实现web接口:com.test.TestService
public class TestService implements ITestService { public void say() { // TODO Auto-generated method stub System.out.println("web service调用成功!!!"); } }
3)描述wsdl,即web服务:
先要工程的src下新建文件夹:META-INF/xfire,然后新建文件,名为service.xml(必须为此名)
<?xml version="1.0" encoding="UTF-8"?> <beans> <service xmlns="http://xfire.codehaus.org/config/1.0"> <name>Test</name><!-- web service调用的服务名,如:http://localhost:8080/xfiretest/services/Test --> <serviceClass>com.test.ITestService</serviceClass><!-- web service接口 --> <implementationClass>com.test.TestService</implementationClass><!-- web service的实现 --> <style>wrapped</style> <use>literal</use> <scope>application</scope> </service> </beans>
注意:这里节点名为"beans",你可能想到了spring的bean,不错,在《XFire开发指南》一书中指出,xfire用XBean语法来处理这个service.xml文件,而XBean允许用户将自定义语法与spring语法混在一起,由此我们开以看以xfire也需spring的支持,因些在稍后我给出的jar包中有spring的jar。
service.xml文件放在该目前下,就可以编译到classes下。
到这里还有重要的一步,就要要在web工程里提供对web service的支持,在web.xml文件里添加一个XfireServlet
在web.xml添加如下代码:
<servlet> <servlet-name>XFireServlet</servlet-name> <servlet-class> org.codehaus.xfire.transport.http.XFireConfigurableServlet </servlet-class> <load-on-startup>0</load-on-startup> </servlet> <servlet-mapping> <servlet-name>XFireServlet</servlet-name> <url-pattern>/servlet/XFireServlet/*</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>XFireServlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping>
4)发布web service
启动web 服务器,我这里用的是Tomcat,当然你可以选择自己较熟悉的服务器
然后在浏览器里输入 :http://localhost:8080/xfiretest/services/Test?wsdl
就可以看到你所发布的web service 信息,"services/Test?wsdl "就是你在service.xml中定的web service名子
如果你能看到如下信息:
<wsdl:definitions targetNamespace="http://test.com"> <wsdl:types> <xsd:schema attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://test.com"> <xsd:element name="say"> <xsd:complexType /> </xsd:element> <xsd:element name="sayResponse"> <xsd:complexType /> </xsd:element> </xsd:schema> </wsdl:types> <wsdl:message name="sayRequest"> <wsdl:part name="parameters" element="tns:say"></wsdl:part> </wsdl:message> <wsdl:message name="sayResponse"> <wsdl:part name="parameters" element="tns:sayResponse"> </wsdl:part> </wsdl:message> <wsdl:portType name="TestPortType"> <wsdl:operation name="say"> <wsdl:input name="sayRequest" message="tns:sayRequest"> </wsdl:input> <wsdl:output name="sayResponse" message="tns:sayResponse"> </wsdl:output> </wsdl:operation> </wsdl:portType> <wsdl:binding name="TestHttpBinding" type="tns:TestPortType"> <wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" /> <wsdl:operation name="say"> <wsdlsoap:operation soapAction="" /> <wsdl:input name="sayRequest"> <wsdlsoap:body use="literal" /> </wsdl:input> <wsdl:output name="sayResponse"> <wsdlsoap:body use="literal" /> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:service name="Test"> <wsdl:port name="TestHttpPort" binding="tns:TestHttpBinding"> <wsdlsoap:address location="http://localhost:8080/xfiretest/services/Test" /> </wsdl:port> </wsdl:service> </wsdl:definitions>
表明你的web service已成功发布。
5)客户端调用
你可以重新新建一个java工程,把(1)中的ITestService接口复制到你的工程中,包括包名。然后新建类WebTest含main方法
如下:
Service srvcModel = new ObjectServiceFactory() .create(ITestService.class); XFireProxyFactory factory = new XFireProxyFactory(XFireFactory .newInstance().getXFire()); String helloWorldURL = "http://192.168.2.99:8080/xfiretest/services/Test"; try { ITestService srvc = (ITestService) factory.create( srvcModel, helloWorldURL); srvc.say(); } catch (MalformedURLException e) { e.printStackTrace(); } }
运行,你如看到如下信息:web service调用成功!!!
小弟初写,用词不当,还望指教。
下面有附件可供下载。