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;
- @SOAPBinding(style = SOAPBinding.Style.RPC)
- @WebService
- public class HelloService {
- @WebMethod
- public String sayHello(String message){
- return "Hello ," + message;
- }
- public static void main(String[] args) {
- //create and publish an endPoint
- HelloService hello = new HelloService();
- Endpoint endPoint = Endpoint.publish("http://localhost:8080/helloService", hello);
- }
- }
- 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;
- }
- public static void main(String[] args) {
- //create and publish an endPoint
- 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
- package com.yjpeng.hello;
- import com.yjpeng.webservice.HelloServiceService;
- public class HelloClient {
- public static void main(String[] args) {
- HelloServiceService helloServiceService = new HelloServiceService();
- com.yjpeng.webservice.HelloService helloService = helloServiceService.getHelloServicePort();
- System.out.println(helloService.sayHello("你好"));
- }
- }
- package com.yjpeng.hello;
- import com.yjpeng.webservice.HelloServiceService;
- public class HelloClient {
- public static void main(String[] args) {
- HelloServiceService helloServiceService = new HelloServiceService();
- com.yjpeng.webservice.HelloService helloService = helloServiceService.getHelloServicePort();
- System.out.println(helloService.sayHello("你好"));
- }
- }
運行結果在控制台輸出 hello,你好 證明利用JDK web服務API實現web service成功!
二、使用xfire框架,我這里使用的是MyEclipse集成的xfire進行測試,利用xfire開發WebService可以有三種方法:
a.一種是從JavaBean中生成。
b.一種是從wsdl文件中生成。
c.一種是自己建立webservice。
具體實現步驟如下:
1.用Myeclipse建立webService工程(注意:Web Service&J2EE Details中的Framework選XFire),目錄結構如下:
2.創建IHello.java接口
- package com.yjpeng.hello;
- public interface IHello {
- public String sayHello(String message);
- }
- package com.yjpeng.hello;
- public interface IHello {
- public String sayHello(String message);
- }
3.創建IHelloImpl.java實現IHello.java接口
- package com.yjpeng.hello;
- public class IHelloImpl implements IHello {
- public String sayHello(String message) {
- return message;
- }
- }
- package com.yjpeng.hello;
- public 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類
- 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;
- public class HelloClient {
- public static void main(String[] args) {
- 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();
- }
- try {
- //這個是在java端調用.net寫的遠程Web Service 如果調用本機寫的只需要把URL中的地址換成本機能訪問的地址即可
- Client c = new Client(new URL("http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx?wsdl"));
- Object[] o = c.invoke("qqCheckOnline", new String[]{"271751507"});
- System.out.println(o.length);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
- 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;
- public class HelloClient {
- public static void main(String[] args) {
- 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();
- }
- try {
- //這個是在java端調用.net寫的遠程Web Service 如果調用本機寫的只需要把URL中的地址換成本機能訪問的地址即可
- Client c = new Client(new URL("http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx?wsdl"));
- Object[] o = c.invoke("qqCheckOnline", new String[]{"271751507"});
- System.out.println(o.length);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
運行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
- public class HelloClient
- {
- public String getName(String name){
- return "hello," + name;
- }
- }
- public 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/目錄下。
- 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;
- public class TestHelloClient {
- public static 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();
- }
- }
- }
- 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;
- public class TestHelloClient {
- public static 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
- public class HelloClient
- {
- public String getName(String name){
- return "hello," + name;
- }
- }
- public class HelloClient
- {
- public String getName(String name){
- return "hello," + name;
- }
- }
b.編寫代理接口HelloClientInterface.java需要擴展java.rmi.Remote類
- package com.yjpeng.dynamic.proxy;
- import java.rmi.Remote;
- import java.rmi.RemoteException;
- public interface HelloClientInterface extends Remote {
- public String getName(String name) throws RemoteException;
- }
- package com.yjpeng.dynamic.proxy;
- import java.rmi.Remote;
- import java.rmi.RemoteException;
- public interface HelloClientInterface extends Remote {
- public String getName(String name) throws RemoteException;
- }
c.編寫訪問服務的客戶端TestHelloClient.java
- package com.yjpeng.dynamic.proxy;
- import java.net.URL;
- import javax.xml.namespace.QName;
- import javax.xml.rpc.Service;
- import javax.xml.rpc.ServiceFactory;
- public class TestHelloClient {
- public static 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), new QName(nameSpaceUrl, serviceName));
- HelloClientInterface proxy = (HelloClientInterface)afService.getPort(new QName(nameSpaceUrl, portName),
- HelloClientInterface.class);
- System.out.println(proxy.getName("張三"));
- }catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
- package com.yjpeng.dynamic.proxy;
- import java.net.URL;
- import javax.xml.namespace.QName;
- import javax.xml.rpc.Service;
- import javax.xml.rpc.ServiceFactory;
- public class TestHelloClient {
- public static 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), new QName(nameSpaceUrl, serviceName));
- HelloClientInterface proxy = (HelloClientInterface)afService.getPort(new QName(nameSpaceUrl, portName),
- HelloClientInterface.class);
- System.out.println(proxy.getName("張三"));
- }catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
運行TestHelloClient.java在控制台輸出hell,張三,測試成功.
四、使用axis2開發webservice
研究中....
五、在java web項目中開放一個webservice接口實例
1.引入需要的jar包
2.創建一個接口類IAddNumbers.java
- package com.yjpeng.webservice;
- public interface IAddNumbers {
- public int addNumbers(int a, int b);
- }
- package com.yjpeng.webservice;
- public interface IAddNumbers {
- public int addNumbers(int a, int b);
- }
3.創建一個AddNumberImpl.java實現IAddnumbers.java接口類
- package com.yjpeng.webservice;
- import javax.jws.WebService;
- import com.sun.xml.ws.transport.http.servlet.WSServlet;
- @WebService(targetNamespace="http://webservice.yjpeng.com", serviceName="AddNumberImplService",
- portName="AddNumberImpl")
- public class AddNumberImpl implements IAddNumbers {
- public int addNumbers(int a, int b) {
- return a + b;
- }
- }
- package com.yjpeng.webservice;
- import javax.jws.WebService;
- import com.sun.xml.ws.transport.http.servlet.WSServlet;
- @WebService(targetNamespace="http://webservice.yjpeng.com", serviceName="AddNumberImplService",
- portName="AddNumberImpl")
- public class AddNumberImpl implements IAddNumbers {
- public int addNumbers(int a, int b) {
- return a + b;
- }
- }
4.在WEN-INF目錄下創建一個sun-jaxws.xml文件
- <?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>
- <?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>
5.在web.xml文件中增加
- <servlet>
- <servlet-name>AddNumberService</servlet-name>
- <servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
- <load-on-startup>1</load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>AddNumberService</servlet-name>
- <url-pattern>/addNumberImpl</url-pattern>
- </servlet-mapping>
- <listener>
- <listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class>
- </listener>
- <servlet>
- <servlet-name>AddNumberService</servlet-name>
- <servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
- <load-on-startup>1</load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>AddNumberService</servlet-name>
- <url-pattern>/addNumberImpl</url-pattern>
- </servlet-mapping>
- <listener>
- <listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class>
- </listener>
6.部署web項目 啟動相應部署服務器。訪問http://localhost:8080/TestJaxWebService/addNumberImpl?wsdl 這樣每次啟動web服務器就開放了一個web service的接口。
相關:
cxf:源碼:https://github.com/apache/cxf
axis1 和 axis2 的簡單使用
利用AXIS開發Webservice(一) —— 如何發布自己的webservice
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;
- }
- public static void main(String[] args) {
- //create and publish an endPoint
- HelloService hello = new HelloService();
- Endpoint endPoint = Endpoint.publish("http://localhost:8080/helloService", hello);
- }
- }
- 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;
- }
- public static void main(String[] args) {
- //create and publish an endPoint
- 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
- package com.yjpeng.hello;
- import com.yjpeng.webservice.HelloServiceService;
- public class HelloClient {
- public static void main(String[] args) {
- HelloServiceService helloServiceService = new HelloServiceService();
- com.yjpeng.webservice.HelloService helloService = helloServiceService.getHelloServicePort();
- System.out.println(helloService.sayHello("你好"));
- }
- }
- package com.yjpeng.hello;
- import com.yjpeng.webservice.HelloServiceService;
- public class HelloClient {
- public static void main(String[] args) {
- HelloServiceService helloServiceService = new HelloServiceService();
- com.yjpeng.webservice.HelloService helloService = helloServiceService.getHelloServicePort();
- System.out.println(helloService.sayHello("你好"));
- }
- }
運行結果在控制台輸出 hello,你好 證明利用JDK web服務API實現web service成功!
二、使用xfire框架,我這里使用的是MyEclipse集成的xfire進行測試,利用xfire開發WebService可以有三種方法:
a.一種是從JavaBean中生成。
b.一種是從wsdl文件中生成。
c.一種是自己建立webservice。
具體實現步驟如下:
1.用Myeclipse建立webService工程(注意:Web Service&J2EE Details中的Framework選XFire),目錄結構如下:
2.創建IHello.java接口
- package com.yjpeng.hello;
- public interface IHello {
- public String sayHello(String message);
- }
- package com.yjpeng.hello;
- public interface IHello {
- public String sayHello(String message);
- }
3.創建IHelloImpl.java實現IHello.java接口
- package com.yjpeng.hello;
- public class IHelloImpl implements IHello {
- public String sayHello(String message) {
- return message;
- }
- }
- package com.yjpeng.hello;
- public 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類
- 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;
- public class HelloClient {
- public static void main(String[] args) {
- 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();
- }
- try {
- //這個是在java端調用.net寫的遠程Web Service 如果調用本機寫的只需要把URL中的地址換成本機能訪問的地址即可
- Client c = new Client(new URL("http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx?wsdl"));
- Object[] o = c.invoke("qqCheckOnline", new String[]{"271751507"});
- System.out.println(o.length);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
- 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;
- public class HelloClient {
- public static void main(String[] args) {
- 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();
- }
- try {
- //這個是在java端調用.net寫的遠程Web Service 如果調用本機寫的只需要把URL中的地址換成本機能訪問的地址即可
- Client c = new Client(new URL("http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx?wsdl"));
- Object[] o = c.invoke("qqCheckOnline", new String[]{"271751507"});
- System.out.println(o.length);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
運行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
- public class HelloClient
- {
- public String getName(String name){
- return "hello," + name;
- }
- }
- public 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/目錄下。
- 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;
- public class TestHelloClient {
- public static 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();
- }
- }
- }
- 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;
- public class TestHelloClient {
- public static 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
- public class HelloClient
- {
- public String getName(String name){
- return "hello," + name;
- }
- }
- public class HelloClient
- {
- public String getName(String name){
- return "hello," + name;
- }
- }
b.編寫代理接口HelloClientInterface.java需要擴展java.rmi.Remote類
- package com.yjpeng.dynamic.proxy;
- import java.rmi.Remote;
- import java.rmi.RemoteException;
- public interface HelloClientInterface extends Remote {
- public String getName(String name) throws RemoteException;
- }
- package com.yjpeng.dynamic.proxy;
- import java.rmi.Remote;
- import java.rmi.RemoteException;
- public interface HelloClientInterface extends Remote {
- public String getName(String name) throws RemoteException;
- }
c.編寫訪問服務的客戶端TestHelloClient.java
- package com.yjpeng.dynamic.proxy;
- import java.net.URL;
- import javax.xml.namespace.QName;
- import javax.xml.rpc.Service;
- import javax.xml.rpc.ServiceFactory;
- public class TestHelloClient {
- public static 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), new QName(nameSpaceUrl, serviceName));
- HelloClientInterface proxy = (HelloClientInterface)afService.getPort(new QName(nameSpaceUrl, portName),
- HelloClientInterface.class);
- System.out.println(proxy.getName("張三"));
- }catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
- package com.yjpeng.dynamic.proxy;
- import java.net.URL;
- import javax.xml.namespace.QName;
- import javax.xml.rpc.Service;
- import javax.xml.rpc.ServiceFactory;
- public class TestHelloClient {
- public static 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), new QName(nameSpaceUrl, serviceName));
- HelloClientInterface proxy = (HelloClientInterface)afService.getPort(new QName(nameSpaceUrl, portName),
- HelloClientInterface.class);
- System.out.println(proxy.getName("張三"));
- }catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
運行TestHelloClient.java在控制台輸出hell,張三,測試成功.
四、使用axis2開發webservice
研究中....
五、在java web項目中開放一個webservice接口實例
1.引入需要的jar包
2.創建一個接口類IAddNumbers.java
- package com.yjpeng.webservice;
- public interface IAddNumbers {
- public int addNumbers(int a, int b);
- }
- package com.yjpeng.webservice;
- public interface IAddNumbers {
- public int addNumbers(int a, int b);
- }
3.創建一個AddNumberImpl.java實現IAddnumbers.java接口類
- package com.yjpeng.webservice;
- import javax.jws.WebService;
- import com.sun.xml.ws.transport.http.servlet.WSServlet;
- @WebService(targetNamespace="http://webservice.yjpeng.com", serviceName="AddNumberImplService",
- portName="AddNumberImpl")
- public class AddNumberImpl implements IAddNumbers {
- public int addNumbers(int a, int b) {
- return a + b;
- }
- }
- package com.yjpeng.webservice;
- import javax.jws.WebService;
- import com.sun.xml.ws.transport.http.servlet.WSServlet;
- @WebService(targetNamespace="http://webservice.yjpeng.com", serviceName="AddNumberImplService",
- portName="AddNumberImpl")
- public class AddNumberImpl implements IAddNumbers {
- public int addNumbers(int a, int b) {
- return a + b;
- }
- }
4.在WEN-INF目錄下創建一個sun-jaxws.xml文件
- <?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>
- <?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>
5.在web.xml文件中增加
- <servlet>
- <servlet-name>AddNumberService</servlet-name>
- <servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
- <load-on-startup>1</load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>AddNumberService</servlet-name>
- <url-pattern>/addNumberImpl</url-pattern>
- </servlet-mapping>
- <listener>
- <listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class>
- </listener>
- <servlet>
- <servlet-name>AddNumberService</servlet-name>
- <servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
- <load-on-startup>1</load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>AddNumberService</servlet-name>
- <url-pattern>/addNumberImpl</url-pattern>
- </servlet-mapping>
- <listener>
- <listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class>
- </listener>
6.部署web項目 啟動相應部署服務器。訪問http://localhost:8080/TestJaxWebService/addNumberImpl?wsdl 這樣每次啟動web服務器就開放了一個web service的接口。
相關:
cxf:源碼:https://github.com/apache/cxf