2014-09-03 3 views
0

임베디드 부두 및 저지를 사용하여 편안한 웹 서비스에 문제가 있습니다. 나는 ecplise 응용 프로그램의 내부에서 부두 서버를 시작하고 저지 클라이언트를 사용하여 서버와 통신하려고합니다. 부두 및 저지를 사용하여 안정적인 웹 서비스 제공 404

나는이 튜토리얼을 기반으로 RESTful 웹 서비스 구축 : http://jlunaquiroga.blogspot.se/2014/01/restful-web-services-with-jetty-and.html

내가 2.x에서 저지 1.x에서에서 자습서를 마이그레이션하는 몇 가지 문제가있었습니다을하지만 결국 내가하고 실행 웹 서버를 얻었다. 이제 문제는 클라이언트 (또는 브라우저)의 요청에 응답하지 않는다는 것입니다. 아무도 이유를 아나요?

제공자 패키지 :

package org.eclipse.eatop.jetty.helloworld.rest; 
import javax.ws.rs.GET; 
import javax.ws.rs.Path; 
import javax.ws.rs.PathParam; 
import javax.ws.rs.Produces; 
import javax.ws.rs.core.MediaType; 


@Path("/xmlServices") 
public class XMLProjectService { 
    @GET  
    @Produces(MediaType.TEXT_XML)  
    public String getProject() 
    {   
     return "<?xml version=\"1.0\"?>" + "<hello> hello world </hello>" ;  
    } 
} 

부두 임베디드 서버 :

public Object execute(ExecutionEvent event) throws ExecutionException { 
    Server server = new Server(8080);   
    ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS); 
    context.setContextPath("/"); 
    server.setHandler(context); 
    ServletHolder sh = new ServletHolder(new ServletContainer()); 
    sh.setInitOrder(1); 
    sh.setInitParameter(ServerProperties.PROVIDER_PACKAGES, "org.eclipse.eatop.jetty.helloworld.rest"); 
    context.addServlet(sh, "/*"); 

    try { 
     server.start(); 
    } catch (Exception e) { 
    System.out.println("Unable to start jetty web server"); 
    e.printStackTrace(); 
    } 
    return null; 
} 

클라이언트 :

public class Test { 
    public static void main(String[] args) { 
     Client client = ClientBuilder.newClient(); 
     WebTarget target = client.target(getBaseURI()).path("xmlServices"); 
     System.out.println(target.request("text/xml").get()); 
    } 
    private static URI getBaseURI() { 
     return UriBuilder.fromUri("http://localhost:8080/").build(); 
    } 
} 
여기

내 코드입니다

이 결과는 내가 얻을 :

InboundJaxrsResponse{ClientResponse{method=GET, uri="http://localhost:8080/xmlServices", status=404, reason=Not Found}} 
+0

나는 Jetty 9.2.0.RCO와 JavaSE-1.7 및 Jersey 2.12를 사용하고 있음을 언급해야한다. –

+0

도움이 필요한 경우 : + = [email protected] - STARTED + = org.glassfish.jersey.servlet.ServletContainer-1b05ad2 @ 3c64e64b == org.glassfish.jersey.servlet.ServletContainer, 1 , true - 시작됨 + -jersey.config.server.provider.packages = org.eclipse.eatop.jetty.helloworld.rest + - [/*]=>org.glassfish.jersey.servlet.ServletContainer-1b05ad2 + = org.eclipse.jetty.servlet.ServletHandler $ Default404Servlet-980200 @ 76a611b5 == org.eclipse.jetty.servlet.ServletHandler $ Default404Servlet, -1, false - STARTED + - [/]=>org.eclipse.jetty.servlet. ServletHandler $ Default404Servlet-980200 –

답변

0

이 변화를 시도 ...

에서 :

ServletHolder sh = new ServletHolder(new ServletContainer()); 

사람 :

ServletHolder sh = new ServletHolder(ServletContainer.class); 

그 방법 당신의 기사에 연결된 것은 그것을 사용합니다.

+0

아무런 차이가 없습니다. 그러나 어쨌든 고마워. –

0

나는이 부분에서 이틀 동안 고생했으며 rootcause가 ServletContextHandler의 lazyinitialization에 있다는 것을 알게되었습니다. 일단 부두 서버를 시작하면 귀하의 contexthandler를 시작하십시오. 그것은 잘 작동합니다.