Webservice使用介绍:
http://blog.csdn.net/kardelpeng/article/details/6321019:
Web Services是由企业发布的完成其特定商务需求的在线应用服务,其他公司或应用软件能够通过Internet来访问并使用这项在线服务。
Web Service的关键技术和规则:
1.XML:描述数据的标准方法.
2.SOAP:表示信息交换的协议(简单对象访问协议).
3.WSDL:Web服务描述语言.
4.UDDI:通用描述、发现与集成,他是一种独立于平台,基于XML语言的用于在互联网上描述商务的协议。
?
一、利用JDK web服务api实现,这里使用基于SOAP message的Web Service:
1.首先创建一个Web Services项目,作为Web services Endpoint.
2.创建一个HelloService.Java类
- package?com.yjpeng.hello;??
- ??
- import?javax.jws.WebService;??
- import?javax.jws.WebMethod;??
- import?javax.xml.ws.Endpoint;??
- @WebService??
- public?class?HelloService?{??
- ??????
- ????@WebMethod??
- ????public?String?sayHello(String?message){??
- ????????return?"Hello?,"?+?message;??
- ????}??
- ??????
- static?void?main(String[]?args)?{??
- ??????????
- ????????HelloService?hello?=?new?HelloService();??
- ????????Endpoint?endPoint?=?Endpoint.publish("http://localhost:8080/helloService",?hello);??
- }??
3.使用apt编译HelloService.java(例如: apt -d bin(bin存放编译后的文件目录) scr/com/yjpeng/hello/HelloService.java)后,会生成jaxws目录。
4.使用java com.yjpeng.hello.HelloService执行HelloService.java文件,在浏览器中输入http://localhost:8080/helloService?wsdl出现如下图

5.使用wsimport命令生成客户端:wsimport -p com.yjpeng.webservice -keep?http://localhost:8080/helloService?wsdl?这时会在当前目录中生成如下文件:

6.编写好客户端文件HelloClient.java
copy
class?IHelloImpl?implements?IHello?{??
- public?String?sayHello(String?message)?{??
- return?message;??
- 4.修改Service.xml文件,加入以下代码
?<service>
?<!-- 为该Service起一个名字 -->
??<name>HelloService</name>
??<!-- service的接口类 -->
??<serviceClass>
??com.yjpeng.hello.IHello
??</serviceClass>
??<!-- service的接口实现类-->
??<implementationClass>
??com.yjpeng.hello.IHelloImpl
??</implementationClass>
??<!-- wsdl的样式-->
??<style>wrapped</style>
??<use>literal</use>
??<scope>application</scope>
?</service>
5.把该Web Service项目部署到tomcat里面启动tomcat在浏览器地址栏输入http://localhost:8080/TestWebServices/services/Hello?wsdl?出现如下图

6.然后在展开HelloService后面的wsdl可以看到

7.创建一个客户端HelloClient.java类
copy
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.Service;??
- import?org.codehaus.xfire.service.binding.ObjectServiceFactory;??
- import?com.yjpeng.hello.IHello;??
- class?HelloClient?{??
- ????????Service?s?=?new?ObjectServiceFactory().create(IHello.class);??
- ????????XFireProxyFactory?xf?=?new?XFireProxyFactory(XFireFactory.newInstance().getXFire());??
- ????????String?url="http://192.168.122.128:8080/TestWebServices/services/HelloService";??
- ????????IHello?hello;??
- try?{??
- ????????????hello?=?(IHello)xf.create(s,?url);??
- ????????????System.out.println(hello.sayHello("你好"));??
- ????????}?catch?(MalformedURLException?e)?{??
- ????????????e.printStackTrace();??
- ????????}??
- ??????????????
- ????????????Client?c?=?new?Client(new?URL("http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx?wsdl"));??
- ????????????Object[]?o?=?c.invoke("qqCheckOnline",?new?String[]{"271751507"});??
- out.println(o.length);??
- catch?(Exception?e)?{??
- 运行HelloClient.java类可以输出 你好??????????? 1.
三、使用axis1.4开发webservice方法
首先下载axis1.4包和tomcat服务器,并将解压后的axis1.4包下面的webapps下的axis目录复制到tomcat服务器的webapps文件夹中。axis支持三种Web Service的部署和开发,分别为:
a.Dynamic Invocation Interface(DII)
b.Stubs 方式
c.Dynamic Proxy方式
1.编写DII(Dynamic Invocation Interface)方式Web Service
a.编写服务程序HelloClient.java
copy
class?HelloClient??
- {??
- public?String?getName(String?name){??
- return?"hello,"?+?name;??
- b.将HelloClient.java文件拷贝到axis_home下,重命名为HelloClient.jws.
c.访问链接http://localhost:8080/axis/HelloClient.jws?wsdl页面显示axis自动生成的wsdl文件
d.编写访问服务的客户端TestHelloClient.java需要导入相应的axis.jar包,在下载的axis的WEB-INF/lib/目录下。
copy
package?com.yjpeng.webservice;??
- import?java.net.URL;??
- import?javax.xml.namespace.QName;??
- import?org.apache.axis.client.Call;??
- import?org.apache.axis.client.Service;??
- class?TestHelloClient?{??
- void?main(String[]?args){??
- try{??
- ????????????String?endpoint?=?"http://localhost:8080/axis/HelloClient.jws";??
- ????????????Service?service?=?new?Service();??
- ????????????Call?call?=?(Call)service.createCall();??
- ????????????call.setOperationName(new?QName(endpoint,?"getName"));??
- ????????????call.setTargetEndpointAddress(new?URL(endpoint));??
- ????????????String?result?=?(String)?call.invoke(new?Object[]{"张三"});??
- ????????????System.out.println(result);??
- ????????}catch?(Exception?e)?{??
- ????????????e.printStackTrace();??
- ????????}??
- 运行TestHelloClient.java在控制台输出hell,张三,测试成功.
2.编写Dynamci Proxy方式访问服务
a.编写部署服务端程序,用上边DII方式使用的HelloClient.java
copy
b.编写代理接口HelloClientInterface.java需要扩展java.rmi.Remote类
copy
package?com.yjpeng.dynamic.proxy;??
- import?java.rmi.Remote;??
- import?java.rmi.RemoteException;??
- interface?HelloClientInterface?extends?Remote?{??
- public?String?getName(String?name)?throws?RemoteException;??
- c.编写访问服务的客户端TestHelloClient.java
copy
import?javax.xml.namespace.QName;??
- import?javax.xml.rpc.Service;??
- import?javax.xml.rpc.ServiceFactory;??
- class?TestHelloClient?{??
- void?main(String[]?args){??
- ????????try{??
- ????????????String?wsdlUrl?=?"http://localhost:8080/axis/HelloClient.jws?wsdl";??
- ????????????String?nameSpaceUrl?=?"http://localhost:8080/axis/HelloClient.jws";??
- ????????????String?serviceName?=?"HelloClientService";??
- ????????????String?portName?=?"HelloClient";??
- ????????????ServiceFactory?serviceFactory?=?ServiceFactory.newInstance();??
- ????????????Service?afService?=?serviceFactory.createService(new?URL(wsdlUrl),153); font-weight:bold; background-color:inherit">new?QName(nameSpaceUrl,?serviceName));??
- ????????????HelloClientInterface?proxy?=?(HelloClientInterface)afService.getPort( ????????????????????HelloClientInterface.class);??
- out.println(proxy.getName("张三"));??
- ????????} 四、使用axis2开发webservice
研究中....
五、在Java Web项目中开放一个webservice接口实例
1.引入需要的jar包?

?
2.创建一个接口类IAddNumbers.java
copy
interface
?IAddNumbers?{??
- int?addNumbers(int?a,153); font-weight:bold; background-color:inherit">int?b);??
- 3.创建一个AddNumberImpl.java实现IAddnumbers.java接口类
copy
import?com.sun.xml.ws.transport.http.servlet.WSServlet;??
- @WebService(targetNamespace="http://webservice.yjpeng.com",?serviceName="AddNumberImplService",??
- ????????portName="AddNumberImpl")??
- class?AddNumberImpl?implements?IAddNumbers?{??
- int?b)?{??
- return?a?+?b;??
- 4.在WEN-INF目录下创建一个sun-jaxws.xml文件
copy
<?xml?version="1.0"?>??
- <endpoints?version="2.0"??
- ??xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime">??
- ??<endpoint?name="AddNumberImpl"???
- ?????implementation="com.yjpeng.webservice.AddNumberImpl"??
- ?????url-pattern="/addNumberImpl"/>??
- ?</endpoints>??
- ????????
6.部署web项目 启动相应部署服务器。访问http://localhost:8080/TestJaxWebService/addNumberImpl?wsdl?这样每次启动web服务器就开放了一个web service的接口。