Web Servce能解决的问题:
? ? ??1、远程调用
? ? ??2、跨平台调用
? ? ??3、语言调用
?
Web Servce实际用途:
? ? ? 1、同意公司的新旧系统整合;
? ? ??2、不同公司的业务整合;
? ? ??3、内容聚合;
?
本次使用号称SOA框架的CXF(Xfire + Celtrix ← 具体请找度娘)来写一个Web Service的例子。
?
预备:
? ? ? 1、eclipse
? ? ? 2、apache-cxf-2.1.4(不要在意版本)
?
Web Service服务器端(PS:CXF内置一个Jetty Web服务器):
? ? ? 1、创建一个java projact(普通的java项目,由于这只是个例子文件夹结构名字什么的随意就好√),需要添加CXF的jar包↓
? ? ? ?
?
?
? ? ? 2、写一个web service接口,该接口要用@WebService修饰
class="java" name="code">package org.night; import javax.jws.WebService; @WebService public interface HelloWord { String sayHi(String name); }?
? ? ? 3、写一个该接口的实现类,同样需要@WebService修饰(serviceName是自定义的,并不是非要和实现类一样名)
package org.night.impl; import java.util.Date; import javax.jws.WebService; import org.night.HelloWord; @WebService(endpointInterface="org.night.HelloWord", serviceName="HelloWordImpl") public class HelloWordImpl implements HelloWord{ @Override public String sayHi(String name) { return name + " 你好" + " 时间:" + new Date(); } }?
? ? ? 4、发布,创建一个类,main调用Endpoint.publish(address, implementor),第一个参数是自己的应用地址
package org.night.N; import javax.xml.ws.Endpoint; import org.night.HelloWord; import org.night.impl.HelloWordImpl; public class ServiceMain { public static void main(String[] args) { HelloWord hw = new HelloWordImpl(); //调用Endpoint.publish()发布WebService Endpoint.publish("http://192.168.1.101/nightWebService", hw); System.out.println("Web Service Run"); } }
? ? ? 运行↓
? ? ??
? ? ??在浏览器上输入服务器端的绑定的地址+?+wsdl会出现↓↓↓↓↓↓↓↓↓↓↓↓
? ? ??
?
Web Service客户端:
? ? ? 1、新创建一个java projact
? ? ??
? ? ? 2、打开控制台找到客户端的src路径,调用CXF提供的wsdl2java工具(在根目录bin文件夹下面)↓如图
? ? ? ? ? ?
? ? ? ? ? ??
? ? ? 3、经过以上步骤,客户端会自动生成代码↓
? ? ? ? ? ?
? ? ? ? ?找到wsdl2java生成的Service接口的实现类,嘛~其实就是对应服务器实现业务借口的实现类,只是因为这里服务器端也是自己开发的,所以很容易知道~
? ? ? ? ?
?? ? ? ? ?
? ? ? 4、写一个类调用Service子类的实例的get**Port()(**为实现类名)方法,会返回远程Web Service的代理,则可调用服务器端的方法↓
? ? ??? ? ?
?