java AXIS2動態調用WCF webservice


  1. 所需jar包:
    import java.net.MalformedURLException;
    import java.rmi.RemoteException;
    import java.util.HashMap;
    import org.apache.axis.client.Call;
    import org.apache.axis.client.Service;
    import javax.xml.namespace.QName;
    import javax.xml.rpc.ParameterMode;
    import javax.xml.rpc.ServiceException;

  另外還需要一個commons-discovery-0.2.jar這個包,作用:用來發現、查找和實現可插入式接口,提供一些一般類實例化、單件的生命周期管理的常用方法。

  1. 調用WCF服務的時候,特別要注意參數的問題。需要傳輸的參數包括:服務wsdl地址,SOAP Action地址,方法名,方法變量名,方法參數值。
    通過org.apache.axis.client.Call下面的setTargetEndpointAddress(new java.net.URL(endpoint));來設置wsdl地址,通過addParameter(new QName(namespaceURI,parameterName),org.apache.axis.Constants.XSD_STRING,ParameterMode.IN)來設置方法變量名,並說明這是一個傳入參數,通過setReturnType(org.apache.axis.Constants.XSD_STRING)來設置方法返回類型,通過invoke(new java.lang.Object[] {parameterValue});動態調用方法,並傳遞參數值。

  2. 代碼如下:
    /**
         * axis2 client動態調用WCF webservice
         * @param endpoint wsdl地址,如http://172.16.5.21/WcfService2/Service1.svc?wsdl
         * @param SOAPActionURI 調用的方法action地址如"wsdl:input wsaw:Action="http://tempuri.org/IService1/GetData1" message="tns:IService1_GetData1_InputMessage" 
         * @param namespaceURI命名空間如targetNamespace="http://tempuri.org/"
         * @param methodName方法名如wsdl:operation name="GetData1"
         * @param parameterName方法變量名
         * @param parameterValue方法變量值
         * @return返回值
         * @throws ServiceException
         * @throws MalformedURLException
         * @throws RemoteException
         */
        public static String invokeWCF(String endpoint,String SOAPActionURI,String namespaceURI,String methodName,String parameterName,String parameterValue) 
                throws ServiceException, MalformedURLException, RemoteException
        {
    
            List<HashMap<String, Object>> mList = new ArrayList<HashMap<String,Object>>();
            Service service = new Service();
            Call call = (Call) service.createCall();
            call.setTargetEndpointAddress(new java.net.URL(endpoint));
            call.addParameter(new QName(namespaceURI,parameterName),org.apache.axis.Constants.XSD_STRING,ParameterMode.IN);
            call.setReturnType(org.apache.axis.Constants.XSD_STRING);
            call.setUseSOAPAction(true);
            call.setSOAPActionURI(SOAPActionURI);
            call.setOperationName(new QName(namespaceURI, methodName));
            String remsg=(String) call.invoke(new java.lang.Object[] {parameterValue});
            return remsg;
        }

     

     

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM