2014-08-28 91 views
0

我想发送短信给一个号码,它工作得很好。这是我的代码。使用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)

感谢提前:)

+0

您应该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

+0

我做了他们XX出来,并使用正确库。尚未解决。 – 2014-08-29 18:24:29

回答

0

这是我发送短信代码。我不明白为什么你需要在你的代码中使用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); 
} 
+0

嗨,根据twilio文档,它要求我们首先有一个帖子请求。这就是我使用这些的原因。我试着按照你提到的方式去做。不工作:( – 2014-08-29 18:15:45

+0

我有这个代码在生产中... – 2014-08-29 19:25:38