从服务器资源调用Restlet客户端资源会导致HTTP 404错误

时间:2013-01-08 00:45:55

标签: java restlet restlet-2.0

我有一个Restlet服务器应用程序,它调用客户端资源以达到访问谷歌端点的目的。

当我在代码中找到要点时:

ClientResource storeRoot = new ClientResource("http://googleendpoint");
  String jsonString = storeRoot.get().getText();

我收到警告和错误:

  

2013年1月7日下午4:33:34 org.restlet.engine.component.ClientRouter   getNext警告:此请求使用的协议未在中声明   客户端连接器列表。 (HTTPS / 1.1)。如果您使用的是   Component类的实例,检查其“clients”属性。不   找到(404) - 服务器未找到与请求匹配的任何内容   URI在   org.restlet.resource.ClientResource.doError(ClientResource.java:612)

我已经google了一下,看到解决方案可能会将协议添加到端点,如下所示:

component.getClients​().add(Protocol.HTTPS​);

问题是我在tomcat中将其作为war文件运行。我在哪里访问此组件对象以添加协议?

我也改变了我的web.xml来支持这个协议:

<?xml version="1.0" encoding="UTF-8"?>
 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         id="WebApp_ID" version="2.5">

         <display-name>Restlet adapters</display-name>

         <servlet>
                 <servlet-name>Restlet1</servlet-name>
                 <servlet-class>org.restlet.ext.servlet.ServerServlet</servlet-class>
                 <init-param>
                         <param-name>org.restlet.application</param-name>
                         <param-value>com.MyApplication</param-value>
                 </init-param>
                 <init-param>
                    <param-name>org.restlet.clients</param-name>
                    <param-value>HTTP HTTPS FILE</param-value>
                </init-param>
         </servlet>

         <servlet-mapping>
                 <servlet-name>Restlet1</servlet-name>
                 <url-pattern>/*</url-pattern>
         </servlet-mapping>
 </web-app>

2 个答案:

答案 0 :(得分:4)

尝试在<servlet>元素内的web.xml中添加以下内容。

<!-- Your application class name -->
<init-param>
    <param-name>org.restlet.application</param-name>
    <param-value>test.MyApplication</param-value>
</init-param>

<!-- List of supported client protocols -->
<init-param>
    <param-name>org.restlet.clients</param-name>
    <param-value>HTTP HTTPS FILE</param-value>
</init-param>

有关更完整的文档,请参阅http://www.restlet.org/documentation/snapshot/gae/ext/org/restlet/ext/servlet/ServerServlet.html

答案 1 :(得分:2)

经过很多心痛后,我确定解决方案是在Andy上面提到的web.xml中添加了params,并添加了以下jar:

org.restlet.ext.net org.restlet.ext.httpclient org.restlet.ext.ssl