Rpc - wsdl

接入了幾個(gè)省的4A,發(fā)現(xiàn)了一點(diǎn)共性,記錄一下。
技術(shù):axis


axis 1.*

核心jar包(最少需要):

1.axis.jar
2.jaxrpc.jar
3.commons-logging-${version}.jar
4.commons-discovery-${version}.jar
5.wsdl4j-1.5.1.jar

調(diào)用

package ic;  
  
import javax.xml.rpc.ParameterMode;  
  
import org.apache.axis.client.Call;  
import org.apache.axis.client.Service;  
import org.apache.axis.encoding.XMLType;  
  
public class ICServiceTest1 {  
  
    public static void main(String[] args) {  
  
        try {  
  
            String endpoint = "http://localhost:3000/hy/gw/queryConsignOrder?wsdl";  
  
            Service service = new Service();  
            Call call = (Call) service.createCall();  
            call.setTargetEndpointAddress(endpoint);  
            // WSDL里面描述的接口名稱(chēng)(要調(diào)用的方法)  
            call.setOperationName("getLisQueryConsignOrder");  
            // 接口方法的參數(shù)名, 參數(shù)類(lèi)型,參數(shù)模式  IN(輸入), OUT(輸出) or INOUT(輸入輸出)  
            call.addParameter("icSystem", XMLType.XSD_STRING, ParameterMode.IN);  
            call.addParameter("companyFlag", XMLType.XSD_STRING, ParameterMode.IN);  
            call.addParameter("consignOrderNo", XMLType.XSD_STRING, ParameterMode.IN);  
            call.addParameter("orderNo", XMLType.XSD_STRING, ParameterMode.IN);  
            // 設(shè)置被調(diào)用方法的返回值類(lèi)型  
            call.setReturnType(XMLType.XSD_STRING);  
            //設(shè)置方法中參數(shù)的值  
            Object[] paramValues = new Object[] {"4PL","NJHY,NJHF","TC201309172206",""};  
            // 給方法傳遞參數(shù),并且調(diào)用方法  
            String result = (String) call.invoke(paramValues);    
      
            System.out.println("result is " + result);  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
  
    }  
  
}  

axis 2.*

核心jar包:

axiom-api-1.2.15.jar
axiom-impl-1.2.15.jar
axis2-adb-1.6.4.jar
axis2-kernel-1.6.4.jar
axis2-transport-http-1.6.4.jar
axis2-transport-local-1.6.4.jar
commons-codec-1.3.jar
commons-httpclient-3.1.jar
commons-logging-1.1.1.jar
httpcore-4.0.jar
neethi-3.0.2.jar
wsdl4j-1.6.2.jar
XmlSchema-1.4.7.jar

簡(jiǎn)單的WebService

import java.util.Random;  
//注意:無(wú)package包聲明  
public class SimpleService {  
      
    public  String getGreeting(String name){  
        return "Hello " + name;  
    }  
      
    public int getPrice(){  
        return new Random().nextInt(100);  
    }  
}  

調(diào)用

public class RPCClient {  
      
    public static String address="http://localhost:8080/axis2/services/SimpleService";  
      
    public static void main(String[] args) throws IOException{  
          
        Object[] result=invoke("getPrice", new Object[]{}, new Class[]{int.class});  
        System.out.println(result[0]);  // 80
        result=invoke("getGreeting", new Object[]{"jack"}, new Class[]{String.class});  
        System.out.println(result[0]);  // Hello jack
    }  
      
        @SuppressWarnings("rawtypes")  
    public static Object[] invoke(String method,Object[] params,Class[] classes) throws AxisFault{  
        //使用RPC方式調(diào)用WebService  
        RPCServiceClient client=new RPCServiceClient();  
        Options option=client.getOptions();  
          
        //指定調(diào)用的URL  
        EndpointReference reference=new EndpointReference(address);  
        option.setTo(reference);  
          
        /* 
         * 設(shè)置要調(diào)用的方法 
         * http://ws.apache.org/axis2 為默認(rèn)的(無(wú)package的情況)命名空間, 
         * 如果有包名,則為 http://axis2.webservice.elgin.com ,包名倒過(guò)來(lái)即可 
         * method為方法名稱(chēng) 
         *  
         */  
        QName  qname=new QName("http://ws.apache.org/axis2", method);  
          
        //調(diào)用遠(yuǎn)程方法,并指定方法參數(shù)以及返回值類(lèi)型  
        Object[] result=client.invokeBlocking(qname,params,classes);  
          
        return result;  
          
    }  

項(xiàng)目設(shè)計(jì)

4A廠商提供的形式:

