Tag: restlet

TaskQueue无法执行HTTP调用 – 缺少必需的标头?

错误在此代码中: public String getVersion() { String result = null; int index = this.getRequest().getProtocol().indexOf(47); if (index != -1) { result = this.getRequest().getProtocol().substring(index + 1); } return result; } 错误是“无法找到强制”主机“HTTP标头。”: 10:34:29,889 INFO [org.restlet] (Thread-6 (HornetQ-client-global-threads-1773619305)) Couldn’t find the mandatory “Host” HTTP header. 10:34:29,910 WARNING [org.restlet.Component.Server] (Thread-6 (HornetQ-client-global-threads-1773619305)) Error while handling an HTTP server call: java.lang.NullPointerException at org.restlet.ext.servlet.internal.ServletCall.getVersion(ServletCall.java:370) […]

Restlet – 使用Router附加Resource类时出现问题

使用Restlet 2.1.0,Java SE版本进行原型设计,我无法将ServerResource类映射到URL。 我使用Router.attach方法尝试了很多变种,但没有任何效果。 我当前的代码如下所示: /** * @param args * @throws Exception */ public static void main(String[] args) throws Exception { final Router router = new Router(); router.attach(“/hello”, FirstServerResource.class); router.attach(“/json”, Json.class); Application myApp = new Application() { @Override public org.restlet.Restlet createInboundRoot() { router.setContext(getContext()); return router; }; }; new Server(Protocol.HTTP, 8182, myApp).start(); } 当我浏览到http://localhost:8182/hello它没有正确匹配模板。 通过源代码调试,我看到会发生的情况是匹配逻辑将请求的资源视为http://localhost:8182/hello而不仅仅是/hello 。 […]

为什么要使用REST @Produces注释

所以我明白你是在指定类型,但为什么呢? 在什么条件下才重要。 例如,如果我有以下方法,并且我注释掉@Produces注释,它仍然返回JSON。 @GET @Path(“/json”) //@Produces({MediaType.APPLICATION_JSON}) public String getJson(){ return toJson(getResults()); } API文档说’如果没有指定,那么容器将假定可以生成任何类型。’ 那么为什么我不想让容器承担这个呢?

如何在Java Restlet中访问请求的标头值?

我正在使用Restlet Java开发Web服务。 为此,我想保护一些Web服务免受未经授权的客户端的攻击。 所以我写过Filter类。 在那个Filter类中,我想获取Request的头文件 。 但我收到以下错误 – java.lang.ClassCastException: org.restlet.engine.http.HttpRequest cannot be cast to javax.servlet.http.HttpServletRequest 编码是 – public class MyFilter extends Filter { @Override protected int beforeHandle(Request request, Response response) { int result = STOP; HttpServletRequest httpReq = (HttpServletRequest) request; String user_token = httpReq.getHeader(“auth”); if(user_token.equals(“xyz”)) { result = CONTINUE; } return result; } } 请建议我访问Java […]

RESTful身份validation – 在高负载下导致性能不佳?

对于RESTful Web服务,我们说服务器不应存储任何状态。 现在,对于每个请求,“用户”必须经过身份validation,并且必须拥有他/她希望执行的操作的授权。 现在,每个请求都将包含该用户的授权数据。 这是我的困惑: 假设主页上有登录名和密码字段。 用户输入用户名/密码,该用户名/密码被发送回服务器,用户validation然后返回“某个令牌”。 现在,每个请求都会将此令牌发送到服务器。 问题(S): 后端数据库是否需要有一个单独的表来存储由用户名索引的这些令牌? 假设令牌存储在DB中,则每个请求都需要进行DB调用。 这是否会导致数据库服务器在高负载时成为瓶颈? 如果令牌没有真正存储在DB中,那么存储它的最佳“宁静”位置是什么? 有会议可能不安宁,但后来我没有看到如何扩展身份validation/授权(如上所述)? 如果它不是令牌,那么用户名/密码是否需要反向发送? (听起来像个坏主意:) 我可能误解了RESTful身份validation/授权的概念。 但实际情况是,对于每个http请求,“服务”需要访问数据库以validation凭据吗? 有什么东西可以简化这个过程并仍然坚持宁静的原则吗? 我可以想到有一个存储细节的缓存,并且在服务器重启的情况下,它只是让数据库之旅。 这只是一个可能使系统复杂化的性能优势(可能值得,不知道)。 这是唯一的解决方案吗? 因此,从REST的理论/概念角度(不是必要的实现)如何处理这个问题(如果它是一个问题)? 您的专业经验如何处理这个问题以及Restful是如何处理的? 我们正在研究Restlet + J2EE + MySQL Restful Web服务,我弹出这个问题,但没有令人满意的答案(谷歌,Stackoverflow等)我知道HTTP的基本和摘要授权,但我不熟悉根据上述说明,存储/检索的内部结构。

