标签: restlet

从Swing应用程序远程连接到GWT服务器

简单来说,我编写了一个JSE Swing应用程序,需要与我之前编写的GWT服务器通信.我非常喜欢GWT在它的javascript和服务器端之间进行远程处理的方式,并希望我可以利用这种机制.有没有人设法以这种方式使用GWT-RPC?我应该去Restlet吗?

java remoting gwt swing restlet

6
推荐指数
1
解决办法
651
查看次数

什么是最好的JAX-RS库?

我一直在尝试选择哪种技术用于REST应用程序,并找到了4个候选者:

  1. 泽西岛 - 泽西岛.java.net
  2. Apache Wink - incubator.apache.org/wink
  3. RESTlet - www.restlet.org
  4. RESTeasy - jboss.org/resteasy

但是未能区分四者并选择其中一个,哪个最好?标准是:
a.稳定性\成熟度
b.安全
c.易于使用
d.支持

谢谢!

rest jax-rs jersey restlet resteasy

6
推荐指数
1
解决办法
5871
查看次数

什么Java REST框架与App Engine和Android一起用于学生?

我正在教授一门关于移动应用程序开发的大学课程,并希望向我的学生介绍一个用于App Engine的REST框架,以帮助他们为他们正在构建的Android应用程序进行数据存储.任何人都可以推荐符合以下条件的App Engine Java REST框架:

一定有:

  • 轻松学习曲线
  • 有详细记录,有清晰的教程和示例程序
  • 干净的抽象
  • 像啤酒一样免费
  • 适用于Eclipse

很高兴有:

  • Android客户端
  • 言论自由

不重要:

  • 能够支持大量查询量
  • 高度可定制

从我的网络搜索,Restlet看起来最好.我还应该考虑其他任何框架吗?

java rest google-app-engine android restlet

6
推荐指数
2
解决办法
2607
查看次数

Restlet客户端重复调用Restlet服务器挂起

我正在使用Restlet来实现Web服务.客户端(也使用Restlet)对服务器进行多次连续调用,但在少量调用成功完成后,进一步调用会挂起服务器,显示消息:

信息:停止接受新的连接和事务.考虑增加最大线程数.

我试过了:

getContext().getParameters().add("maxThreads", "200");
Run Code Online (Sandbox Code Playgroud)

但这没有用.在任何情况下,似乎客户端应该能够进行无限数量的呼叫,并且增加maxThreads只会增加限制.看起来我没有释放一些资源或在每次客户电话后断开连接,但我不知道该怎么做.

以下(我可以做的很小)独立程序演示了这个问题.它启动一个简单的服务器,然后客户端多次调用它:

/** You may copy, modify, and re-use this code as you see fit - Jim Irrer */
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;

import org.restlet.Application;
import org.restlet.Component;
import org.restlet.Request;
import org.restlet.Response;
import org.restlet.Restlet;
import org.restlet.Server;
import org.restlet.data.MediaType;
import org.restlet.data.Method;
import org.restlet.data.Protocol;
import org.restlet.data.Status;
import org.restlet.representation.InputRepresentation;
import org.restlet.representation.Representation;
import org.restlet.resource.ClientResource;
import org.restlet.resource.Directory;

public class SimpleServerPut extends Component implements Runnable {
    private static final int PORT = 8080;

