2011-04-20 2 views
0

restlet 프레임 워크를 처음 사용합니다. 나는 작은 자바 EE 애플리케이션을 생성하지만 나에게 오류를 제공 한restlet에서 "Not Found (404)"오류가 발생했습니다.

 
public class MailServerApplication extends Application { 
    @Override 
    public Restlet createInboundRoot() { 
     Router router = new Router(getContext()); 
     router.attach("http://localhost:8084/accounts/{accountId}/mails/{mailId}", MailServerResource.class); 
     return router; 
    } 
} 

//////////////////////////////// 
public class MailServerResource extends ServerResource { 
    @Override 
    protected Representation get() throws ResourceException { 

     DomRepresentation result = null; 
     try { 
     result = new DomRepresentation(); 
     result.setIndenting(true); 
     Document doc = result.getDocument(); 
     Node mailElt = doc.createElement("mail"); 
     doc.appendChild(mailElt); 
     Node statusElt = doc.createElement("status"); 
     statusElt.setTextContent("received"); 
     mailElt.appendChild(statusElt); 
     Node subjectElt = doc.createElement("subject"); 
     subjectElt.setTextContent("Message to self"); 
     mailElt.appendChild(subjectElt); 
     Node contentElt = doc.createElement("content"); 
     contentElt.setTextContent("Doh!"); 
     mailElt.appendChild(contentElt); 
     } catch (IOException e) { 
     } 
     return result; 
    } 
    @Override 
    protected Representation put(Representation representation) throws ResourceException { 
     DomRepresentation mailRep = new DomRepresentation(representation); 
     Document doc; 
     try { 
     doc = mailRep.getDocument(); 
     Element mailElt = doc.getDocumentElement(); 
     Element statusElt = (Element) mailElt 
     .getElementsByTagName("status").item(0); 
     Element subjectElt = (Element) mailElt.getElementsByTagName(
     "subject").item(0); 
     Element contentElt = (Element) mailElt.getElementsByTagName(
     "content").item(0); 
     Element accountRefElt = (Element) mailElt.getElementsByTagName(
     "accountRef").item(0); 
     System.out.println("Status: " + statusElt.getTextContent()); 
     System.out.println("Subject: " + subjectElt.getTextContent()); 
     System.out.println("Content: " + contentElt.getTextContent()); 
     System.out.println("Account URI: " + accountRefElt.getTextContent()); 
     } catch (IOException e) { 
     throw new ResourceException(e); 
     } 
     return null; 
    } 
} 

"(404) 찾을 수 없습니다"하지만 난/디버그를 실행합니다. 다음과 같은 오류가 발생합니다 :

 
Exception in thread "main" Not Found (404) - Not Found 
     at org.restlet.resource.ClientResource.handle(ClientResource.java:858) 
     at org.restlet.resource.ClientResource.handle(ClientResource.java:763) 
     at org.restlet.resource.ClientResource.get(ClientResource.java:496) 
     at MailClient.main(MailClient.java:19) 

감사합니다.

+0

이 오류는 서버 페이지를 찾을 수 없음을 의미합니다. 올바른 URL을 입력했는지, 액세스 할 수 있는지 확인하십시오. – AbdullahC

+0

액세스에 사용하는 URL은 무엇입니까? 또한, 당신의'router.attach()'콜은 아마 모든 http : // host : port를 지정해서는 안됩니다. 대신 router.attach ("/ accounts/{accountId}/mails/{mailId}")'를 사용해보십시오. –

답변

0

안녕하세요 덕분에.
실제로 문제는 URL에있었습니다.
나는이 라인에 라인

 
    router.attach("http://localhost:8084/accounts/{accountId}/mails/{mailId}", MailServerResource.class); 

다음 수정했다.

 
    router.attach("/accounts/{accountId}/mails/{mailId}", MailServerResource.class); 

JavaSE 용 restlet 프레임 워크를 사용하는 경우 첫 번째 URL은 괜찮습니다. 그러나 웹 응용 프로그램 (java ee)의 경우 서버의 상대 경로를 사용해야합니다.

귀하의 도움에 다시 한 번 감사드립니다.

0

게시 된 의견 외에도 Restlet 응용 프로그램을 어떻게 시작 했습니까? 아래와 같이, 서버 클래스를 사용 :

public class MailServerApplication extends Application { 
    (...) 
    public static void main(String[] args) { 
    try { 
     Server server = new Server(Protocol.HTTP, 8084); 
     server.setNext(new MailServerApplication()); 
     server.start(); 

     System.out.println("Press a key to stop"); 
     System.in.read(); 
    } catch(Exception ex) { 
     ex.printStackTrace(); 
    } 
    } 
} 

당신이 말했듯이, 당신은 아마 당신이 서블릿 확장자를 사용 했는가하는 JavaEE 어플 응용 프로그램을 개발? 이 경우, 서블릿 레벨에서의 맵핑도 고려 될 수 있습니다.

첫 번째 방법으로 org.restlet.jar 및 org.restlet.ext.xml.jar (버전 2.0.5, jee edition)을 사용하여 응용 프로그램을 작성했습니다. 나는 URL http://localhost:8084/accounts/10/mails/1을 사용하여 그것에 접근했다.

희망이 있으면 도움이됩니다. 티에리