2017-02-21 11 views
0

Я использую Camel для интеграции Swagger. Я загрузил папку dist, переименованную в swagger и обновленную index.html, но я не могу получить доступ к ней через мой порт приложения: http://localhost: $ {port}/$ {contextPath} /swagger/index.htmlИнтеграция Swagger UI с Camel ... не удалось получить доступ к index.html на порту

, но если Я печатаю http://localhost: $ {port}/api-doc, я получаю свалку json jag.

Я могу получить доступ к index.html, если зайти в файл и открыть его вручную с помощью браузера. Как получить доступ к index.html с помощью моего порта приложения?

http://localhost: $ {порт}/$ {contextPath} /swagger/index.html

+0

вы используете файл web.xml? Если да, можете ли вы опубликовать его? – Khaled

+0

no web.xml Я использую маршрут отдыха на верблюде – McQueen

+0

Я использую Camel для интеграции Swagger. Я загрузил папку dist, переименованную в swagger и обновленную index.html, но я не могу получить доступ к ней через порт приложения: http: // localhost: $ { port}/$ { contextPath}/swagger/index.html , но если я набираю http: // localhost: $ { port}/api-doc, я получаю свалку json jag. Я могу получить доступ к index.html, если зайти в файл и открыть его вручную с помощью браузера. Как получить доступ к index.html с помощью моего порта приложения? http: // localhost: $ { port}/$ { contextPath} /swagger/index.html – McQueen

ответ

2

Вам необходимо выставить конечную точку, которая будет возвращать ваш файл index.html. Попробуйте добавить следующую строку в ваш RouteBuilder:

rest("/swagger") 
    .produces("text/html") 
    .get("/index.html") 
    .responseMessage().code(200).message("Swagger UI").endResponseMessage() 
    .to("direct://get/swagger/ui/path"); 

from("direct://get/swagger/ui/path") 
    .routeId("SwaggerUI") 
    .setBody().simple("resource:classpath:/swagger/index.html"); 

Первый маршрут определяет успокоительную конечную /swagger/index.html, который принимает запрос GET и возвращает текст/html.

На втором маршруте используется компонент Простой компонент Camel для считывания фактического index.html в Тело сообщения Exchange.

Так что если вы идете в локального хоста: $ {порт}/$ {contextPath} /swagger/index.html, он должен правильно загрузить index.html файл.

Обратите внимание, что внутри indext.html вам нужно подставить URL-адрес, который вернет дамп JSON вашего API, чтобы пользовательский интерфейс Swagger мог его отобразить.

+0

с этими изменениями, когда я перехожу на страницу swagger/index.html, она отображает «все». Как получить этот маршрут pick swagger ui, который находится внутри /resources/swagger/index.html? – McQueen

+0

Я предполагаю, что он просто создал фиктивный маршрут без ссылки на swagger ui. как я могу связать этот маршрут с чартерным кодом? Вот как я писал маршрутизатор: rest ("/ swagger/index.html") .get() .to ("direct: get/swagger/index.html"); from ("direct: //get/swagger/index.html") .routeId ("SwaggerUI") .enrich ("file: // http: // localhost: {{rest.port}}/swagger/index.html ") .convertBodyTo (String.class); – McQueen

+0

java.io.FileNotFoundException: Не удается найти ресурс: classpath: index.html в classpath для URI: classpath: index.html – McQueen

-1

Простейшее решение было бы добавить web.xml файл, переместить свои ресурсы в каталог /WebApp, добавив следующий фильтр в web.xml

<filter> 
    <filter-name>RestSwaggerCorsFilter</filter-name> 
    <filter-class>org.apache.camel.swagger.servlet.RestSwaggerCorsFilter</filter-class> 
</filter> 

<filter-mapping> 
    <filter-name>RestSwaggerCorsFilter</filter-name> 
    <url-pattern>/api-docs/*</url-pattern> 
    <url-pattern>/rest/*</url-pattern> 
</filter-mapping> 

Смотрите верблюд Документация Swagger для деталей: http://camel.apache.org/swagger-java.html

+0

Я использую Swagger в rest-dsl из той же документации. – McQueen

0

Я использую Camel Jetty как компонент REST. Для причала вам просто нужно добавить дополнительный ResourceHandler для обработки ресурсов SwaggerUI. Ниже с помощью Spring языка XML для конфигурирования REST:

<restConfiguration component="jetty" host="{{rest_hostname}}" port="{{rest_listen_port}}" 
         bindingMode="off" apiContextPath="api-docs" apiContextListing="true" 
         enableCORS="true"> 
     <!--ResourceHandler to handle Swagger UI contents on the jetty--> 
     <endpointProperty key="handlers" value="swaggerUIHandler"/> 
...... 
...... 
</restConfiguration> 

Я использую swaggerUI в банке, предоставленной webjars. Настройка обработчика боб:

<bean id="swaggerUIHandler" class="com.yifanwu.examples.camel.JettyResourceHandlerFactory" factory-method="buildResourceHandler"> 
     <!--your resource path is just "swagger" assuming it is on the classpath--> 
     <constructor-arg name="resourcePath" value="META-INF/resources/webjars"/> 
</bean> 

Bean завод:

public class JettyResourceHandlerFactory { 
    public static ResourceHandler buildResourceHandler(String resourcePath) throws Exception { 
     ResourceHandler rh = new ResourceHandler(); 
     rh.setResourceBase(JettyResourceHandlerFactory.class.getClassLoader() 
       .getResource(resourcePath) 
       .toURI().toString()); 
     return rh; 
    } 
} 

Полный пример здесь: github

Смежные вопросы