2013-06-18 95 views
1

我會直接問我的問題。通過SMPP發送多個短信

  1. 我正在使用Logica smpp,並且我想向多個號碼發送短信。下面的代碼給出例外。

    public void submitMulti() { 
    String serviceType = "";   
    byte replaceIfPresentFlag = 0; 
    String scheduleDeliveryTime = null; 
    String validityPeriod = null; 
    byte esmClass = 0; 
    //###################### 
    //byte protocolId = 0; 
    //byte dataCoding = 0; 
    byte protocolId = 0; //0x00; commented is for flash 
    byte dataCoding = (byte) 0x08; //0x18 
    byte smsClass = 0x00; 
    //###################### 
    byte ton = 1; 
    byte npi = 1; 
    byte priorityFlag = 0; 
    byte registeredDelivery = 0; //TODO registered delivery 
    byte smDefaultMsgId = (byte) 12; //0; 
    try { 
        SubmitMultiSM request = new SubmitMultiSM(); 
        SubmitMultiSMResp response; 
    
        // input values and set some :-) 
        String sourceAddress = "123456789012"; 
        int numberOfDestination = 10; 
        for (int i = 0; i < numberOfDestination; i++) { 
         request.addDestAddress(new DestinationAddress(new Address(ton,npi,"923458503302"))); 
        } 
    
        // set other values 
        request.setServiceType(serviceType); 
        request.setSourceAddr(sourceAddress); 
        request.setReplaceIfPresentFlag(replaceIfPresentFlag); 
        request.setShortMessage("Hy"); 
        request.setScheduleDeliveryTime(scheduleDeliveryTime); 
        request.setValidityPeriod(validityPeriod); 
        request.setEsmClass(esmClass); 
        request.setProtocolId(protocolId); 
        request.setPriorityFlag(priorityFlag); 
        request.setRegisteredDelivery(registeredDelivery); 
        request.setDataCoding(dataCoding); 
        request.setSmDefaultMsgId(smDefaultMsgId); 
        String ipAddress = Bundle.getInstance().getValue(Bundle.Application_Contants.IP_ADDRESS.toString()); 
        int port = Integer.valueOf(Bundle.getInstance().getValue(Bundle.Application_Contants.PORT.toString())); 
        long receiveTimeOut = Long.valueOf(Bundle.getInstance().getValue(Bundle.Application_Contants.RECEIVE_TIMEOUT.toString())); 
    
        TCPIPConnection connection = new TCPIPConnection(ipAddress,port); 
        connection.setReceiveTimeout(receiveTimeOut); 
        customSession = new Session(connection); 
    
    
        // send the request 
        System.out.println("Submit Multi request " + request.debugString()); 
        if (!asynchronous) { 
         customSession.submitMulti(request); 
        } else { 
         response = customSession.submitMulti(request); 
         System.out.println("Submit Multi response " + response.debugString()); 
         messageId = response.getMessageId(); 
        } 
    
    } catch (Exception e) { 
        log.error(e,e); 
        System.out.println("Submit Multi operation failed. " + e.getMessage()); 
    } finally { 
    } 
    

    }

,異常是:

java.lang.NullPointerException 
at org.smpp.Session.send(Session.java:1100) 
at org.smpp.Session.send(Session.java:1173) 
at org.smpp.Session.submitMulti(Session.java:727) 
at com.noetic.topUpBooster.smpp.JarConnection.submitMulti(JarConnection.java:413) 
at com.noetic.sdp.alerts.JarCheck.run(JarCheck.java:34) 
Submit Multi operation failed. null 

沒有任何人有想法?

+0

什麼是連接類型? t或r還是tr? –

回答

0

假設您的代碼充當ESME,必須在發送任何SubmitSM,SubmitMultiSM或DataSM之前發送綁定請求(通過BindTransmitter或BindTransciever)。

+0

現在它不顯示任何錯誤。但消息未傳遞到指定的目標(msisdn)。 – IConfused

+0

至於這個第二個問題:(1)你所有的目的地號碼都是一樣的。我會嘗試用獨特的目的地進行測試。 (2)綁定請求必須具有有效的用戶名/密碼組合。我會檢查響應對象以查看綁定請求是否被接受。 –

+0

恩,感謝它現在的工作。由於操作員遇到了一些問題,我嘗試了另一個操作員的其他msisdn,並且它的工作方式類似於魅力,並且沒有使用相同的msisdn的問題。再次感謝。 – IConfused