2015-02-05 4 views
1

내가 아키 타입 생성 된 프로젝트를 실행하기 위해 노력하고있어 프로젝트 때 org.apache.cxf.archetype : CXF-jaxrs 서비스실행 중 오류 수정되지 않은 원형 CXF JAX의 RS는

내가 메이븐을 생성하는 데 사용에 노력을 바람둥이 7에서 실행하십시오. 나 (기본값)에 의해 수정되지 않은 경우에도 코드를 게시했습니다.

브라우저에서 사용되는 모든 URL에서 동일한 오류가 발생합니다. 내가 빠진 것이 있습니까?

HelloWorldIT.java

import static org.junit.Assert.assertEquals; 

import java.io.InputStream; 
import java.util.ArrayList; 
import java.util.List; 

import javax.ws.rs.core.Response; 

import org.apache.cxf.helpers.IOUtils; 
import org.apache.cxf.jaxrs.client.WebClient; 
import org.codehaus.jackson.JsonParser; 
import org.codehaus.jackson.map.MappingJsonFactory; 
import org.junit.BeforeClass; 
import org.junit.Test; 

public class HelloWorldIT { 
    private static String endpointUrl; 

    @BeforeClass 
    public static void beforeClass() { 
     endpointUrl = System.getProperty("service.url"); 
    } 

    @Test 
    public void testPing() throws Exception { 
     WebClient client = WebClient.create(endpointUrl + "/hello/echo/SierraTangoNevada"); 
     Response r = client.accept("text/plain").get(); 
     assertEquals(Response.Status.OK.getStatusCode(), r.getStatus()); 
     String value = IOUtils.toString((InputStream)r.getEntity()); 
     assertEquals("SierraTangoNevada", value); 
    } 

    @Test 
    public void testJsonRoundtrip() throws Exception { 
     List<Object> providers = new ArrayList<Object>(); 
     providers.add(new org.codehaus.jackson.jaxrs.JacksonJsonProvider()); 
     JsonBean inputBean = new JsonBean(); 
     inputBean.setVal1("Maple"); 
     WebClient client = WebClient.create(endpointUrl + "/hello/jsonBean", providers); 
     Response r = client.accept("application/json") 
      .type("application/json") 
      .post(inputBean); 
     assertEquals(Response.Status.OK.getStatusCode(), r.getStatus()); 
     MappingJsonFactory factory = new MappingJsonFactory(); 
     JsonParser parser = factory.createJsonParser((InputStream)r.getEntity()); 
     JsonBean output = parser.readValueAs(JsonBean.class); 
     assertEquals("Maple", output.getVal2()); 
    } 
} 

JsonBean.java

public class JsonBean { 
    private String val1; 
    private String val2; 

    public String getVal1() { 
     return val1; 
    } 

    public void setVal1(String val1) { 
     this.val1 = val1; 
    } 

    public String getVal2() { 
     return val2; 
    } 

    public void setVal2(String val2) { 
     this.val2 = val2; 
    } 

} 

HelloWorld.java

@Path("/hello") 
public class HelloWorld { 

    @GET 
    @Path("/echo/{input}") 
    @Produces("text/plain") 
    public String ping(@PathParam("input") String input) { 
     return input; 
    } 

    @POST 
    @Produces("application/json") 
    @Consumes("application/json") 
    @Path("/jsonBean") 
    public Response modifyJson(JsonBean input) { 
     input.setVal2(input.getVal1()); 
     return Response.ok().entity(input).build(); 
    } 
} 

오류 메시지 :

javax.ws.rs.NotFoundException: HTTP 404 Not Found 
at org.apache.cxf.jaxrs.utils.SpecExceptions.toNotFoundException(SpecExceptions.java:89) 
at org.apache.cxf.jaxrs.utils.ExceptionUtils.toNotFoundException(ExceptionUtils.java:126) 
at org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.processRequest(JAXRSInInterceptor.java:169) 
at org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.handleMessage(JAXRSInInterceptor.java:77) 
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:307) 
at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121) 
at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:251) 
at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:223) 
at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:197) 
at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:149) 
at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:171) 
at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:290) 
at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractHTTPServlet.java:214) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:620) 
at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:265) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) 
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421) 
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070) 
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611) 
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
at java.lang.Thread.run(Thread.java:745) 

답변

1

바람둥이 메이븐 플러그인에 대해서는 아무 것도 모르지만 포트는 13000으로, 컨텍스트 경로는 jaxrs-service으로 설정되어 있습니다. 명령 줄에서 mvn tomcat7:run-war을 실행

, 다음 내가 단위 테스트가 intergration-test 목표로 실행하기위한 것입니다 생각

http://localhost:13000/jaxrs-service/hello/echo/Whatever 

성공적이다. 당신은

mvn integration-test 

을 실행할 수 있으며 서버를 시작해야하고 당신은 내가 위의 해결 방법 시작 - 업 포함 된 컨테이너가 아닌 실제 로컬 인스턴스 믿지 말

Tests run: 2, Failures: 0, Errors: 0, Skipped: 0 

에서 볼 수 있습니다. 로컬 인스턴스에서 앱을 실행하면 URL은

http://localhost:8080/<name-of-war>/hello/echo/Whatever 
이어야합니다.