• 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();
    }
  • 相关阅读:
    Django——form组件和ModelForm
    CDH hadoop的安装
    Vulnhub-靶机-PRIME: 1
    Vulnhub-靶机-SYMFONOS: 5
    sqlilab-Less-21-30-writeup
    Vulnhub-靶机-SYMFONOS: 4
    Vulnhub-靶机-SYMFONOS: 3
    基础汇总-sqlilab-Less-1-20
    sqlilab-Less-13-19 测试writeup
    sqlilab-Less-9-12 测试writeup
  • 原文地址:https://www.cnblogs.com/maple42/p/3986749.html
Copyright © 2020-2023  润新知