使用TWILIO的异常在GAE中发送短信API
我想发送短信给一个号码,它工作得很好。这是我的代码。使用TWILIO的异常在GAE中发送短信API
公共类SendSMSExample {
public void sendSMS(String data) throws Exception {
String url = "https://api.twilio.com/2010-04-01/Accounts/XXXXXXXXXXXXXXX/Messages";
URL url1 = new URL(url);
URLConnection conn = url1.openConnection();
conn.setDoOutput(true);
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
wr.write("data");
TwilioRestClient client = new TwilioRestClient(ACCOUNT_SID, AUTH_TOKEN);
Account account = client.getAccount();
//Use the API to send a text message
SmsFactory smsFactory = account.getSmsFactory();
Map<String, String> smsParams = new HashMap<String, String>();
smsParams.put("To", "+1408XXXXXXX");
smsParams.put("From", "(508)XXX-XXXX"); // Replace with a Twilio phone number in your account
smsParams.put("Body", "Hello");
try
{
Sms sms = smsFactory.create(smsParams);
}
catch (TwilioRestException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
// Create an instance of the SmsFactory class.
wr.flush();
// Get the response
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String output = "";
String inputLine;
while ((inputLine = reader.readLine()) != null)
{
output += inputLine;
}
wr.close();
reader.close();
}
}
但是,当我把同样的代码在我的项目上,我平时工作时,我得到异常。以下是异常的代码
公共类的SendMessage扩展TaskAdapter {
public static final String ACCOUNT_SID = "XXXXXXXXXXXXXXX";
public static final String AUTH_TOKEN = "XXXXXXXXXXXXXXX";
public static String PHONE_NUMBER = "from";
public static String MESSAGE = "message";
public void run(JSONObject x, JSONObject xx,
JSONObject xxx, JSONObject xxxx) throws Exception {
String from_phone_number = getStringValue(x, xx,
xxx, xxxx);
String message = getStringValue(x, xx,
xxx, xxxx));
String url = "https://api.twilio.com/2010-04-01/Accounts/XXXXXXXXXXXXXXX/Messages";
URL url1 = new URL(url);
URLConnection conn = url1.openConnection();
conn.setDoOutput(true);
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream(),
"UTF-8");
wr.write("data");
TwilioRestClient client = null;
try {
***client = new TwilioRestClient(ACCOUNT_SID, AUTH_TOKEN);***
} catch (Exception e) {
System.out.println(e);
e.getStackTrace();
}
Account account = client.getAccount();
// Use the API to send a text message
SmsFactory smsFactory = account.getSmsFactory();
Map<String, String> smsParams = new HashMap<String, String>();
smsParams.put("To", XXXX);
smsParams.put("From", XXXX); // Replace with a Twilio phone
// number in your account
smsParams.put("Body", "Hello 123");
try {
Sms sms = smsFactory.create(smsParams);
} catch (TwilioRestException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// Create an instance of the SmsFactory class.
wr.flush();
// Get the response
BufferedReader reader = new BufferedReader(new InputStreamReader(
conn.getInputStream()));
String output = "";
String inputLine;
while ((inputLine = reader.readLine()) != null) {
output += inputLine;
}
wr.close();
reader.close();
}
}
我在这行 客户端=新TwilioRestClient(ACCOUNT_SID,AUTH_TOKEN)获得例外; 我使用这个jar版本twilio的Java-SDK-3.4.6-JAR-与依赖性 而例外的是:
java.lang.NoSuchMethodError:org.apache.http.conn.scheme.Scheme。 (Ljava /郎/字符串; ILorg /阿帕奇/ HTTP /康恩/方案/ SchemeSocketFactory)。:V 在com.twilio.sdk.AppEngineClientConnectionManager(AppEngineClientConnectionManager.java:53) 在com.twilio.sdk.TwilioRestClient(TwilioRestClient .java:144) at com.twilio.sdk.TwilioRestClient。(TwilioRestClient.java:117) at org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157) at com.google。 appengine.api.socket.dev.DevSocketFilter.doFilter(DevSocketFilter.java:74) at org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157) at com.google.appengine.tools.development.ResponseRewriterFilter.doFilter(ResponseRewriterFilter.java:123) at org.mortbay。 jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157) at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:34) at org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157) at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:63) at org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter( ServletHandler.java:1157) at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(Transacti onCleanupFilter.java:43) at org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157) at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:125) 在org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157) 在com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectRequest(DevAppServerModulesFilter.java:368) 在com.google。 appengine.tools.development.DevAppServerModulesFilter.doDirectModuleRequest(DevAppServerModulesFilter.java:351) 在com.google.appengine.tools.development.DevAppServerModulesFilter.doFilter(DevAppServerModulesFilter.java:116) 在org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157) at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388) at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) at org.mortbay.jetty.servlet。 SessionHandler.handle(SessionHandler.java:182) at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext。java:418) at com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:97) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) at com。 google.appengine.tools.development.JettyContainerService $ ApiProxyHandler.handle(JettyContainerService.java:485) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) at org.mortbay.jetty.Server。处理(Server.java:326) at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) at org.mortbay.jetty.HttpConnection $ RequestHandler.headerComplete(HttpConnection.java:923) at org。 mortbay.jetty.HttpParser.parseNext(HttpParser.java:547) at org.mortbay.jetty.HttpParser .parseAvailable(HttpParser.java:212) at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409) at org .mortbay.thread.QueuedThreadPool $ PoolThread.run(QueuedThreadPool.java:582)
感谢提前:)
这是我发送短信代码。我不明白为什么你需要在你的代码中使用URLConnection,OutputStreamWriter等。
public static void sendSms(String phoneNumber, String message) throws TwilioRestException {
SmsFactory smsFactory = account.getSmsFactory();
HashMap<String, String> smsParams = new HashMap<String, String>();
smsParams.put("To", myPhoneNumber);
smsParams.put("From", phoneNumber);
smsParams.put("Body", message);
smsFactory.create(smsParams);
}
嗨,根据twilio文档,它要求我们首先有一个帖子请求。这就是我使用这些的原因。我试着按照你提到的方式去做。不工作:( – 2014-08-29 18:15:45
我有这个代码在生产中... – 2014-08-29 19:25:38
您应该XXX出ACCOUNT_SID和AUTH_TOKEN和任何其他唯一键。你有没有包含所有正确的库?这可能是有用的:http://stackoverflow.com/questions/17564775/how-to-create-call-from-twilio-helper-liabrary-in-google-app-engine – Ryan 2014-08-28 13:53:33
我做了他们XX出来,并使用正确库。尚未解决。 – 2014-08-29 18:24:29