Почему я получаю ошибку:Требуется номер телефона «От».
Вопрос
Я использую API Twilio для отправки SMS с моего номера Twilio на свой сотовый.
У меня есть два файла:1.Файл JSP с формой и метод вызова 2.класс Java с API Twilio, который получает вызов метода от пункта 1 и выполняет часть SEDING SMS (см. Файлы ниже)
Почему я получаю исключение. Требуется номер телефона «От кого»?
Программа работает, доставляет корректно, пробовал много раз.Я не получаю ошибку.Оно работает.Меня озадачивает именно это исключение.Я приобрел номер Twilio, поэтому не использую пробный номер.
С ним связана трассировка стека, но ее можно опубликовать позже.
В smsParams.put("From", from) я попытался заменить from на номер ячейки следующим образом (использовал допустимый номер):smsParams.put("От", "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>
Решение
Ошибка находится на вашей странице JSP.Когда JSP загружается, он работает через выполнение всего кода.Часть этого кода вы собираетесь входы и вызов вашего метода.
Однако, когда файл первые нагрузки нет значения в форме.Поэтому вызовы GetParameter получают нулевые значения.Следовательно, метод «Message.Providenumbers» пропускает ваш код Java NULLS.Это поворот означает, что когда ваш код Java пытается вызвать Twilio, он пропускает нулевые значения, а исключение срабатывает.
Чтобы исправить это, вы можете окружать код JVA 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);
}%>
.
Надеюсь, что помогает.
Другие советы
Несмотря на то, что вы включаете MyMessage в JSP, вы не устанавливаете значения для переменных 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 %>