  1. 直接提供webService ,可參考axis2.*,或下面某省提供的
  2. 提供wsdl,可參考axis1.*

如某省提供的

4A平臺(tái)提供如下應(yīng)用認(rèn)證接口(WebService),用于廠商調(diào)用:
地址: http://10.65.4.109:13001/Venus4A/services/Venus4AService(訪(fǎng)問(wèn)不了wsdl)
方法名:userSecondarySignatureLogin

入?yún)ⅲ?/p>

名稱(chēng) 說(shuō)明 類(lèi)型 長(zhǎng)度(字節(jié))
resID 資源編號(hào),由4A平臺(tái)定義并告知廠商 Int --
userName 從帳號(hào),即歸屬業(yè)務(wù)系統(tǒng)所用的個(gè)人賬號(hào) String 16
signature 憑證信息(采用加密方式) String 1024

出參:

名稱(chēng) 說(shuō)明 類(lèi)型 長(zhǎng)度(字節(jié))
result 認(rèn)證結(jié)果和從帳號(hào) 認(rèn)證結(jié)果:0-失敗 1-成功 String 1024

result格式參考:

<?xml version="1.0" encoding="UTF-8"?>
<UserSecondary>
        <UserName>從帳號(hào)名稱(chēng)</UserName>
        <Result>認(rèn)證結(jié)果</ Result >
</UserSecondary>

調(diào)用方法:

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
  private static String accessServiceFunction(String endpoint,String function,Object[] obj){
        Service service = new Service();
        Call call;
        String rusult = null;
        try {
            call = (Call) service.createCall();
            URL url = new URL(endpoint);
            call.setTargetEndpointAddress(url);
            call.setOperationName(function);
            return (String)call.invoke(obj);
        }catch (Exception e1) {
            logger.error("連接認(rèn)證服務(wù)器失?。? + e1.getMessage());
            return rusult = null;
        }   
  }


對(duì)接4A

主要需要實(shí)現(xiàn)登錄與登出
1.登錄
????基本都會(huì)提供username=xxx&token=%&*(!@#()@!#&^($!UIH 這樣的校驗(yàn)參數(shù)。在對(duì)現(xiàn)存系統(tǒng)影響最小的情況下,最理想的方式是新增Filter在第一個(gè)攔截器位置實(shí)現(xiàn)校驗(yàn)。
大致需要實(shí)現(xiàn)下面幾個(gè)方法:
1> 通用驗(yàn)權(quán),rpc層校驗(yàn)權(quán)限,如調(diào)用4A廠商提供的認(rèn)證方法
2> 個(gè)性化權(quán)限控制,如登錄ip限制
3> 登錄至系統(tǒng),實(shí)現(xiàn)login,如session添加user信息后,chain.doFilter

2.登出
????調(diào)用4A廠商提供的登出方法,調(diào)用系統(tǒng)自己的登出方法

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、Java基礎(chǔ) 1.寫(xiě)出下面代碼的執(zhí)行結(jié)果 2.寫(xiě)出下面代碼的執(zhí)行結(jié)果 3.寫(xiě)出下面代碼的執(zhí)行結(jié)果 (此題需寫(xiě)出...
    joshul閱讀 577評(píng)論 0 1
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類(lèi)相關(guān)的語(yǔ)法,內(nèi)部類(lèi)的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線(xiàn)程的語(yǔ)...
    子非魚(yú)_t_閱讀 34,626評(píng)論 18 399
  • ar包 用途axis.jar SOAP引擎包c(diǎn)ommons-discovery-0.2.jar 用來(lái)發(fā)現(xiàn)、查找和實(shí)...
    煮茶聽(tīng)雨閱讀 2,042評(píng)論 0 2
  • 因?yàn)橛行睦飰毫?,總想?xiě)點(diǎn)什么。 思科ACI的客戶(hù)越來(lái)越多了,熟悉ACI的工程師也越來(lái)越多。目前,截至到2016年五...
    taoza閱讀 3,154評(píng)論 15 9
  • 大學(xué)期間由于加入了一個(gè)公益性的支教組織,我便毫不猶豫的擯棄了我的專(zhuān)業(yè)。畢業(yè)之后毅然決然的走進(jìn)了教育這個(gè)應(yīng)有...
    一三雜談閱讀 447評(píng)論 0 0

友情鏈接更多精彩內(nèi)容