It looks all the issue is due to The preemptive authentication. I got a
successfull sample.
Here is my code
                    HttpHost target = new HttpHost("www.chinafgr.com",
8000, "http");
                    // Create AuthCache instance
                    AuthCache authCache = new BasicAuthCache();
                    // Generate BASIC scheme object and add it to the local
                    // auth cache
                    BasicScheme basicAuth = new BasicScheme();
                    authCache.put(target, basicAuth);

                    // Add AuthCache to the execution context
                    HttpClientContext localContext =
HttpClientContext.create();
                    localContext.setAuthCache(authCache);

                    response =
httpclient.execute(target,putMethod,localContext);

System.out.println("----------------------------------------");
                    System.out.println(response.getStatusLine());

I think it's better the mention that need peemptive anuthentication in the
doc.

thanks,Thamas.



2014-04-21 15:29 GMT+08:00 Thomas Mortagne <thomas.morta...@xwiki.com>:

> 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 <zhihu...@gmail.com> 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
> > users@xwiki.org
> > http://lists.xwiki.org/mailman/listinfo/users
>
>
>
> --
> Thomas Mortagne
> _______________________________________________
> users mailing list
> users@xwiki.org
> http://lists.xwiki.org/mailman/listinfo/users
>
_______________________________________________
users mailing list
users@xwiki.org
http://lists.xwiki.org/mailman/listinfo/users

Reply via email to