如果unpacwar设置为false,则无法在tomcat中打开spring默认hal浏览器或jar中的任何其他资源

如果unpacwar设置为false,则无法在tomcat中打开spring默认hal浏览器或jar中的任何其他资源,spring,amazon-web-services,spring-boot,spring-data-rest,Spring,Amazon Web Services,Spring Boot,Spring Data Rest,您好,我正在使用spring data rest提供的HAL浏览器查看我的spring data rest基于HAL的api。到目前为止,当我通过eclipse运行它或作为spring boot应用程序在本地进行测试时,一切都很好。尽管当我在aws上部署tomcat容器时(作为spring boot war)当我浏览到roor或hal browser/browser/index.html的地址时,会出现如下奇怪的错误# 我仍然无法找到一个有效的理由来解释为什么它无法找到提供的hal浏览器,尽管在

您好,我正在使用spring data rest提供的HAL浏览器查看我的spring data rest基于HAL的api。到目前为止,当我通过eclipse运行它或作为spring boot应用程序在本地进行测试时,一切都很好。尽管当我在aws上部署tomcat容器时(作为spring boot war)当我浏览到roor或hal browser/browser/index.html的地址时,会出现如下奇怪的错误#

我仍然无法找到一个有效的理由来解释为什么它无法找到提供的hal浏览器,尽管在本地工作正常。我是否遗漏了一些东西,请有人帮助。这是spring framework的错误还是其他错误

更新

这似乎是一个特定于环境的问题,因为在windows环境中,我得到url文件:/。。。。在linux中,我得到了war:jar:file,由于org.springframework.util.ResourceUtils中的这个代码部分,它导致了问题

public static File getFile(URL resourceUrl, String description) throws FileNotFoundException {
    Assert.notNull(resourceUrl, "Resource URL must not be null");
    if (!URL_PROTOCOL_FILE.equals(resourceUrl.getProtocol())) {
        throw new FileNotFoundException(
                description + " cannot be resolved to absolute file path " +
                "because it does not reside in the file system: " + resourceUrl);
    }
    try {
        return new File(toURI(resourceUrl).getSchemeSpecificPart());
    }
    catch (URISyntaxException ex) {
        // Fallback for URLs that are not valid URIs (should hardly ever happen).
        return new File(resourceUrl.getFile());
    }
}

大家好,在Andy的帮助下,我们终于找到了解决办法,将unpackwar设置为true,以使HAL浏览器正常工作。目前还不确定这是否是一项授权,因此我们提出了一个问题供spring boot进一步研究。但到目前为止,设置upackwar=true还可以正常工作

更新


这在4.2.2及更高版本的spring中通过

Hi得到了修复,因此在Andy的帮助下,最终找到了解决办法,将unpackwar设置为true,以使HAL浏览器正常工作。不确定这是否是一项强制要求,因此我们提出了一个问题,让spring boot进一步研究。但到目前为止,设置upackwar=true工作正常

更新


在4.2.2及更高版本的spring中,通过

将其部署到本地Tomcat容器会发生什么?Hi@andy wilkinson在本地它工作得很好(我的意思是在Tomcat上使用oas作为windows)。另外,如果我调试了路径,路径描述为Jar url,路径为file:/C:/ebcidic/apache-tomcat-8.0.15/webapps/ROOT/WEB-INF/lib/spring-data-rest-hal-browser-2.4.0.BUILD-SNAPSHOT.Jar,它与代码一起工作,而在ec2 linux中路径类似于war:Jar:file:/deployment/war/xyz.war//WEB-INF/lib/spring-data-rest-hal-browser-2.4.0.BUILD-SNAPSHOT.jar所以war:jar引起了一个问题seems@AndyWilkinson我想Tomcat实例被配置为在部署war文件时不解压缩war文件。与HAL浏览器相关的内容,我无法从您提供的信息中看出,无法应对,因此它失败了。是@AndyWilkinson,unpackwar是假的(在ec2实例上)对于我的配置,它似乎会导致hal浏览器无法从war中找到。在本地执行相同操作会复制问题,而当我在ec2上将unpack设置为true时,则会工作:)。这是一个错误还是使用hal浏览器(或jar中的resources*html)会将unpack始终设置为true?谢谢:)如果你把它部署到一个本地的Tomcat容器中会发生什么?嗨,andy wilkinson,在本地它工作得很好(我是说在Tomcat上,oas作为windows)。另外,如果我调试了路径,路径描述为Jar url,路径为file:/C:/ebcidic/apache-tomcat-8.0.15/webapps/ROOT/WEB-INF/lib/spring-data-rest-hal-browser-2.4.0.BUILD-SNAPSHOT.Jar,它与代码一起工作,而在ec2 linux中路径类似于war:Jar:file:/deployment/war/xyz.war//WEB-INF/lib/spring-data-rest-hal-browser-2.4.0.BUILD-SNAPSHOT.jar所以war:jar引起了一个问题seems@AndyWilkinson我想Tomcat实例被配置为在部署war文件时不解压缩war文件。与HAL浏览器相关的内容,我无法从您提供的信息中看出,无法应对,因此它失败了。是@AndyWilkinson,unpackwar是假的(在ec2实例上)对于我的配置,它似乎会导致hal浏览器无法从war中找到。在本地执行相同操作会复制问题,而当我在ec2上将unpack设置为true时,则会工作:)。这是一个错误还是使用hal浏览器(或jar中的resources*html)会将unpack始终设置为true?谢谢:)
public static File getFile(URL resourceUrl, String description) throws FileNotFoundException {
    Assert.notNull(resourceUrl, "Resource URL must not be null");
    if (!URL_PROTOCOL_FILE.equals(resourceUrl.getProtocol())) {
        throw new FileNotFoundException(
                description + " cannot be resolved to absolute file path " +
                "because it does not reside in the file system: " + resourceUrl);
    }
    try {
        return new File(toURI(resourceUrl).getSchemeSpecificPart());
    }
    catch (URISyntaxException ex) {
        // Fallback for URLs that are not valid URIs (should hardly ever happen).
        return new File(resourceUrl.getFile());
    }
}