JAVA写webservice例子了

webservice例子了  
   
  Axis支持三种web   service的部署和开发,分别为:  
   
  1、Dynamic   Invocation   Interface   (   DII)  
   
  2、Stubs方式  
   
  3、Dynamic   Proxy方式  
   
  二、编写DII(Dynamic   Invocation   Interface   )方式web服务  
   
  1.编写服务端程序HelloClient  
   
   
  public   class   HelloClient  
  {  
          public   String   getName(String   name)  
          {  
                  return   "hello   "+name;  
          }  
  }  
     
   
   
   
  2、将源码拷贝到Axis_HOME下,重命名为   HelloClient.jws    
   
  3、访问连接http://localhost:8080/Axis/HelloClient.jws?wsdl,页面显示Axis自动生成的wsdl    
   
  4、编写访问服务的客户端   TestHelloClient.java    
   
   
  import   org.apache.Axis.client.Call;  
  import   org.apache.Axis.client.Service;  
  import   javax.xml.namespace.QName;  
  import   javax.xml.rpc.ServiceException;  
  import   java.net.MalformedURLException;  
  import   java.rmi.RemoteException;  
   
  public   class   SayHelloClient2  
  {  
          public   static   void   main(String[]   args)  
  {  
                  try  
  {  
      String   endpoint   =  
      "http://localhost:8080/Axis/HelloClient.jws";  
   
          Service   service   =   new   Service();  
                          Call   call   =   null;  
   
                          call   =   (Call)   service.createCall();  
   
                          call.setOperationName(new   QName(  
                                "http://localhost:8080/Axis/HelloClient.jws",    
        "getName"));  
                          call.setTargetEndpointAddress  
  (new   java.net.URL(endpoint));  
   
                          String   ret   =   (String)   call.invoke(new   Object[]    
  {"zhangsan"});  
                          System.out.println("return   value   is   "   +   ret);  
                  }    
  catch   (Exception   ex)  
  {  
                ex.printStackTrace();  
                  }  
          }  
  }  
     
   
   
   
  三、编写Dynamic   Proxy方式访问服务    
   
  1、编写部署服务端程序,同上边DII方式,本次仍使用上边部署的HelloClient    
   
  2、编写代理接口    
   
   
  public   interface   HelloClientInterface  
  extends   java.rmi.Remote  
  {  
          public   String   getName(String   name)  
  throws   java.rmi.RemoteException;  
  }  
     
   
   
   
  3、编写并执行客户端程序TestHelloClient.java    
   
   
  import   javax.xml.rpc.Service;  
  import   javax.xml.rpc.ServiceFactory;  
  import   java.net.URL;  
  import   javax.xml.namespace.QName;  
   
  public   class   TestHelloClient    
  {  
          public   static   void   main(String[]   args)  
  {  
                  try  
                  {  
                          String   wsdlUrl   =    
  "http://localhost:8080/Axis/HelloClient.jws?wsdl";  
                          String   nameSpaceUri   =    
  "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(nameSpaceUri,   serviceName));  
                          HelloClientInterface   proxy   =   (HelloClientInterface)  
                  afService.getPort(new   QName(  
                                          nameSpaceUri,   portName),    
  HelloClientInterface.class);  
                          System.out.println  
  ("return   value   is   "+proxy.getName("john")   )   ;  
                  }catch(Exception   ex)  
                  {  
                          ex.printStackTrace()   ;  
                  }  
          }  
  }  
     
   
   
   
  四、编写wsdd发布web服务,编写stub   client访问web服务    
   
  1、编写服务端程序server,SayHello.java,编译server.SayHello.java    
   
   
  package   server;  
  public   class   SayHello  
  {  
          public   String   getName(String   name)  
          {  
                  return   "hello   "+name;  
          }  
  }  
  2.编写LogHandler.java  
  import   org.apache.Axis.AxisFault;  
  import   org.apache.Axis.Handler;  
  import   org.apache.Axis.MessageContext;  
  import   org.apache.Axis.handlers.BasicHandler;  
   
  import   java.util.Date;  
   
  public   class   LogHandler    
  extends   BasicHandler    
  {  
    public   void   invoke  
  (MessageContext   msgContext)    
  throws   AxisFault  
          {  
                  /**   Log   an   access   each   time    
  we   get   invoked.  
                    */  
                  try   {  
                          Handler   serviceHandler  
  =   msgContext.getService();  
   
                          Integer   numAccesses   =  
      (Integer)serviceHandler.getOption("accesses");  
                          if   (numAccesses   ==   null)  
                                  numAccesses   =   new   Integer(0);  
  numAccesses   =   new   Integer  
  (numAccesses.intValue()   +   1);  
  Date   date   =   new   Date();  
    String   result   =    
    date   +   ":   service   "   +  
  msgContext.getTargetService()   +  
  "   accessed   "   +   numAccesses   +   "   time(s).";  
  serviceHandler.setOption  
  ("accesses",   numAccesses);  
  System.out.println(result);  
                  }   catch   (Exception   e)  
  {  
                          throw   AxisFault.makeFault(e);  
                  }  
          }  
  }  
     
   
   
   
  3、编写wsdd文件    
   
   
  deploy.wsdd  
  <deployment   xmlns=  
  "http://xml.apache.org/Axis/wsdd/"  
      xmlns:java=  
  "http://xml.apache.org/Axis/wsdd/providers/java">                        
        <handler   name="print"   type="java:LogHandler"/>    
    <service   name="sayhello"  
    provider="java:RPC">  
        <requestFlow>  
            <handler   type="print"/>  
        </requestFlow>  
      <parameter   name="className"    
      value="server.SayHello"/>  
      <parameter   name="allowedMethods"  
      value="*"/>      
    </service>  
  </deployment>  
     
   
   
   
  3、将编译后的文件拷贝到Axis_HOME/WEB-INF/classes下,如:D:\tomcat\webapps\Axis\WEB-INF\classes    
   
  4、发布服务:    
   
  java   org.apache.Axis.client.AdminClient   deploy.wsdd    
   
  5、生成client   stub文件    
   
  a:方式1    
   
  将SayHello.java拷贝到Axis_HOME/下,重命名为SayHello.jws,    
   
  执行下面的命令生存client   stub    
   
   
  java   org.apache.Axis.wsdl.WSDL2Java    
  -p   client     http://localhost:8080  
  /Axis/services/SayHello.jws?wsdl  
     
   
   
   
  b:方式2    
   
  执行如下命令生成SayHello.wsdl    
   
   
  java   org.apache.Axis.wsdl.Java2WSDL  
  -oSayHello.wsdl   -lhttp://localhost:8080  
  /Axis/services/SayHello   -nsayhello   server.SayHello  
     
   
   
   
  执行如下命令生成client   stub    
   
   
  java   org.apache.Axis.wsdl.WSDL2Java    
  SayHello.wsdl     -p   client  
     
   
   
   
  生成的stub   client文件列表为:    
   
  1.SayHello.java    
   
  2.SayHelloService.java。    
   
  3.SayHelloServiceLocator.java    
   
  4.SayHelloSoapBindingStub.java    
   
  6、编写客户端程序,编译并执行    
   
   
  public   class   SayHelloClient  
  {  
          public   static   void   main(String[]   args)  
  {  
                  try  
  {  
          SayHelloService   service   =   new   client.  
                SayHelloServiceLocator();  
                      client.SayHello_PortType    
      client   =   service.getSayHello();  
                          String   retValue=client.getName("zhangsan");  
                          System.out.println(retValue);  
  }    
  catch   (Exception   e)  
  {  
    System.err.println  
    ("Execution   failed.   Exception:   "   +   e);  
                  }  
          }  
  }   
     

posted on 2008-08-29 10:00  一麦  阅读(9627)  评论(1编辑  收藏  举报