zoukankan      html  css  js  c++  java
  • Java调用WebService

    Java调用WebService可以直接使用Apache提供的axis.jar自己编写代码,或者利用Eclipse自动生成WebService Client代码,利用其中的Proxy类进行调用。理论上是一样的,只不过用Eclipse自动生成代码省事些。
    1、编写代码方式:
    package com.yudun.test;
    import java.rmi.RemoteException;
    import org.apache.axis.client.Call;
    import org.apache.axis.client.Service;
    import org.apache.axis.message.PrefixedQName;
    import org.apache.axis.message.SOAPHeaderElement;
    import com.cezanne.golden.user.Exception;
    import com.cezanne.golden.user.UserManagerServiceProxy;
    import javax.xml.namespace.QName;
    import java.net.MalformedURLException;
    import javax.xml.rpc.ServiceException;
    import javax.xml.soap.Name;
    import javax.xml.soap.SOAPException;

    public class testWebService {
     public static String getResult() throws ServiceException, MalformedURLException, RemoteException, SOAPException
      {
         //标识Web Service的具体路径
       String endpoint = "WebService服务地址";
         // 创建 Service实例
        Service service = new Service();   
         // 通过Service实例创建Call的实例
        Call call = (Call) service.createCall();
        //将Web Service的服务路径加入到call实例之中.
        call.setTargetEndpointAddress( new java.net.URL(endpoint) );//为Call设置服务的位置
        // 由于需要认证,故需要设置调用的SOAP头信息。   
        Name headerName = new PrefixedQName( new QName("发布的wsdl里的targetNamespace里的url", "string_itemName") ); 
              org.apache.axis.message.SOAPHeaderElement header = new SOAPHeaderElement(headerName); 
              header.addTextNode( "blablabla" ); 
              call.addHeader(header);
             
    //    SOAPHeaderElement soapHeaderElement = new SOAPHeaderElement("发布的wsdl里的targetNamespace里的url", "SoapHeader");   
    //    soapHeaderElement.setNamespaceURI("发布的wsdl里的targetNamespace里的url");   
    //    try  
    //    {   
    //        soapHeaderElement.addChildElement("string_itemName").setValue("blablabla");   
    //    }   
    //    catch (SOAPException e)   
    //    {   
    //        e.printStackTrace();   
    //    }   
    //    call.addHeader(soapHeaderElement);  
         //调用Web Service的方法
              org.apache.axis.description.OperationDesc oper;
              org.apache.axis.description.ParameterDesc param;
              oper = new org.apache.axis.description.OperationDesc();
              oper.setName("opName");
              param = new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "arg0"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"), java.lang.String.class, false, false);
              param.setOmittable(true);
              oper.addParameter(param);
              param = new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "arg1"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"), java.lang.String.class, false, false);
              param.setOmittable(true);
              oper.addParameter(param);
              param = new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "arg2"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"), java.lang.String.class, false, false);
              param.setOmittable(true);
              oper.addParameter(param);
              oper.setReturnType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"));
              oper.setReturnClass(java.lang.String.class);
              oper.setReturnQName(new javax.xml.namespace.QName("", "return"));
              oper.setStyle(org.apache.axis.constants.Style.WRAPPED);
              oper.setUse(org.apache.axis.constants.Use.LITERAL);
              oper.addFault(new org.apache.axis.description.FaultDesc(
                            new javax.xml.namespace.QName("发布的wsdl里的targetNamespace里的url", "Exception"),
                            "Exception",
                            new javax.xml.namespace.QName("发布的wsdl里的targetNamespace里的url", "Exception"), 
                            true
                           ));
       call.setOperation( oper );
       call.setOperationName(new javax.xml.namespace.QName("发布的wsdl里的targetNamespace里的url", "opName"));
         //调用Web Service,传入参数
       String res = ( String ) call.invoke( new Object[]("arg0","arg1"));
       System.out.println("===============");
       return res;
      }
     /**
      * @param args
      */
     public static void main(String[] args) {
      try {
       System.out.println(getResult());
      } catch (MalformedURLException e) {
       e.printStackTrace();
      } catch (RemoteException e) {
       e.printStackTrace();
      } catch (ServiceException e) {
       e.printStackTrace();
      } catch (SOAPException e) {
       e.printStackTrace();
      }
        }
    }
     
    2、利用Eclipse自动生成WebService client代码就容易多了:
    首先,new project,选择other,在输入框中输入Web Service Client,选中搜索后的结果,点击Next,在Service definition中输入 WebService的发布地址,点击Finish
    这样,WebService Client代码已经生成好了。
    接下来写一个Test类,在main函数中输入如下代码:
     
     String endpoint = "服务器的WebService的地址";
     YourWebServiceNameProxy umsp = new YourWebServiceNameProxy (endpoint);
     try {
     String resultStr = umsp.opMethod("arg0","arg1");
     System.out.println(resultStr);
     } catch (Exception e) {
     System.out.println("异常");
     e.printStackTrace();
     } catch (RemoteException e) {
     System.out.println("RemoteException异常");
     e.printStackTrace();
    }
  • 相关阅读:
    记第一场省选
    POJ 2083 Fractal 分形
    CodeForces 605A Sorting Railway Cars 思维
    FZU 1896 神奇的魔法数 dp
    FZU 1893 内存管理 模拟
    FZU 1894 志愿者选拔 单调队列
    FZU 1920 Left Mouse Button 简单搜索
    FZU 2086 餐厅点餐
    poj 2299 Ultra-QuickSort 逆序对模版题
    COMP9313 week4a MapReduce
  • 原文地址:https://www.cnblogs.com/maple42/p/3986749.html
Copyright © 2011-2022 走看看