2013-10-08 2 views
0

Я пытаюсь написать против json-rpc API для слияния (в java). Тем не менее, я получаю 404. Я знаю, что я получаю к серверу и аутентификации (Basic AUTH) с помощью журналов:404 для confluence json-rpc call

2013-10-08 10:48:59,586 DEBUG [http-8090-2] [atlassian.seraph.filter.BaseLoginFilter] doFilter doFilter : ____ Attempting login for : '/confluence/rpc/json-rpc/confluenceservice-v2' 
2013-10-08 10:48:59,586 DEBUG [http-8090-2] [atlassian.seraph.filter.PasswordBasedLoginFilter] login login : No user name or password was returned. No authentication attempt will be made. User may still be found via a SecurityFilter later. 
2013-10-08 10:48:59,586 DEBUG [http-8090-2] [atlassian.seraph.filter.BaseLoginFilter] doFilter doFilter : Login completed for 'null' - os_authstatus = 'null' 
2013-10-08 10:48:59,587 DEBUG [http-8090-2] [atlassian.seraph.filter.SecurityFilter] doFilter doFilter : Storing the originally requested URL (atlassian.core.seraph.original.url=/confluence/rpc/json-rpc/confluenceservice-v2) 

(это хорошо, видеть RPC вызов)

2013-10-07 16:25:22,580 DEBUG [http-8090-2] [atlassian.seraph.auth.DefaultAuthenticator] login login : 'george' has been authenticated 
2013-10-07 16:25:22,582 DEBUG [http-8090-2] [atlassian.seraph.auth.DefaultAuthenticator] authoriseUserAndEstablishSession authoriseUser : 'george' can login according to the RoleMapper 
2013-10-07 16:25:22,584 DEBUG [http-8090-2] [net.sf.hibernate.SQL] log update logininfo set CURFAILED=?, TOTALFAILED=?, SUCCESSDATE=?, PREVSUCCESSDATE=?, FAILEDDATE=?, USERNAME=? where id=? 
2013-10-07 16:25:22,586 DEBUG [http-8090-2] [atlassian.seraph.auth.DefaultAuthenticator] getUserFromBasicAuthentication getUserFromSession : Authenticated 'george' via Basic Auth 
2013-10-07 16:25:22,587 DEBUG [http-8090-2] [atlassian.seraph.filter.SecurityFilter] doFilter doFilter : Setting Auth Context to be 'george' 

Но ответ на пост в URL

http://my.confluence.host.com:8090/confluence/rpc/json-rpc/confluenceservice-v2

с телом

"{\" jsonrpc \ ": \ "2.0 \", \ "метод \": \ "getServerInfo \", \ "ID \": 12345}"

возвращается с 404.

следующая запись в журнале

2013-10-08 10:48:59,626 DEBUG [http-8090-2] [atlassian.seraph.filter.SecurityFilter] doFilter doFilter : Storing the originally requested URL (atlassian.core.seraph.original.url=/fourohfour.action) 

Плагин включен.

Спасибо за помощь!

Код:

@Test 
public void test() { 

    RestTemplate rt = new TestRestTemplate(); 

    String url = "http://my.confluence.host.com:8090/confluence/rpc/json-rpc/confluenceservice-v2"; 

    rt.getMessageConverters().add(new MappingJacksonHttpMessageConverter()); 
    rt.getMessageConverters().add(new StringHttpMessageConverter()); 
    String body = "{ \"jsonrpc\" : \"2.0\", \"method\" : \"getServerInfo\", \"id\" : 12345}"; 

    String returnValue = rt.postForObject(url, body, String.class); 
} 

private static final class TestRestTemplate extends RestTemplate { 

    @Override 
    protected ClientHttpRequest createRequest(URI url, HttpMethod method) throws IOException { 
    ClientHttpRequest request = super.createRequest(url, method); 

    String authentication = Base64.encode("george:password".getBytes()); 
    request.getHeaders().add("Authorization", "Basic " + authentication); 
    return request; 
    } 
} 

ответ

0

Оказывается, # (& * $ документации было неправильно, и причина, почему я получал 404 потому, что URL-адрес не был

http://host:port/confluence/rpc/json-rpc/confluenceservice-v2 

но

http://host:port/rpc/json-rpc/confluenceservice-v2 

Итак, я получал 404, потому что ... это был код 404. Отлично работает, кроме t Я должен был добавить заголовок типа контента для приложения/json.

Смежные вопросы