用axis做一个简单的webservice

 

服务端

服务端webserviceServer的代码如下:

package server;

public class HelloServer {
           public String sayHello(String name){
                return "Hello! webservice...  "+name;
    }
}

在eclipse中,右键点击该类,选择webservice --> create webservice

注意要选择public the web service

finish之后, 服务端的代码写好了。 启动服务器,可以在浏览器中输入:http://localhost:8080/webserviceServer/services/HelloServer?wsdl  验证。

 

客户端:

webserviceClient

到官网下载axis2取得jar包加入到lib中。

第一中方式:

 

package test;

import javax.xml.namespace.QName;

import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.rpc.client.RPCServiceClient;

public class Test {
    public static void main(String[] args) throws Exception{
    //  使用RPC方式调用WebService          
        RPCServiceClient serviceClient = new RPCServiceClient(); 
    
        Options options = serviceClient.getOptions();
    //  指定调用WebService的URL  
        EndpointReference targetEPR = new EndpointReference("http://localhost:8080/webserviceServer/services/HelloServer");
          options.setTo(targetEPR);  
        //  指定sayHello方法的参数值 
          Object[] opAddEntryArgs = new Object[] {"wangkun"}; 
          System.out.println(opAddEntryArgs[0]);
        //  指定sayHello方法返回值的数据类型的Class对象  
          Class[] classes = new Class[] {String.class}; 
        //  指定要调用的sayHello方法及WSDL文件的命名空间  
               QName opAddEntry = new QName("http://server", "sayHello"); 
               //System.out.println(serviceClient.invokeBlocking(opAddEntry, opAddEntryArgs, classes)[0]);
               Object[] obj = serviceClient.invokeBlocking(opAddEntry, opAddEntryArgs,classes);
               System.out.println(obj[0]);
               //System.out.println(serviceClient.invokeBlocking(opAddEntry, opAddEntryArgs,classes));
    }
}

测试,如果结果出现Hello! webservice...  wangkun  则说明webservice 客户端代码调用了服务端。

 

 

第二种方式:

package test;
import javax.xml.namespace.QName;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
public class Test2 {
    /**
     * @param args
     */
    public static void main(String[] args) throws Exception{
        // 服务端webservice地址
          String endpoint = "http://localhost:8080/webserviceServer/services/HelloServer";
          // 定义服务端webservice调用的方法名称opName
          String opName = "sayHello";
          WebServiceParam[] params = new WebServiceParam[1];
          // 可以定义多个WebServiceParam对象表示多个参数
          WebServiceParam p1 = new WebServiceParam(); 
          // 定义服务端webservice调用方法的参数名称以及值
          p1.setParamName("userId");
          p1.setParamValue("wangkun");
          QName qName = org.apache.axis.encoding.XMLType.XSD_STRING;
          p1.setqName(qName);
          System.out.println(p1.getqName());
          params[0] = p1;
          String str="";
          try {
           str = getStringByWebService(endpoint, opName, params);
           System.out.println("==webService Result==" + str);
          } catch (Exception e) {
           str = "异常";
           System.out.println("==webService error=str=" + str);
          }
    }
    
     /**
      * <p>
      * Description:调用返回值是string类型的webservice
      * <p>
      * @param endpoint
      * @param opName
      * @param params
      */
     public static String getStringByWebService(String endpoint, String opName,
       WebServiceParam[] params) throws Exception {
      try {
       String res = null;
       Service service = new Service();
       Call call = (Call) service.createCall();
       call.setTargetEndpointAddress(new java.net.URL(endpoint));
       for (int i = 0; i < params.length; i++) {
        call.addParameter(params[i].getParamName(), params[i].getqName(),
          javax.xml.rpc.ParameterMode.IN);
       }
       call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);
       call.setOperationName(new QName(endpoint + opName,
         opName));
       call.setUseSOAPAction(true);
       call.setSOAPVersion(org.apache.axis.soap.SOAPConstants.SOAP11_CONSTANTS);
       Object o[] = new Object[params.length];
       for (int i = 0; i < params.length; i++) {
        o[i] = params[i].getParamValue();
       }
       res = (String) call.invoke(o);
       System.out.println(res);
       return res;
      } catch (Exception e) {
       throw e;
      }
     }
}

class WebServiceParam{
    private String paramName;
     private Object paramValue;
     private QName qName;
     
     public WebServiceParam(){}
     public WebServiceParam(String paramName,String paramValue,QName qName){
      this.paramName = paramName;
      this.paramValue = paramValue;
      this.qName = qName;
     }
     public QName getqName() {
      return qName;
     }
     public void setqName(QName qName) {
      this.qName = qName;
     }
     public String getParamName() {
      return paramName;
     }
     public void setParamName(String paramName) {
      this.paramName = paramName;
     }
     public Object getParamValue() {
      return paramValue;
     }
     public void setParamValue(Object paramValue) {
      this.paramValue = paramValue;
     }
}

 

posted @ 2012-07-26 16:46  合肥房屋托管  阅读(3024)  评论(0编辑  收藏  举报