欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

xfire 开发基础篇 一

程序员文章站 2022-03-08 13:23:03
...

      最近做的一个项目,因要用的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调用成功!!!

 

小弟初写,用词不当,还望指教。

下面有附件可供下载。