>From what I remember the difficulty was to setup preemptive
authentication (by default XWiki does not send any challenged
especially when guess has the right to access) since it's quite a pain
in HTTPClient 4.3.

You can find a REST access example (with authentication) using
HTTPClient 4.3 on
https://github.com/xwiki/xwiki-commons/blob/master/xwiki-commons-core/xwiki-commons-extension/xwiki-commons-extension-repositories/xwiki-commons-extension-repository-xwiki/src/main/java/org/xwiki/extension/repository/xwiki/internal/XWikiExtensionRepository.java#L122.
The client is created in
https://github.com/xwiki/xwiki-commons/blob/master/xwiki-commons-core/xwiki-commons-extension/xwiki-commons-extension-repositories/xwiki-commons-extension-repository-http/src/main/java/org/xwiki/extension/repository/http/internal/DefaultHttpClientFactory.java#L53.

On Mon, Apr 21, 2014 at 2:11 AM, Zhihua Zheng <[email protected]> wrote:
> Could anyone can share a exmaple of how to using httpClient 4.3 to put a
> new page int to a xwiki.
> I've tried could of times, but failed. All the examples are not with
> httpClient 4.3.
>
> I got error like 401, not authenticated, or 500,HTTP/1.1 500 Internal
> Server Error
> <html>
> <head>
>    <title>Status page</title>
> </head>
> <body style="font-family: sans-serif;">
> <p style="font-size: 1.2em;font-weight: bold;margin: 1em 0px;">Internal
> Server Error</p>
> <p>The server encountered an unexpected condition which prevented it from
> fulfilling the request</p>
> <p>You can get technical details <a href="
> http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.1";>here</a>
> .<br>
> Please continue your visit at our <a href="/">home page</a>.
> </p>
> </body>
> </html>
>
> Here is my code:
> package org.cfgr.xwiki;
>
> import java.beans.Encoder;
> import java.io.IOException;
> import java.io.InputStream;
> import java.io.StringWriter;
> import java.net.URLEncoder;
>
> import javax.xml.bind.JAXBContext;
> import javax.xml.bind.JAXBElement;
> import javax.xml.bind.JAXBException;
> import javax.xml.bind.Marshaller;
> import javax.xml.bind.Unmarshaller;
>
> import org.apache.commons.codec.
> EncoderException;
> import org.apache.commons.codec.binary.Base64;
> import org.apache.http.HttpEntity;
> import org.apache.http.auth.AuthSchemeProvider;
> import org.apache.http.auth.AuthScope;
> import org.apache.http.auth.Credentials;
> import org.apache.http.auth.UsernamePasswordCredentials;
> import org.apache.http.client.ClientProtocolException;
> import org.apache.http.client.CredentialsProvider;
> import org.apache.http.client.methods.CloseableHttpResponse;
> import org.apache.http.client.methods.HttpGet;
> import org.apache.http.client.methods.HttpPost;
> import org.apache.http.client.methods.HttpPut;
> import org.apache.http.client.protocol.HttpClientContext;
> import org.apache.http.config.Lookup;
> import org.apache.http.entity.StringEntity;
> import org.apache.http.impl.client.BasicCredentialsProvider;
> import org.apache.http.impl.client.CloseableHttpClient;
> import org.apache.http.impl.client.HttpClients;
>
> import xwiki.rest.model.jaxb.ObjectFactory;
> import xwiki.rest.model.jaxb.Page;
> import xwiki.rest.model.jaxb.PageSummary;
> import xwiki.rest.model.jaxb.Pages;
>
> public class Importer {
>     public static CloseableHttpClient getClient(String user, String pass){
>         Credentials defaultcreds = new UsernamePasswordCredentials(user,
> pass);
>         CredentialsProvider credsProvider = new BasicCredentialsProvider();
>         credsProvider.setCredentials(
>                 new AuthScope("www.chinafgr.com", 8000),
>                 new UsernamePasswordCredentials(user, pass));
>         CloseableHttpClient httpClient =  HttpClients.custom()
>                 .setDefaultCredentialsProvider(credsProvider)
>                 .build();
>
>         return httpClient;
>         }
>
>     public static HttpClientContext createContext(String user, String pass){
>         CredentialsProvider credsProvider = new BasicCredentialsProvider();
>         credsProvider.setCredentials(
>                 new AuthScope("www.chinafgr.com", 8000),
>                 new UsernamePasswordCredentials(user, pass));
>
>
>         HttpClientContext context = HttpClientContext.create();
>         context.setCredentialsProvider(credsProvider);
> //        context.setAuthSchemeRegistry(authRegistry);
> //        context.setAuthCache(authCache);
>         return context;
>     }
>
> //    public Space putPage(CloseableHttpClient httpClient, String wiki,
> String space, Page page){
> //
> //        JAXBContext context;
> //        try {
> //            context = JAXBContext.newInstance("org");
> //            Unmarshaller unmarshaller = context.createUnmarshaller();
> //            Marshaller marshaller = context.createMarshaller();
> //            String name = page.getName();
> //            name = URLEncoder.encode(name, "UTF-8");
> //            page.setName(name);
> //            page.setXwikiRelativeUrl("http://www.xwiki.org/rel/page";);
> //            HttpPut putMethod = new HttpPut("
> http://2.2.2.2:8080/xwiki/rest/wikis/"+ wiki +"/spaces/" + space +
> "/pages/" + page.getName() );
> //            putMethod.addHeader("Accept", "application/xml");
> //            putMethod.addHeader("Accept-Ranges", "bytes");
> //            Page p = new Page();
> //            p.setContent(page.getContent());
> //            p.setTitle(page.getTitle());
> //            p.setParent(page.getParent());
> //            JAXBElement<Page> jbe  = new ObjectFactory().createPage(p);
> //            StringWriter writer = new StringWriter();
> //
> //            marshaller.marshal(jbe, writer); // Fill the StringWriter
> with the page xml
> //
> //            System.out.println("WRITER = [[[[" + writer + "]]]]");
> //
> //            putMethod.setRequestEntity(new
> StringRequestEntity(writer.toString(),
> //                    "application/xml", "UTF-8"));
> //
> //            httpClient.execute(putMethod);
> //        JAXBElement obj  =  (JAXBElement)
> unmarshaller.unmarshal(putMethod.getResponseBodyAsStream());
> //        System.out.println("Return is " + obj.getValue());
> //    }
>
>     public static void main(String[] args) {
>         CloseableHttpClient httpclient = getClient("admin","admin");
>         JAXBContext context;
>         try {
>
>
>             context = JAXBContext.newInstance("xwiki.rest.model.jaxb");
>             Unmarshaller unmarshaller = context.createUnmarshaller();
>
>             HttpGet getMethod = new HttpGet("
> http://www.chinafgr.com:8000/xwiki/rest/wikis/xwiki/spaces/AppTest/pages/WebHome
> ");
>             getMethod.addHeader("Accept", "application/xml");
>             CloseableHttpResponse response = httpclient.execute(getMethod);
>             try {
>
> System.out.println("----------------------------------------");
>                 System.out.println(response.getStatusLine());
>
>                 // Get hold of the response entity
>                 HttpEntity entity = response.getEntity();
>
>                 // If the response does not enclose an entity, there is no
> need
>                 // to bother about connection release
>                 if (entity != null) {
>                     InputStream instream = entity.getContent();
>                     JAXBElement o  =  (JAXBElement)
> unmarshaller.unmarshal(instream);
>                     Page page = (Page) o.getValue();
>
>                     Marshaller marshaller = context.createMarshaller();
> //                    String name = page.getName();
> //                    name = URLEncoder.encode(name, "UTF-8");
> //                    page.setName(name);
> //                    page.setXwikiRelativeUrl("
> http://www.xwiki.org/rel/page";);
>
>
>
>                     HttpPut putMethod = new HttpPut("
> http://www.chinafgr.com:8000/xwiki/rest/wikis/xwiki/spaces/wiki/pages/"; +
> "NewPage" );
>                     putMethod.addHeader("Content-Type", "application/xml");
>                     putMethod.addHeader("Accept", "application/xml");
>                     putMethod.addHeader("Authorization", "Basic " + new
> Base64().encode("Admin:admin".getBytes()));
>
>                     Page p = new Page();
> //                    p.setContent(page.getContent());
> //                    p.setTitle(page.getTitle());
>                     p.setContent("Hello the world");
>                     p.setTitle("ThePAGE");
>                     p.setSyntax("xwiki/2.0");
>                     p.setParent(page.getParent());
>                     JAXBElement<Page> jbe  = new
> ObjectFactory().createPage(p);
>                     StringWriter writer = new StringWriter();
>
>                     marshaller.marshal(jbe, writer); // Fill the
> StringWriter with the page xml
>                     System.out.println("WRITER = [[[[" + writer + "]]]]");
>                     putMethod.setEntity(new StringEntity(writer.toString(),
>                              "application/xml", "UTF-8"));
>                     response = httpclient.execute(putMethod);
>
> System.out.println("----------------------------------------");
>                     System.out.println(response.getStatusLine());
>                    // JAXBElement obj  =  (JAXBElement)
> unmarshaller.unmarshal(response.getEntity().getContent());
>                    //System.out.println("Return is " + obj.getValue());
>                     for(;;){
>                         int c=response.getEntity().getContent().read();
>                         if(c<0)
>                             break;
>                         System.out.print((char)c);
>                     }
>                     System.out.println();
> //                    Pages page =  (Pages)unmarshaller.unmarshal(instream);
> //                    for(PageSummary ps:page.getPageSummary())
> //                        System.out.println(ps.getName());
>
>
>                 }
>             } finally {
>                 response.close();
>             }
>         } catch (JAXBException e) {
>             e.printStackTrace();
>         } catch (ClientProtocolException e) {
>             e.printStackTrace();
>         } catch (IOException e) {
>             e.printStackTrace();
>         }
>
>     }
>
> }
> _______________________________________________
> users mailing list
> [email protected]
> http://lists.xwiki.org/mailman/listinfo/users



-- 
Thomas Mortagne
_______________________________________________
users mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/users

Reply via email to