    private static int readToByteArray(InputStream inputStream, byte[] buf) …
Run Code Online (Sandbox Code Playgroud)

java rest restlet

6
推荐指数
2
解决办法
5007
查看次数

在Restlet中添加由ClientResource包装的请求

如何将自己的标题添加到ClientResourceRestlet 包装的请求中?例如,我已经读过您在直接使用时可以使用以下内容Client:

Form headers = (Form) request.getAttributes().get(HeaderConstants.ATTRIBUTE_HEADERS);
if (headers == null) {
 headers = new Form();
 request.getAttributes().put("org.restlet.http.headers", responseHeaders);
}
headers.add("X-Some-Header", "the value");
Run Code Online (Sandbox Code Playgroud)

但是,我基本上遵循他们的教程中提供的代码,我不知道ClientResource应该访问哪个成员来设置标头:

ClientResource clientResource = new ClientResource("http://webserviceurl");

MyClassResource classResource = clientResource.wrap(classResource.class);

MyClass class;

try { class = resource.retrieve(); } catch (Exception e) { System.out.println("fail."); }
Run Code Online (Sandbox Code Playgroud)

如何修改retrieve()以添加一些标题?

java rest android restlet clientresource

6
推荐指数
1
解决办法
7872
查看次数

发出将上下文属性传递给ServerResource

我的应用程序尝试设置上下文属性:

    final Router router = new Router();
    router.attachDefault(HttpListener.class);

    org.restlet.Application myApp = new org.restlet.Application() {
        @Override
        public org.restlet.Restlet createInboundRoot() {
            getContext().getAttributes().put("mysharedobj", new MySharedObj());
            return router;
        };
    };
    Component component = new Component();
    component.getDefaultHost().attach("/", myApp);

    new Server(Protocol.HTTP, port, component).start();
Run Code Online (Sandbox Code Playgroud)

在我的HttpListener中,我声明上下文不是null:

public class HttpListener extends ServerResource {

    public MySharedObj mysharedobj;

    public HttpListener() { }  

