我一直在互联网上寻找一个如何做到这一点的例子.我只想设置一个REST服务器,它自动将对象与XML进行序列化.我只是尝试提供一个服务器,只有在用户登录后才能使用户登录,注销和访问XML对象列表.获得一个简单的示例应用程序需要什么?
我没有理解Restlet库的工作方式,而且我完全不习惯使用JAXB和JAXRS.我参与了一个使用这些库的项目,但仅从客户的角度来看.
我已使用ServerServlet机制将我们的Restlet服务部署到Jetty Java Application服务器.一些服务是从GWT前端调用的,但我还需要直接从我们的服务器逻辑中调用它们.
该的Restlet RIAP系统似乎为这个完美的,但我不知道如何在这里使用.似乎我需要以某种方式阻止Restlet组件的Context.
我发现一个帖子表明RiapServerHelper对此很有用.但我没有找到关于如何使用它的文档.任何例子都会有所帮助.
我使用Apache Commons HttpClient和Restlet来调用一个宁静的Web服务.不幸的是,我的服务器(基于Ruby on Rails)不喜欢Transfer-Encoding: chunkedHttpClient默认使用的服务器.
有没有办法禁止从客户端使用分块编码的POST?
如何以所需格式返回Restlet响应?我使用的方法:
@Get ("json")
public Address sendResponse(){
Address add = getAddress();
return add;
}
Run Code Online (Sandbox Code Playgroud)
现在我必须显式地将java对象转换为json字符串作为对浏览器的响应.Restlet框架本身不能照顾它吗?
Spring MVC的Restful实现可以做到.我也在Restlet中寻找类似的实现.
我试图用我的restlet返回JSON数据.我可以返回单个项目的JSON ...
import org.json.JSONObject;
Site aSite = new Site().getSite();
JSONObject aSiteJson = new JSONObject(aSite);
return aSiteJson.toString();
Run Code Online (Sandbox Code Playgroud)
返回:{"name":"qwerty","url":"www.qwerty.com"}
我如何为ArrayList对象返回JSON
ArrayList<Site> allSites = new SitesCollection().getAllSites();
JSONObject allSitesJson = new JSONObject(allSites);
return allSitesJson.toString();
Run Code Online (Sandbox Code Playgroud)
返回:{"empty":false}
ArrayList<Site> allSites = new SitesCollection().getAllSites();
JSONArray allSitesJson = new JSONArray(allSites);
return allSitesJson.toString();
Run Code Online (Sandbox Code Playgroud)
返回:["com.sample.Site@4a7140","com.sample.Site @ 1512c2e","com.sample.Site@2bba21","com.sample.Site@c8d0b7"]
这是我的Site类
public class Site {
private String name;
private String url;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getUrl() {
return url;
} …Run Code Online (Sandbox Code Playgroud) 我在休息服务中看到了以下代码片段
@POST
@Consumes("application/xml")
@Path("/ProjectConfiguration/{onetimetoken}")
public void createProjectConfiguration(@PathParam("onetimetoken") String oneTimeToken,
CreateProjectConfigurationRequest request) throws IntegratedAppFault {
// NOOPS
}
Run Code Online (Sandbox Code Playgroud)
在这个变量值中,oneTimeToken由路径中的内容初始化.但我怀疑的是如何初始化CreateProjectConfigurationRequest类型的请求对象.我们如何自由地在这些方法中拥有任何参数.这是怎么回事?如何保证初始化.
我有一个使用JDK 1.5的项目(由于项目遗留),我想使用Restlet.目前我在我的pom.xml中获得了当前的构建部分:
<build>
<plugins>
[...]
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.1</version>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>maven-restlet</id>
<name>Restlet repository</name>
<url>http://maven.restlet.com</url>
</repository>
</repositories>
<properties>
<restlet-version>2.2.1</restlet-version>
<spring-version>3.1.1.RELEASE</spring-version>
</properties>
<dependencies>
<dependency>
<groupId>org.restlet.jse</groupId>
<artifactId>org.restlet</artifactId>
<version>${restlet-version}</version>
</dependency>
<dependency>
<groupId>org.restlet.jse</groupId>
<artifactId>org.restlet.ext.jackson</artifactId>
<version>${restlet-version}</version>
</dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)
当我在mvn installEclipse中运行时,出现以下错误:
[ERROR] src/main/java/com/****/SomeFile.java:[3,-1] cannot access org.restlet.Component
bad class file: ****\.m2\repository\org\restlet\jse\org.restlet\2.2.1\org.restlet-2.2.1.jar(org/restlet/Component.class)
class file has wrong version 50.0, should be 49.0
Run Code Online (Sandbox Code Playgroud)
我理解错误是因为我正在尝试使用Java 5编译项目但使用Java 6库.如何使用JDK 1.5来使用或编译我的依赖项?
我正在尝试读取放置在WEB-INF根路径中的配置文件.该应用程序正在使用RESTLET框架.我在官方RESTLET 文档中读到可以使用Context.getClientDispatcher()通过WAR连接器("war:///WEB-INF/web.xml")读取文件.
但是我无法弄清楚如何实现这一目标.请告诉我这个或任何其他方式使用RESTLET读取文件
我正在使用Restlet框架构建RESTful API,并且需要它来处理跨域调用(CORS)以及基本身份验证.
目前我正在使用CorsFilter,它负责使我的webservice支持CORS请求.但是,当我尝试使用带有HTTP基本身份验证的简单ChallengeAuthenticator时,它将无法正常工作(来自网站).
当我直接通过Chrome访问网络服务时,它按预期工作,但是当我在一个用angularjs(jquery/javascript)编写的小型Web应用程序中尝试它并尝试访问web服务时,它没有.
基本上会发生的事情是,当OPTIONS请求发送到我的Web服务时,它不会响应标题:'Access-Control-Allow-Origin','Access-Control-Allow-Credentials'等应该如此.相反,它发送一个HTTP状态代码401的响应,表示身份验证失败.这是因为身份验证器以某种方式覆盖了CorsFilter吗?
我的createInboundRoot方法如下所示.
@Override
public Restlet createInboundRoot() {
ChallengeAuthenticator authenticator = createAuthenticator();
RoleAuthorizer authorizer = createRoleAuthorizer();
Router router = new Router(getContext());
router.attach("/items", ItemsServerResource.class);
router.attach("/items/", ItemsServerResource.class);
Router baseRouter = new Router(getContext());
authorizer.setNext(ItemServerResource.class);
authenticator.setNext(baseRouter);
baseRouter.attach("/items/{itemID}", authorizer);
baseRouter.attach("", router);
// router.attach("/items/{itemID}", ItemServerResource.class);
CorsFilter corsFilter = new CorsFilter(getContext());
corsFilter.setNext(authenticator);
corsFilter.setAllowedOrigins(new HashSet(Arrays.asList("*")));
corsFilter.setAllowedCredentials(true);
return corsFilter;
}
Run Code Online (Sandbox Code Playgroud)
(授权者和身份验证者代码取自"官方"重定向指南,用于授权和身份验证)
我已经对我的代码进行了很多更改,但没有一个给我任何运气.但我注意到,当在ChallengeAuthenticator中将参数"optional"设置为true("表示身份验证成功是否可选")时,CorsFilter会完成其工作,但很明显,ChallengeAuthenticator不关心对客户端进行身份验证,并允许任何使用受保护的内容资源..
有人有过类似的问题吗?或者您是否以任何其他方式解决了这个问题(在Restlet中进行CORS +身份验证)?
提前致谢!
我的项目通过gradle配置了依赖项.我想添加以下依赖项:
compile group: 'org.restlet.jse', name: 'org.restlet.ext.apispark', version: '2.3.1'
Run Code Online (Sandbox Code Playgroud)
哪个可以在以下存储库中找到(我已添加到我的build.gradle中):
maven {
url "http://maven.restlet.org"
}
Run Code Online (Sandbox Code Playgroud)
但是,当我这样做时,我收到以下错误:
Could not find org.restlet.jse:org.restlet.lib.swagger-models:1.5.0-SNAPSHOT.
http://maven.restlet.org/org/restlet/jse/org.restlet.lib.swagger-models/1.5.0-SNAPSHOT/maven-metadata.xml
http://maven.restlet.org/org/restlet/jse/org.restlet.lib.swagger-models/1.5.0-SNAPSHOT/org.restlet.lib.swagger-models-1.5.0-null-null.pom
http://maven.restlet.org/org/restlet/jse/org.restlet.lib.swagger-models/1.5.0-SNAPSHOT/org.restlet.lib.swagger-models-1.5.0-null-null.jar
Required by: org.restlet.jse:org.restlet.ext.apispark:2.3.1
Run Code Online (Sandbox Code Playgroud)
我可以看到jar实际上是在存储库中,但Gradle并没有在正确的位置寻找它,原因我不知道.为什么它不使用文件名中的版本而是1.5.0-null-null.
我创建了一个Maven项目,它具有在pom.xml中定义的相同依赖关系.
如何解决这个问题?我在这一点上也有趣于更多的手动解决方案:)谢谢.