<!-- /* Font Definitions */ @font-face {font-family:宋体; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimSun; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 680460288 22 0 262145 0;} @font-face {font-family:"/@宋体"; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 680460288 22 0 262145 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; font-size:10.5pt; mso-bidi-font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:宋体; mso-font-kerning:1.0pt;} a:link, span.MsoHyperlink {color:blue; text-decoration:underline; text-underline:single;} a:visited, span.MsoHyperlinkFollowed {color:purple; text-decoration:underline; text-underline:single;} /* Page Definitions */ @page {mso-page-border-surround-header:no; mso-page-border-surround-footer:no;} @page Section1 {size:595.3pt 841.9pt; margin:72.0pt 90.0pt 72.0pt 90.0pt; mso-header-margin:42.55pt; mso-footer-margin:49.6pt; mso-paper-source:0; layout-grid:15.6pt;} div.Section1 {page:Section1;} /* List Definitions */ @list l0 {mso-list-id:1099569772; mso-list-type:hybrid; mso-list-template-ids:2017498380 -427549864 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;} @list l0:level1 {mso-level-start-at:2; mso-level-number-format:japanese-counting; mso-level-text:%1、; mso-level-tab-stop:54.0pt; mso-level-number-position:left; margin-left:54.0pt; text-indent:-36.0pt;} ol {margin-bottom:0cm;} ul {margin-bottom:0cm;} -->
理论知识看相关资料,在此就不复述,直接进入XFire 开发实践。
一、下载 Xfire ,目前已更新为 CXF ,例子程序用的是 XFire1.2.6
二、 添加 xfire-all-1.2.6.jar 及其依赖包到类路径,依赖包在 lib 文件夹中
三、 开发 webservice 服务端 HelloWorldService
1 、服务接口:
package hellows;
//Generated by MyEclipse
public interface IHelloWorld {
public String example(String message);
}
2 、服务实现类
package hellows;
//Generated by MyEclipse
public class HelloWorldImpl implements IHelloWorld {
public String example(String message) {
System. out .println( this );
return " 你好 , 这是我的第一个 Web Service, 你输入的消息是 :" +
message;
}
}
3 、 Service.xml
<? xml version = "1.0" encoding = "UTF-8" ?>
< beans xmlns = "http://xfire.codehaus.org/config/1.0" >
< service >
< name > HelloWorld </ name >
< serviceClass > hellows.IHelloWorld </ serviceClass >
< implementationClass > hellows.HelloWorldImpl </ implementationClass >
< style > wrapped </ style >
< use > literal </ use >
< scope > application </ scope >
</ service ></ beans >
4 、 Web.xml
<? xml version = "1.0" encoding = "UTF-8" ?>
< web-app xmlns = "http://java.sun.com/xml/ns/javaee" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" version = "2.5" xsi:schemaLocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" >
< 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 > /services/* </ url-pattern >
</ servlet-mapping >
< welcome-file-list >
< welcome-file > index.jsp </ welcome-file >
</ welcome-file-list >
</ web-app >
部署到web 容器,如tomcat, 启动web 容器,在浏览器中输入 http://localhost:8080/HelloWorldService/services/HelloWorld ? wsd l 即可看到相应的wsdl 文件,其中8080 为web 容器访问接口。
四、开发 webservice 客户端 HelloWorldClient ,使用服务
使用 webService 服务有几种方式,分别实现如下:
1 、
import java.net.MalformedURLException;
import javax.wsdl.Service;
import org.codehaus.xfire.XFireFactory;
import org.codehaus.xfire.client.XFireProxyFactory;
import org.codehaus.xfire.service.binding.ObjectServiceFactory;
public class POJOClient {
public static void main(String[] args) {
org.codehaus.xfire.service.Service srvcModel = new ObjectServiceFactory().create(IHelloWorld.class);
XFireProxyFactory factory = new XFireProxyFactory(
XFireFactory.newInstance().getXFire());
String IHelloWorldWorldURL = "http://localhost:8080/HelloWorldService/services/HelloWorld";
IHelloWorld srvc;
try {
srvc = ( IHelloWorld) factory.create(srvcModel,
IHelloWorldWorldURL);
System.out.println(srvc.example("Robin"));
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
此方式需要知道服务接口,因此,为了使用服务必须在客户端创建IHelloWorld 接口
public interface IHelloWorld {
public String example(String message);
}
2 、
import java.net.MalformedURLException;
import java.net.URL;
import org.codehaus.xfire.client.Client;
public class HelloWorldClient {
public static void main(String[] args) throws MalformedURLException, Exception {
Client client = new Client(new
URL("http://localhost:8080/HelloWorldService/services/HelloWorld?wsdl"));
Object[] results = client.invoke("example", new Object[] {"Juliet"});
System.out.println((String) results[0]);
}
}
3 、根据wsdl 文件生成相应的代码,再使用,可以采用MyEclipse 帮我们自动生成,具体操作参见相关资料。
生成完成之后,我们就可以像使用本地类一样使用webservice 服务
package hellows;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
HelloWorldClient hw = new HelloWorldClient();
HelloWorldPortType hwp = hw.getHelloWorldHttpPort();
System. out .println(hwp.example( " 游传聪 " ));
}
}
五、 JDK1.6 自带 webservice 实现
Server:
服务类
package server;
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
// 定义 Web 服务类和方法
@WebService(targetNamespace = "http://jdk.study.hermit.org/client")
@SOAPBinding(style = SOAPBinding.Style.RPC)
public class Hello {
@WebMethod
public String sayHello(String name) {
return "hello:" + name;
}
}
启动服务
package server;
import javax.xml.ws.Endpoint;
public class StartService {
public static void main(String[] args) {
Endpoint.publish ( "http://localhost:8081/HelloService" , new Hello());
}
}
使用服务
package client;
import java.net.MalformedURLException;
import java.net.URL;
import org.codehaus.xfire.XFireFactory;
import org.codehaus.xfire.client.Client;
import org.codehaus.xfire.client.XFireProxyFactory;
import org.codehaus.xfire.service.binding.ObjectServiceFactory;
public class HelloClient {
public static void main(String[] args) throws MalformedURLException, Exception {
Client client = new Client(new
URL("http://localhost:8081/HelloService/HelloService?wsdl"));
Object[] results = client.invoke("sayHello", new Object[] {" 游传聪 "});
System.out.println((String) results[0]);
}
}
运行启动服务的程序StartService ,即可发布服务,不需要其他web 容器的支持,实际上自带有jetty 服务器,发布服务要确保端口没被占用。(相关资源可以在我的资源中找到)