Java进行Web Services开发

580人浏览 / 0人评论 / 添加收藏

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>

全部评论