    @java.lang.Override
    public void init(Context context, Request request, Response response) {

        assert context != null;  // throws java.lang.AssertionError

        // my end goal is to pass a shared object to my …
Run Code Online (Sandbox Code Playgroud)

java restlet restlet-2.0

6
推荐指数
1
解决办法
518
查看次数

Android Restlet HTTPS

尝试使用此代码从我的webservice(在app-engine上运行)获取我的Android客户端上的一些数据时

ClientResource cr = new ClientResource("https://myapp.appspot.com/restlet/service/");
IServiceResource res = cr.wrap(IServiceResource.class);
m_Services = res.getServices();
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

05-20 08:30:15.406: ERROR/AndroidRuntime(31767): Caused by: Communication Error (1001) - Could not change the mode after the initial handshake has begun.
Run Code Online (Sandbox Code Playgroud)

我有https支持的org.restlet.ext.ssl.jar,我使用这一行添加客户端

Engine.getInstance().getRegisteredClients().add(new HttpsClientHelper(null));
Run Code Online (Sandbox Code Playgroud)

这是我最接近https://调用工作,因为我搬到了resm 2.1m4(因为我需要entityBuffering而移动).

有任何想法吗?我需要分享的其他任何信息?

https android restlet

5
推荐指数
1
解决办法
2228
查看次数

何时使用Restlet路由器v.具有多个路由的组件

我使用此代码创建了多个路径和组件:

Component component = new Component();
component.getServers().add(Protocol.HTTP, port);
component.getDefaultHost().attach(pair.uriPattern, pair.restlet);
component.getDefaultHost().attach("/heartbeat", new HeartbeatRestlet());
Run Code Online (Sandbox Code Playgroud)

我的心跳代码有效.

但是当我使用路由器时pair.restlet,它不起作用:

Router router = new Router();
Restlet fooHandler = new FooRouter();
Restlet barHandler = new BarRouter();

router.attach("/foo/{fooId}", fooHandler);
router.attach("/bar/{barId1}/{barId2}", barHandler);
Run Code Online (Sandbox Code Playgroud)

Restlet doc仅给出了使用Application类的路由器的示例:

public class FirstStepsApplication extends Application {

    @Override
    public synchronized Restlet createInboundRoot() {
        Router router = new Router(getContext());
        router.attach("/hello", HelloWorldResource.class);
        return router;
    }
}
Run Code Online (Sandbox Code Playgroud)

实际上使用我的基于路由器的代码会产生与命中不存在的URL相同的效果.

所以我问:

  1. 基于路由器的方法应该实现什么与基于组件的方法之间有什么区别?
  2. 我可以使用基于路由器的方法使用此代码吗?截至目前,我唯一的解决方案是废弃多个路由器并改为连接多个组件,这需要处理更多遗留代码.

java servlets restlet

5
推荐指数
1
解决办法
1072
查看次数

使用简单连接器删除请求的Restlet?

我遇到了一个非常奇怪的问题,浏览器的HTTP请求似乎被Restlet服务器使用的Simple连接器丢弃.

服务器设置:

  • Restlet 2.1.2服务器
  • Restlet-Simple扩展(Simple 4.1.21附带)
  • 用于摘要式身份验证的Restlet-crypto扩展

服务器正在为浏览器提供网页,并使用javascript的XMLHttpRequest来获取更新.但是,其中一些XMLHttpRequests并未完成.Chrome的javascript调试程序显示这些的"失败"状态; Firefox的调试器记录完成时间,没有HTTP状态代码和记录的响应.数据包嗅探器指示有问题的请求实际发送到服务器,但服务器从不响应.调试显示这些请求永远不会到达我们的服务器代码.

我已经验证了Firefox,Chrome以及IE的问题.所有三个浏览器(最新版本)都遇到了这个问题.而且,每个浏览器都重复且可重复地具有完全相同请求的问题.但是这组请求在三种浏览器之间有所不同.

真正奇怪的是,当使用服务器的机器名称(测试在LAN上运行)时,问题确实浮出水面,但在使用机器的IP地址时却没有.从摘要切换回基本身份验证也会使问题消失,就像用Jetty替换Simple连接器一样.

我现在倾向于转向Jetty,但我仍然想知道发生了什么.有没有人见过这样的行为,或者对这里出了什么问题有所了解?

java restlet digest-authentication simple-framework

5
推荐指数
1
解决办法
418
查看次数

Apache camel即使在配置组件选项后,也会使用restlet连接池超时

我有一个骆驼Java DSL路由调用restlet端点.当我手动敲击时,路线没有任何问题.但是,当我尝试通过代码抽取大量请求时,我得到" Timeout等待来自池的连接 "

以下是相同的堆叠种族:

2016-01-29 14:09:38.650  WARN 20256 --- [pool-3-thread-2] org.restlet                              : An error occurred during the communication with the remote HTTP server.org.apache.http.conn.ConnectionPoolTimeoutException: Timeout waiting for connection from pool
at org.apache.http.impl.conn.tsccm.ConnPoolByRoute.getEntryBlocking(ConnPoolByRoute.java:412)
at org.apache.http.impl.conn.tsccm.ConnPoolByRoute$1.getPoolEntry(ConnPoolByRoute.java:298)
at org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager$1.getConnection(ThreadSafeClientConnManager.java:238)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:423)
at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:863)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:106)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:57)
at org.restlet.ext.httpclient.internal.HttpMethodCall.sendRequest(HttpMethodCall.java:339)
at org.restlet.engine.adapter.ClientAdapter.commit(ClientAdapter.java:105)
at org.restlet.engine.adapter.HttpClientHelper.handle(HttpClientHelper.java:119)
at org.restlet.Client.handle(Client.java:153)
at org.restlet.Restlet.handle(Restlet.java:275)
at org.apache.camel.component.restlet.RestletProducer.process(RestletProducer.java:79)
at org.apache.camel.component.restlet.RestletProducer.process(RestletProducer.java:98)
at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:141)
at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77)
at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:460)
at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:190)
at org.apache.camel.processor.Pipeline.process(Pipeline.java:121)
at org.apache.camel.processor.Pipeline.process(Pipeline.java:83)
at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:460)
at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:190)
at org.apache.camel.processor.MulticastProcessor.doProcessSequential(MulticastProcessor.java:668)
at org.apache.camel.processor.MulticastProcessor.doProcessSequential(MulticastProcessor.java:596) …
Run Code Online (Sandbox Code Playgroud)

java restlet apache-camel

5
推荐指数
1
解决办法
961
查看次数