1.首先建立一个web service工程:
?????
点击finish之后,myeclipse自动帮你生成services.xml以及web应用目录结构,其中的services.xml是你导出服务的配置文件,注意在WEB-INF/web.xml文件中配置了xfire自己的servlet.
<
servlet
>
???? servlet-name XFireServlet </ servlet-class org.codehaus.xfire.transport.http.XFireConfigurableServlet load-on-startup 0
?? servlet-mapping url-pattern /services/* >
???? servlet-name XFireServlet </ servlet-class org.codehaus.xfire.transport.http.XFireConfigurableServlet load-on-startup 0
?? servlet-mapping url-pattern /services/* >
2.接下来,现在编写要导出的pojo类,首先是接口:
package
?net.rubyeye.webservicedemo;
// Generated?by?MyEclipse
public ? interface ?IHelloWorldService?{
????
???? ?String?sayHello(String?name);
????
}
// Generated?by?MyEclipse
public ? interface ?IHelloWorldService?{
????
???? ?String?sayHello(String?name);
????
}
这个接口我们只提供一个方法:sayHello(),我们没有采用JSR181标注式的声明方式,还是采用xml配置文件。然后是实现类:
class
?HelloWorldServiceImpl?
implements
?String?sayHello(String?name){
???????? return " hello, + name;
????}
????
????
}
???????? return " hello, + name;
????}
????
????
}
最后,配置下services.xml文件:
service
???????? name HelloWorldService serviceClass
????????????net.rubyeye.webservicedemo.IHelloWorldService
???????? implementationClass
????????????net.rubyeye.webservicedemo.HelloWorldServiceImpl
???????? style wrapped use literal scope application >
???????? name HelloWorldService serviceClass
????????????net.rubyeye.webservicedemo.IHelloWorldService
???????? implementationClass
????????????net.rubyeye.webservicedemo.HelloWorldServiceImpl
???????? style wrapped use literal scope application >
我们的web服务名称叫做 HelloWorldService,接口是 IHelloWorldService,实现类是 HelloWorldServiceImpl。注意,其实我们这三个步骤可以一步完成,只要直接使用myeclipse的new web service向导即可
3.然后将此工程部署到tomcat上,通过http://localhost:8081/HelloWorld/services/HelloWorldService?wsdl可以看到生成的wsdl文件。注意,在部署之后,services会被拷贝到WEB-INF/classes/META-INF/xfire目录下,xfire会自动搜索此目录并加载配置文件。我们可以编写一个client来测试web服务,你也可以点击myeclipse上的Launch the Web Services来测试web服务
4.编写client代码:
import
?java.net.MalformedURLException;
?java.util.ArrayList;
?java.util.List;
?org.codehaus.xfire.XFireFactory;
?org.codehaus.xfire.client.XFireProxyFactory;
?org.codehaus.xfire.service.Service;
?org.codehaus.xfire.service.binding.ObjectServiceFactory;
?HelloWorldClient?{
???? static void ?main(String?args[])?{
????????Service?srvcModel? = new ?ObjectServiceFactory()
????????????????.create(IHelloWorldService. );
????????XFireProxyFactory?factory? ?XFireProxyFactory(XFireFactory
????????????????.newInstance().getXFire());
????????
????????String?helloWorldURL? http://localhost:8081/HelloWorld/services/HelloWorldService ;
???????? try ?{
????????????IHelloWorldService?srvc? ?(IHelloWorldService)?factory.create(
????????????????????srvcModel,?helloWorldURL);
????????????System.out.print(srvc.sayHello( dennis ));
????????}? catch ?(MalformedURLException?e)?{
????????????e.printStackTrace();
????????}
????}
}
?java.util.ArrayList;
?java.util.List;
?org.codehaus.xfire.XFireFactory;
?org.codehaus.xfire.client.XFireProxyFactory;
?org.codehaus.xfire.service.Service;
?org.codehaus.xfire.service.binding.ObjectServiceFactory;
?HelloWorldClient?{
???? static void ?main(String?args[])?{
????????Service?srvcModel? = new ?ObjectServiceFactory()
????????????????.create(IHelloWorldService. );
????????XFireProxyFactory?factory? ?XFireProxyFactory(XFireFactory
????????????????.newInstance().getXFire());
????????
????????String?helloWorldURL? http://localhost:8081/HelloWorld/services/HelloWorldService ;
???????? try ?{
????????????IHelloWorldService?srvc? ?(IHelloWorldService)?factory.create(
????????????????????srvcModel,?helloWorldURL);
????????????System.out.print(srvc.sayHello( dennis ));
????????}? catch ?(MalformedURLException?e)?{
????????????e.printStackTrace();
????????}
????}
}
执行,打印:hello,dennis
注意,你也可以使用MyEclipse的new webservice client向导自动生成client,同时生成供客户端调用的stub类等。