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 <[email protected]>:
> 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
>
_______________________________________________
users mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/users