AEM::将outputstream写入响应对象

AEM::将outputstream写入响应对象,aem,sling,Aem,Sling,我正在制定一项在页面上显示PDF文档的要求。此文档以字节数组的形式从后端服务中提取。我将这个字节数组转换为outputstream,然后将其写入Servlet中的响应。Servlet从OSGi服务获取字节数组。我想知道我是否可以使用Sling模型而不是Sling Servlet。Sling模型将调用OSGi服务来获取字节数组,但我不确定接下来的步骤。我使用 @SlingObject private SlingHttpServletResponse response; 但它不会起作用。任何指导都

我正在制定一项在页面上显示PDF文档的要求。此文档以字节数组的形式从后端服务中提取。我将这个字节数组转换为outputstream,然后将其写入Servlet中的响应。Servlet从OSGi服务获取字节数组。我想知道我是否可以使用Sling模型而不是Sling Servlet。Sling模型将调用OSGi服务来获取字节数组,但我不确定接下来的步骤。我使用

@SlingObject
private SlingHttpServletResponse response;
但它不会起作用。任何指导都会有帮助

提前感谢

免责声明

在不了解您的具体需求的情况下,我建议使用servlet而不是Sling模型。Sling模型是存储库中JCR资源的表示,不能作为servlet滥用

Sling模型的生命周期与servlet不同。当servlet被实例化为OSGi服务/组件时,在大多数情况下,Sling模型可以在单个请求期间被多次实例化。因此,要意识到这种差异及其后果

也就是说,您有两个选项可以使用Sling模型将PDF写入响应:

在吊索模型的初始化过程中 当调用特定方法时 示例1:

在注入所有带注释的字段后,将调用带有@PostConstruct注释的方法,以便您可以运行初始化代码

示例2:


显然,对于第二个示例,您必须有某种代码来实例化模型并调用writePDFtoResponse。

只是为了澄清:您希望有一个使用OSGi服务获取PDF的Sling模型,然后将PDF写入响应的输出流?根据不同的需求,您可以使用Sling模型来完成,但通常类似的操作是由Servlet完成的。请您解释一下需求是什么,以及为什么您认为模型比Servlet更好?谢谢您的回复@Jens。我的要求是在点击URL时调用soap调用。SOAP调用以字节数组的形式返回PDF。我已经为SOAP调用编写了OSGi服务。在这种情况下,我会选择servlet。链接指向servlet,servlet将执行所有SOAP调用等。我不建议为此使用模型。谢谢@Jens,这也是我决定要做的。最重要的是最后一句话。吊索模型需要调用一些东西。这是一个servlet或sling组件。对于第一个,最好直接使用servlet。对于第二个,sling组件几乎肯定会在PDF之前和/或之后呈现一些额外的字节。这不是你想要的二进制文件。
@Model(adaptables = SlingHttpServletRequest.class)
public class MyModel {

    @SlingObject
    private SlingHttpServletResponse response;

    @OSGiService
    private PDFService pdfService;

    @PostConstruct
    public void init() {
        response.setContentType("application/pdf");

        [... code to write PDF to response ...]
    }
}
@Model(adaptables = SlingHttpServletRequest.class)
public class MyModel {

    @SlingObject
    private SlingHttpServletResponse response;

    @OSGiService
    private PDFService pdfService;

    public void writePDFtoResponse() {
        response.setContentType("application/pdf");

        [... code to write PDF to response ...]
    }
}