Java AEM上的RESTful服务

Java AEM上的RESTful服务,java,rest,jax-ws,aem,Java,Rest,Jax Ws,Aem,我试图在AEM上公开一些RESTfull Web服务。我已按照本手册中的说明进行操作。下面是我的服务课。像/helloservice/sayhi这样的简单请求工作得很好,但是采用路径参数和查询参数(/withparameter/{userid}和/query?q=xyz&prod=abc)的方法返回404错误页面。请帮我做这个 我正在使用AEM5.6和Java7 import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs

我试图在AEM上公开一些RESTfull Web服务。我已按照本手册中的说明进行操作。下面是我的服务课。像/helloservice/sayhi这样的简单请求工作得很好,但是采用路径参数和查询参数(
/withparameter/{userid}
/query?q=xyz&prod=abc
)的方法返回404错误页面。请帮我做这个

我正在使用AEM5.6和Java7

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Service;
import com.foo.bar.service.SampleResource;

@Service
@Component(metatype=true)
@Path("/helloservice")
public class SampleResourceImpl implements SampleResource{

    @GET
    @Path("/sayhi")
    @Produces({MediaType.APPLICATION_JSON})
    public String helloWorld(){
        return "Hello World";
    }

    @GET
    @Path("/getoperation")
    @Produces({MediaType.TEXT_PLAIN})
    public String getServiceOperation(){
        return "Hello getoperation!";
    }

    @GET
    @Path("/withparameter/{userid}")
    @Produces({MediaType.TEXT_PLAIN})
    public String getWithParameter(@PathParam("userid") String userid){
        return "Path parameter : "+userid;
    }

    @GET
    @Path("/query")
    @Produces({MediaType.TEXT_PLAIN})
    public String getURLParameters(@QueryParam("q") String q, @QueryParam("prod") String prod){
        return "Query params : "+q+", "+prod;
    }

}

感谢您的帮助,谢谢

关于在基于(包括AEM)at的系统中使用JAX-RS的讨论正在进行中。从这个讨论中,我认为这是在OSGi环境中使用JAX-RS资源的一个很好的解决方案。该项目的集成测试在Sling上运行,因此它很有可能在AEM上工作。

我将参数作为querystring传递,然后使用javax.ws.rs.core中的“UriInfo”为我工作:

@GET      
@Path("/data")   
@Produces({MediaType.APPLICATION_JSON})   

public JSONArray getData(@Context UriInfo info) throws JSONException { 

    String path = info.getQueryParameters().getFirst("p");
    String nodename = info.getQueryParameters().getFirst("nn");

AEM上的某些请求路径和方法在默认情况下被阻止。转到配置上的“Apache Sling Servlet/Script Resolver and Error Handler”以允许此/服务,并转到“Apache Sling Referer Filter”以删除阻止的HTTP方法。

这是Sling体系结构的错误用法

如果您想要实现一些RESTful服务(按路径查询等),那么您需要实现特定的RESTful服务


这就是一个例子。您可能需要了解它背后的一些基本概念,但在Sling的世界中,它仍然比JAX-RS好10倍。

Cognifide已经实现了另一种称为Knot.X的解决方案。 它允许轻松编写微服务(和RESTAPI)。它是为AEM编写的,但可用于任何CMS/CRM。
信息、代码示例和文档可在此处找到:

@Bertrand,讨论进展如何?我很想知道Caravan是否是最好的方法?不,SLING-2192还没有进展,我不记得SLING开发列表上有更多的讨论。@Bertrand Delacretaz,如何测试来自postman的url?你可以像其他任何方法一样测试该url,与你想与postman一起做的其他事情相比,没有什么特别之处。默认情况下,它需要凭据,所以您需要提供这些凭据。如何从postman测试上述服务?我正在尝试访问url。但是在邮递员那里得到404