修复java.net.SocketTimeoutException:读取超时

我有一个RESTful服务器,它从客户端获取http POST输入以在服务器上投票。 我已经将Apache HTTPClient用于客户端。 public boolean vote() { HttpClient client = new DefaultHttpClient(getHttpParameters()); HttpConnectionParams.setConnectionTimeout(client.getParams(), 10000); // Timeout Limit HttpResponse response; try { HttpPost post = new HttpPost(“http://127.0.0.1:8080/ws/”); StringEntity se = new StringEntity(“{ \”song_id\” : \”2\” }”); se.setContentType(new BasicHeader(HTTP.CONTENT_TYPE,”application/json”)); post.setEntity(se); response = client.execute(post); if (response != null) { InputStream in = response.getEntity().getContent(); // Get the data […]

使用RESTlet进行细粒度身份validation

我想使用具有细粒度身份validation的RESTlet公开资源。 我的ServerResource应该只能通过GET访问经过身份validation的成员(使用BASIC身份validation)。 但是,对于没有任何身份validation的呼叫者,使用POST请求也应该可用。 为了清除: http:// path / myapp / user应该允许任何人使用POST注册,但只有注册的成员才能获得所有用户的列表。 遗憾的是,我很少进入RESTlet,我只找到使用粗略身份validation整个Restlet或Router的示例。 那么如何为资源启用可选身份validation并在每个方法级别上检查它们? 提前致谢!

NoSuchMethodError:com.google.common.base.Stopwatch.createStarted()Lcom / google / common / base / Stopwatch

我的应用程序正在抛出NoSuchMethodError: com.google.common.base.Stopwatch.createStarted()Lcom/google/common/base/Stopwatch错误。 不知道为什么,因为16.0.1确实包含那个类,我已经检查了。 根据我的研究,看起来这是一个错误? 我也有这个代码用于引用,但我认为这不是问题: FirewallRule rule = new PeriodicFirewallCounterRule(60, TimeUnit.SECONDS, new IpAddressCountingPolicy()); ((PeriodicFirewallCounterRule)rule).addHandler(new RateLimitationHandler(new UniqueLimitPolicy(10))); FirewallFilter firewallFiler = new FirewallFilter(getContext(), list(rule)); firewallFiler.setNext(ma); 我的应用程序正在使用Restlet APISpark: org.restlet.gae org.restlet.ext.apispark ${version.restlet} 运行并访问应用程序的REST API时,会抛出此错误: [INFO] Caused by: java.lang.NoSuchMethodError: com.google.common.base.Stopwatch.createStarted()Lcom/google/common/base/Stopwatch; [INFO] at org.restlet.ext.apispark.internal.firewall.rule.counter.PeriodicCounter.(PeriodicCounter.java:65) [INFO] at org.restlet.ext.apispark.internal.firewall.rule.PeriodicFirewallCounterRule$1.load(PeriodicFirewallCounterRule.java:86) [INFO] at org.restlet.ext.apispark.internal.firewall.rule.PeriodicFirewallCounterRule$1.load(PeriodicFirewallCounterRule.java:84) [INFO] at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3599) [INFO] at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2379) [INFO] at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2342) [INFO] at […]

RESTlet:如何处理multipart / form-data请求?

当它是多部分/表单数据请求时,如何捕获传入的@Post变量? 对于常规的Post请求,我会这样做: @Post public void postExample(Representation entity) throws Exception{ Form form = new Form(entity); System.out.println(form.getFirstValue(“something”)); } 但因为它是一个multipart / form-data请求,所以上面的输出为null 我是一个Java新手所以要温柔:) PS:我对处理传入的文件,只对文本字段感兴趣。

如何使Restlet客户端忽略SSL证书问题

我目前正在测试环境中工作,其中服务器具有默认的自签名SSL证书。 我正在使用Restlet 2.1-RC2并实例化客户端资源,如下所示: Client client = new Client(new Context(), Protocol.HTTP); cr = new ClientResource(String.format(itql_endpoint,riQuery)); cr.setNext(client); 并为我的每个电话重复使用客户端。 如何设置客户端以便忽略有问题的证书。