我正在尝试在camel路由中提供静态文件。
我的主类中的路由包含这段代码:
public final void configure() throws Exception {
// declaring camel routes
// match on uri prefix must be true when parameters are passed as part of the uri
// for example, "http://localhost/hello/rick"
// http.port is in local.properties file user-api
from("jetty:http://0.0.0.0:{{http.port}}/user/dist/?matchOnUriPrefix=true")
.process( new StaticProcessor( "help", "index.html", "dist"))
.routeId( "static");
from("jetty:http://0.0.0.0:{{http.port}}/user?matchOnUriPrefix=true")
.to("cxfbean:userService");
}
这很好用。当我点击网址:http://xxxx:8086/user/dist/index.html
时,我的索引页面会被呈现,网址会在网址栏中显示为http://xxxx:8086/user/dist/
。
但是当我重新加载页面时(按F5),网址变为:http://xxxx:8086/user/dist//
,我收到如下错误:
此页面应该已被Swagger取代。你有吗? 在你的应用程序的pom.xml中作为唯一的引用 招摇-行家-插件?
<build> <plugins> <plugin> <groupId>com.github.kongchen</groupId> <artifactId>swagger-maven-plugin</artifactId> <executions> <execution> <id>swagger</id> <phase>compile</phase> </execution> </executions> </plugin> </plugins> </build>
我在有效的POM中有这种依赖性。那我错过了什么?
我希望实现任何http://clv035sl-8947d6:8888/user/dist
的网址都应该将呼叫路由到index.html
。为什么我需要在网址末尾明确写出index.html
?
任何帮助/建议都将不胜感激。
答案 0 :(得分:3)
我制作了一个简单的JUnit测试用例,根据this blog post来测试你的场景。
StaticProcessor
课程的实施在哪里?我为这个场景实现了非常相似的东西(恕我直言):
public void configure() throws Exception {
from("jetty:http://0.0.0.0:8080/user/dist?matchOnUriPrefix=true").process(new Processor() {
public void process(Exchange exchange) throws Exception {
Message in = exchange.getIn();
String relativepath = in.getHeader(Exchange.HTTP_PATH, String.class);
String requestPath = in.getHeader("CamelServletContextPath", String.class); //CamelServletContextPath
if (relativepath.isEmpty() || relativepath.equals("/")) {
relativepath = "index.html";
}
final String formattedPath = String.format("%s/%s", requestPath, relativepath);
InputStream pathStream = this.getClass().getResourceAsStream(formattedPath);
Path path = FileSystems.getDefault().getPath(this.getClass().getResource(formattedPath).getPath());
Message out = exchange.getOut();
try {
out.setBody(IOUtils.toByteArray(pathStream));
out.setHeader(Exchange.CONTENT_TYPE, Files.probeContentType(path));
} catch (IOException e) {
out.setBody(relativepath + " not found.");
out.setHeader(Exchange.HTTP_RESPONSE_CODE, "404");
}
}
}).routeId("static");
}
从类路径中获取需要公开的资源并将out消息设置为响应。请查看整个test case。
我测试了以下网址:
请注意,我像你一样添加了swagger插件依赖项。
请告诉我这是否有助于或指出StaticProcessor
实施的位置,我可以使用它进行测试并编辑我的答案。
干杯