0

Twilio API を使用して、Twilio 番号から携帯電話に SMS を送信しています。

2 つのファイルがあります。1. フォームとメソッド呼び出しを含む JSP ファイル 2. 項目 1 からメソッド呼び出しを受け取り、SMS の送信部分を実行する Twilio API を含む Java クラス (以下のファイルを参照)

A "From" phone number is required という例外が発生するのはなぜですか?

プログラムは機能し、正しく配信され、何度も試行されました。エラーが発生しません。できます。私を困惑させるのはまさにその例外です。twilio 番号を購入したので、トライアル番号は使用していません。

それに関連付けられたスタック トレースがありますが、後で投稿できます。

smsParams.put("From", from) で、from を次のようなセル番号に直接置き換えてみました (有効な No を使用): smsParams.put("From", "1231231234"); 次に、次の行 (smsParams.put("To", from);) に移動し、「To」番号が必要であるという例外が発生します。変数を数値に置き換えると、次の行にスキップし、メッセージ本文に例外が発生します。

ありがとう

//***********************************
//java class MyMessage
//***********************************

package package_sms;
import java.util.HashMap;
import java.util.Map;
import com.twilio.sdk.TwilioRestClient;
import com.twilio.sdk.TwilioRestException;
import com.twilio.sdk.resource.factory.SmsFactory;
import com.twilio.sdk.resource.instance.Account;


public class MyMessage {

/** The Constant ACCOUNT_SID. */
public static final String ACCOUNT_SID = "AC11d68faa7db85a48557aa33ae0b88261";

/** The Constant AUTH_TOKEN. */
public static final String AUTH_TOKEN = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";


public String to, from, text;

    public void provideNumbers(String to, String from, String text)
    {
        // Create a rest client
        TwilioRestClient client = new TwilioRestClient(ACCOUNT_SID, AUTH_TOKEN);

        // Get the main account (The one we used to authenticate the client
        Account mainAccount = client.getAccount();

        // Send an sms
        SmsFactory smsFactory = mainAccount.getSmsFactory();
            Map<String, String> smsParams = new HashMap<String, String>();
        smsParams.put("From", from);    // Twillio No
        smsParams.put("To", to);        // target phone No
        smsParams.put("Body", text);    // message text
        try 
        {
            smsFactory.create(smsParams);
        } 
        catch (TwilioRestException e) 
        {
            e.printStackTrace();
        }   
    }



<% *****************************
// jsp file SendSms
***************************** %>

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="package_sms.MyMessage"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>form</title>
</head>
    <body style="background-color:Azure;">
        <h3>Welcome to your text messenger</h3>
        <form action="SendSms.jsp" name="form1" method="POST" >
        From: <input type="text" name="phoneFrom" style="background-color: Beige;border:1px solid Black;"/><br><br> 
        To: <input type="text" name="phoneTo" style="background-color: Beige;border:1px solid Black;"/><br><br>
        Message text: <input type="text" name="messageText" style="background-color: Beige;border:1px solid Black;"/><br><br>
        <input type="submit" name="submit" value="Send Message" />
        </form><br>

        <%  /* Declared string variables that provide parameters to the 
               call to provideNumber method. provideNumbers method is located in MyMessage class.
               provideNumbers method is called on a 'message' object.  */

        String number_from = request.getParameter("phoneFrom");
        String number_to = request.getParameter("phoneTo");
        String messageBody = request.getParameter("messageText");

        MyMessage message = new MyMessage();
            message.provideNumbers(number_to, number_from, messageBody);
            %>

    </body>
</html>
4

2 に答える 2

1

エラーは JSP ページにあります。JSP がロードされると、すべてのコードが実行されます。そのコードの一部は、入力を取得してメソッドを呼び出すことです。

ただし、ファイルが最初にロードされるとき、フォームには値がありません。したがって、getParameter 呼び出しは null 値を取得しています。したがって、「message.provideNumbers」メソッドは Java コードの null を渡しています。これは、Java コードが Twilio を呼び出そうとすると、null 値が渡され、例外がトリガーされることを意味します。

これを修正するには、変数にエントリがあることを確認する IF ステートメントで JSP Java コードを囲むことができます。例えば:

<% if (request.getParameter("phoneFrom") != null 
       && request.getParameter("phoneTo") != null 
       && request.getParameter("messageText") != null) {  

    String number_from = request.getParameter("phoneFrom");
    String number_to = request.getParameter("phoneTo");
    String messageBody = request.getParameter("messageText");

    MyMessage message = new MyMessage();
    message.provideNumbers(number_to, number_from, messageBody);
}%>

それが役立つことを願っています。

于 2012-07-26T21:01:05.497 に答える
0

JSP に MyMessage を含めているにもかかわらず、from、to、および message 変数の値を設定していません。リクエストからそれらを取得し、それらの変数を初期化します。

私は何かを監督したことを見ました... JSP の最後に、リクエストからの割り当てと JSP のロジックがあります。含まれているクラスでリクエストをBeanとして処理することをお勧めします。これにより、ページを「描画」する前にプロセスが確実に完了し、プロセス結果を表示できるようになります。

JSP で、最初に

<jsp:useBean id="myBean" scope="request" class="package_sms.MyMessage">
   <% myBean.provideNumbers( request ); %>
</jsp:useBean>

...そしてあなたのクラスでは、このようなもの

public void provideNumbers(HTTPServletRequest request)
{
    String number_from = request.getParameter("phoneFrom");
    String number_to = request.getParameter("phoneTo");
    String messageBody = request.getParameter("messageText");
    ...
    smsParams.put("From", number_from);    // Twillio No
    smsParams.put("To", number_to);        // target phone No
    smsParams.put("Body", messageBody);    // message text

クラスでPublic String resultStringは、送信処理の結果に応じて表示されるメッセージを設定でき、JSPでは、次のように出力できます<%= myBean.resultString %>

于 2012-07-25T19:34:06.667 に答える