2014-03-05 2 views
0

apache camel을 사용하여 휴식 서비스를 개발하려고합니다. 내 프로젝트는 바람둥이에 배치 된 봄 MVC 전쟁입니다.Apache Camel + Spring (war) + Tomcat + REST

아파치 cxf (cxf servlet)을 사용하고 싶지 않습니다.

 public class SampleRouter extends RouteBuilder { 

      @override 
      public void configure() throws Exception { 
       from("cxfrs://http://localhost:1234/sample") 
       .process (new Processor() { 
        public void process(Exchange exchange) throws Exception { 
         System.out.println("test"); 
        } 
       })).setBody(constant("SUCCESS")); 
      } 
     } 


     @Path("/sample") 
     public class SampleResource { 

      @GET 
      public void test() { 

      } 
     } 

web.xml에는 dispatcherservlet, contextloaderlistener가 있습니다. 어노테이션 drivem 컨텍스트 :

운영자-servlet.xml 파일은 MVC 갖는 성분을 주사

 <camelContext id="server" trace="true" xmlns="http://camel.apache.org/schema/spring"> 
      <contextScan /> 
     </camelContext> 

의 pom.xml 낙 코어, 낙타 CXF, 낙타 스트림 CXF-RT-전송을 갖는다 -http-jetty, cxf-rs-frontend-jaxrs, camel-spring, spring-webmvc, spring-web, spring-context 등이 있습니다.

Tomcat은 8080에서 실행되며 서버가 시작될 때 예외가없는 것으로 보입니다. 그러나 URL (http://localhost:1234/sample)을 치려고했는데 아무 것도 일어나지 않는 것 같습니다.

내가 무엇이 누락 되었습니까? 결국 인증, 필터 및 인터셉터를 사용하여이를 스프링 DSL 또는 REST에서 REST로 Java DSL로 확장했다.

나는 또한 cxf : rsServer를 시도하고 라우터 클래스에서 이것을 언급했다.

또한 미래에는 http 대신 https를 사용해야합니까? 또는 어떻게 하드 코딩되지 않은 URL을 가지고 있습니까?

답변

0

cxfrs 엔드 포인트에서 resourceClass 옵션을 설정해야합니다. 여기에 예제가 있습니다

from("cxfrs://http://localhost:1234/sample?resourceClasses=my.pachage.SampleResource") 

camel-cxfrs component page에서 몇 가지 예를 찾을 수 있습니다.

서블릿 전송을 통해 CXF 서비스를 내보내려면 it으로 일부 작업을 수행해야합니다. 동적으로 주소를 변경하려는 경우 당신은 당신이 필요 다음 서블릿 전송을 사용하는 소모 CXF 나머지 서비스에서 낙타 경로를 시작 찾고 있다면

, 당신은 camel properties component.

+0

내가 말했듯이, 나는 CXF Servlet이나 Camel Servlet을 사용하지 않고있다. 또한 Tomcat에 배포하고 있습니다. cxf : rsServer xml config에 구성된 포트는 tomcat이 8080에서 실행되는 반면 12335입니다. 서블릿을 사용하지 않고 tomcat에 배포 할 수 있는지 확인하고 싶습니다. 또한, 내가 왜 서버보다 서비스를위한 다른 포트를 구성 할 필요가 있고 어떻게 작동 할 지 확신 할 수 없다. 또한 내가 왜 바람둥이를 사용하고 있지만 cxf-jetty jar를 포함시켜야합니까? –

+0

도움을받을 수 있습니까? –

+0

서블릿 전송을 사용하지 않고 webservce를 게시 할 수 있습니다. 이 경우 cxf-rt-http-jetty jar 파일이 클래스 경로에 있는지 확인해야합니다. –

0

에서 좀 걸릴 수 있습니다 :

  1. pom.xml을 정리하고 부두에 대한 언급을 삭제하십시오.
  2. 웹에 CXF 서블릿을 추가하십시오.XML

    <servlet> 
        <servlet-name>CXFServlet</servlet-name> 
        <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> 
        <load-on-startup>1</load-on-startup> 
    </servlet> 
    
    <!-- all our webservices are mapped under this URI pattern --> 
    <servlet-mapping> 
        <servlet-name>CXFServlet</servlet-name> 
        <url-pattern>/services/*</url-pattern> 
    </servlet-mapping> 
    
  3. 서블릿-전송 종속성 ​​추가

    :

    <import resource="classpath:META-INF/cxf/cxf.xml"/> 
    <import resource="classpath:META-INF/cxf/cxf-servlet.xml" /> 
    
    <cxf:rsServer id="rsServer" address="/restService" 
    serviceClass="com.something.test.SimpleServiceImpl" 
    loggingFeatureEnabled="true" loggingSizeLimit="20" /> 
    
  4. 이 같은이 소비자 끝점에서 경로를 구축하여 봄/낙타 구성에서

    <dependency> 
        <groupId>org.apache.cxf</groupId> 
        <artifactId>cxf-rt-transports-http</artifactId> 
        <version>${cxf-version}</version> 
    </dependency> 
    
  5. from("cxfrs:bean:rsServer?bindingStyle=SimpleConsumer") 
        .to("log:TEST?showAll=true") 
    
  6. 이제/사용하여 엔드 포인트를 (방법과 호출) 볼 수 있습니다 : 하나는 아파치 낙타 서블릿 구성 요소를 사용할 수 있습니다, http://host:port/context/services/restService?_wadl

+0

내가 언급했듯이 CXFServlet이나 CamelServlet을 사용하지 않고 바람둥이 전쟁을 전개하고자한다. –

관련 문제