我正在创建一个吊索模型,该模型从文件中提取一个excel文件以在AEM组件中读取和显示数据。
@Model(
adaptables = SlingHttpServletRequest.class,
defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL
)
public class OnlineCoursesModel {
@Self
private SlingHttpServletRequest request;
@ValueMapValue
private String filePath;
private List<OnlineCourseDTO> onlineCourses;
@PostConstruct
public void init() {
AssetManager assetManager = request.getResourceResolver().adaptTo(AssetManager.class);
Asset asset = assetManager.getAsset(filePath);
/** Do Something With the Asset **/
}
}
在AEM中,它工作正常,但是当我尝试将其与WCM.io AEM模拟框架一起使用时,assetManager
返回null
。
@Test
public void checkIfFileIsRead() {
context.load().binaryFile(COURSES_EXCEL_FILE, EXCEL_RESOURCE_PATH);
context.load().json(ONLINE_COURSE_LISTING_AUTHORED, TEST_CONTENT_ROOT);
resource = context.request();
undertest = resource.adaptTo(OnlineCoursesModel.class);
System.out.println(undertest);
}
答案 0 :(得分:1)
您的测试有点太复杂了。您能尝试这个简单的版本吗?
@Test
public void checkIfFileIsRead() {
context.create().asset("/content/dam/image.jpg", 1, 1, StandardImageHandler.JPEG_MIMETYPE);
undertest = context.request().adaptTo(OnlineCoursesModel.class);
assertNotNull(undertest);
}
这将在/content/dam/image.jpg
处创建一个新资产,其宽度为1
,高度为1
,并且模仿类型为image/jpg
。
您不需要加载二进制和其他json。
附加说明
您也不需要适应请求。这被认为是不好的做法,只有在您需要仅属于请求一部分的特定信息时才应这样做。例如,有关用户发送请求的信息。
否则,请始终适应Resource.class
。
示例:
@Model(adaptables = Resource.class)
public class OnlineCoursesModel {
@OSGiService
private AssetManager assetManager;
@PostConstruct
public void init() {
Asset asset = assetManager.getAsset(filePath);
/** Do Something With the Asset **/
}
}