2016-12-15 2 views
1

들어오는 WebService 요청의 원격 IP 주소를 기록하려면 Camel에서 간단한 Http-Proxy를 구현해야합니다.Intellij 외부에서 Camel을 실행하면 HttpServletRequest 캐스팅이 실패합니다.

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"이 :

그래서 난 내 경로가 정의되어 Inttelij 내부에서 실행되는 경우가 마법처럼 작동

@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()); 
    } 
} 

합니다. UI 명령 ("java -jar my-camel-app.jar")을 통해 Intellij 외부에서 동일한 응용 프로그램을 실행하자마자 HttpServletRequest의 캐스팅은 SOAP UI의 동일한 요청에 의해 트리거 될 때 "null"을 반환합니다.

<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 JAR을 만드는 데주의하십시오. 이 FAQ를 참조하십시오 : http://camel.apache.org/how-do-i-use-a-big-uber-jar.html –

+0

maven-shade-plugin으로 전환되었습니다. 변경 없음. 여전히 HttpServerletRequest의 캐스팅은 Intellij 외부에서 null을 반환합니다. –

답변

3

음영 플러그인은 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

관련 문제