1

我正在尝试访问应该部署在 tomcat 中的 Wink 资源。资源代码是

@Path("/lookup")
public class LookupResource {

private static final Logger logger = LoggerFactory.getLogger(LookupResource.class);

private MetaService metaService;

/**
 * 
 */
public LookupResource() {
    logger.debug("CTOR +-");
}

/**
 * @return the metaService
 */
public MetaService getMetaService() {
    return metaService;
}

/**
 * @param metaService the metaService to set
 */
public void setMetaService(MetaService metaService) {
    logger.debug(String.format("Setting Meta Svc: %s ", metaService));
    this.metaService = metaService;
}

    @GET
@Path("/states")
@Produces("application/json")
public JSONObject getStates() {
        final String METHOD = "getMessage";
        JSONObject answer = new JSONObject();
        try {
          logger.debug(String.format("%s +", METHOD));
          List<Lookup> states = getMetaService().findStates();
          for (Lookup state : states) {
              answer.put("Lookup", state);
          }
        } catch (JSONException e) {
          logger.debug("Problem", e);
        } finally {
          logger.debug(String.format("%s -", METHOD));
        }
        return answer;

}
    }

我将 Spring 添加到 web.xml

    <context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:META-INF/server/wink-core-context.xml
                   classpath:my-server.xml
                   classpath:my-webapp.xml</param-value>
    </context-param>
    <listener>
      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

在 my-webapp.xml spring 配置中我注册了资源

<bean id="lookupResource" class="com.codeheadllc.webapp.LookupResource" >
  <property name="metaService" ref="metaService" />
</bean>

<bean class="org.apache.wink.spring.Registrar">
  <property name = "instances">
    <set>
      <ref bean="lookupResource"/>
    </set>
  </property>
</bean>

当我部署并启动 tomcat 时,我在记录器中看到我的 LookupResource bean 已加载,并且它获取对 metaService 的引用。但是,当我点击 http:///my-webapp/lookup/states 时,我没有访问 LookupResouce,而是收到 404 消息。我确信这是一个愚蠢的疏忽,但我不明白我做错了什么。如果我为 RestServlet 添加一个 servlet 到 web.xml 并添加一个映射,比如 rest/*,那么 RestServlet 将创建一个新的 LookupResource 实例(没有 spring IOC)并尝试执行该方法。

任何帮助将不胜感激

4

1 回答 1

0

如果我为 RestServlet 添加一个 servlet 到 web.xml 并添加一个映射,比如 rest/*,那么 RestServlet 将创建一个新的 LookupResource 实例(没有 spring IOC)并尝试执行该方法。

嘿!您仍然需要将 servlet 添加到 web.xml !

Spring 集成不会取代 RestServlet。它只允许将资源定义为 Spring bean。

于 2013-11-21T10:58:40.650 回答