2016-12-15 4 views
1

Мне нужно реализовать простой Http-Proxy в Camel для регистрации удаленных IP-адресов входящих запросов WebService.HttpServletRequest литье не работает при запуске Camel вне Intellij

Так что у меня мой маршрут определяется:

from("jetty:http://0.0.0.0:" + 8081 + "?matchOnUriPrefix=true&optionsEnabled=true") 
    .streamCaching() 
    .process(wiresharkInboundLogger) 
    .to("jetty:http://localhost:" + 8080 + "?bridgeEndpoint=true&throwExceptionOnFailure=false"); 

И у меня есть свой процессор "wiresharkInboundLogger":

@Override 
public void process(Exchange exchange) throws Exception { 

    // HttpServletRequest 
    HttpServletRequest request = exchange.getIn().getBody(HttpServletRequest.class); 

    if (request == null) { 
    LOG.warn("No HttpServletRequest available!"); 
    } else { 
    LOG.info("Client IP: " + request.getRemoteAddr()); 
    } 
} 

Это работает как шарм при работе внутри Inttelij. Как только я запускаю идентичное приложение за пределами Intellij через консольную команду («java -jar my-camel-app.jar»), кастинг HttpServletRequest возвращает «null» при запуске по тому же запросу из интерфейса SOAP.

Я упакована банку со следующей Maven-плагин:

<plugins> 
    <plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <configuration> 
     <archive> 
     <manifest> 
      <mainClass>my.wireshark.Wireshark</mainClass> 
     </manifest> 
     </archive> 
     <descriptorRefs> 
     <descriptorRef>jar-with-dependencies</descriptorRef> 
     </descriptorRefs> 
    </configuration> 
    </plugin> 
    <plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <version>3.6.0</version> 
    <configuration> 
     <source>1.8</source> 
     <target>1.8</target> 
    </configuration> 
    </plugin> 
</plugins> 

Любые идеи, что может вызвать это странное поведение?

+0

Будьте осторожны с созданием uber JARs, так как вы можете испортить это. См. Этот FAQ: http://camel.apache.org/how-do-i-use-a-big-uber-jar.html –

+0

Переключен в maven-shade-plugin. Без изменений. Тем не менее кастинг HttpServerletRequest возвращает значение null вне Intellij. –

ответ

3

Плагин Shade должен объединять записи META-INF. Если используется не только один реестр конвертеров типов, но и все конвертеры типов.

1

Есть два возможных решений здесь:

1) Там дополнительный трансформатор требуется, чтобы создать правильный манифест:

<transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"> 
</transformer> 

2) Используйте appassembler-плагин вместо этого, но это генерирует довольно «жирные» приложения: http://www.mojohaus.org/appassembler/appassembler-maven-plugin/usage-program-scripts.html