2013-01-08 95 views
1

我按照这篇文章给出的例子:How to send data from Matlab to Rails,但我收到一条错误消息,我找不到任何信息。我的脚本是这样的:HTTP Post with Matlab

javaaddpath('./httpcomponents/httpclient-4.2.2.jar') 
javaaddpath('./httpcomponents/httpcore-4.2.2.jar') 

import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.entity.StringEntity; 

httpclient = DefaultHttpClient(); 

httppost = HttpPost('http://localhost:3000/signin'); 
httppost.addHeader('Content-Type','application/json'); 
httppost.addHeader('Accept','application/json'); 

tokenRequest = StringEntity('{"session", "{email_address:""[email protected],""password:""password""}"}'); 
httppost.setEntity(tokenRequest); 

response = httpclient.execute(httppost); 

就上线,我得到的错误:发生

Java异常:java.lang.VerifyError的:不能从最后一类

从搜索继承在线,我收集这是一个软件版本问题。我尝试使用这些文件的4.2版本(与其他文章中使用的版本相同),但我收到了同样的错误。有没有人有一个想法可能是错的?或者知道一种方法来做我想做的事情,而不使用这些外部库?

编辑:

本来我尝试使用此代码:

tokenRequest = {'session', '{''email_address'':''[email protected]'',''password'':''password''}'}; 
token = urlread('http://localhost:3000/signin','POST',tokenRequest); 

,但我收到,导致我的其他职位的NoMethodError:

NoMethodError (undefined method `each' for "{'email_address':'[email protected]','password':'password'}":String): 
    app/models/session.rb:14:in `initialize' 

我想原因它抛出此错误是因为服务器认为它正在接收一个没有每个方法的String对象。我假设我会通过使用'Content-Type'参数来指定它的json来解决这个问题。有没有办法使用urlread来做到这一点?

编辑:对Java库问题

Java exception occurred: 
java.lang.VerifyError: Cannot inherit from final class 

at java.lang.ClassLoader.defineClass1(Native Method) 

at java.lang.ClassLoader.defineClass(Unknown Source) 

at java.security.SecureClassLoader.defineClass(Unknown Source) 

at java.net.URLClassLoader.defineClass(Unknown Source) 

at java.net.URLClassLoader.access$000(Unknown Source) 

at java.net.URLClassLoader$1.run(Unknown Source) 

at java.security.AccessController.doPrivileged(Native Method) 

at java.net.URLClassLoader.findClass(Unknown Source) 

at com.mathworks.jmi.CustomURLClassLoader.findClass(ClassLoaderManager.java:760) 

at java.lang.ClassLoader.loadClass(Unknown Source) 

at java.lang.ClassLoader.loadClass(Unknown Source) 

at java.lang.ClassLoader.loadClassInternal(Unknown Source) 

at org.apache.http.impl.client.DefaultHttpClient.createHttpParams(DefaultHttpClient.java:157) 

at org.apache.http.impl.client.AbstractHttpClient.getParams(AbstractHttpClient.java:448) 

at org.apache.http.impl.client.AbstractHttpClient.createClientConnectionManager(AbstractHttpClient.java:309) 

at org.apache.http.impl.client.AbstractHttpClient.getConnectionManager(AbstractHttpClient.java:466) 

at org.apache.http.impl.client.AbstractHttpClient.createHttpContext(AbstractHttpClient.java:286) 

at 
org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:851) 

at 
org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:805) 

at 
org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:784) 
+0

给我们完整的堆栈跟踪 – Archer

回答

0

urlread2竟然是一个更好的解决方案。此代码完成这项工作:

tokenRequest = '{ "session" : { "email_address": "[email protected]", "password": "password" } }'; 
header = http_createHeader('Content-Type','application/json'); 
token = urlread2('http://localhost:3000/signin.json','POST',tokenRequest,header); 
1

完整的堆栈跟踪看起来正在发送的数据没有被正确引用。最终结果应该是

{'email_address':'[email protected]','password':'password'} 

尝试改变代码

tokenRequest = StringEntity('{"session", {"email_address":"[email protected]","password":"password"}}'); 
+0

是的,这将是一个问题。但在我使用DefaultHttpClient的情况下,问题是它没有向服务器发送任何东西 - java异常停止它。我重写了其他脚本以匹配您发布的最终结果,但仍然收到NoMethodError。 – Cbas