use of org.qi4j.library.rest.client.spi.ResponseHandler in project qi4j-sdk by Qi4j.
the class ContextResourceClientFactoryTest method testQueryListAndCommand.
@Test
public void testQueryListAndCommand() {
// START SNIPPET: query-list-and-command
crc.onResource(new ResultHandler<Resource>() {
@Override
public HandlerCommand handleResult(Resource result, ContextResourceClient client) {
return query("commandwithvalue");
}
}).onQuery("commandwithvalue", new ResultHandler<Links>() {
@Override
public HandlerCommand handleResult(Links result, ContextResourceClient client) {
Link link = LinksUtil.withId("right", result);
return command(link);
}
}).onCommand("commandwithvalue", new ResponseHandler() {
@Override
public HandlerCommand handleResponse(Response response, ContextResourceClient client) {
System.out.println("Done");
return null;
}
});
crc.start();
// END SNIPPET: query-list-and-command
}
use of org.qi4j.library.rest.client.spi.ResponseHandler in project qi4j-sdk by Qi4j.
the class ContextResourceClientFactoryTest method startWebServer.
@Before
public void startWebServer() throws Exception {
server = new Server(Protocol.HTTP, 8888);
ContextRestlet restlet = module.newObject(ContextRestlet.class, new org.restlet.Context());
ChallengeAuthenticator guard = new ChallengeAuthenticator(null, ChallengeScheme.HTTP_BASIC, "testRealm");
MapVerifier mapVerifier = new MapVerifier();
mapVerifier.getLocalSecrets().put("rickard", "secret".toCharArray());
guard.setVerifier(mapVerifier);
guard.setNext(restlet);
server.setNext(guard);
server.start();
// START SNIPPET: client-create1
Client client = new Client(Protocol.HTTP);
ContextResourceClientFactory contextResourceClientFactory = module.newObject(ContextResourceClientFactory.class, client);
contextResourceClientFactory.setAcceptedMediaTypes(MediaType.APPLICATION_JSON);
// END SNIPPET: client-create1
// START SNIPPET: client-create2
contextResourceClientFactory.setErrorHandler(new ErrorHandler().onError(ErrorHandler.AUTHENTICATION_REQUIRED, new ResponseHandler() {
boolean tried = false;
@Override
public HandlerCommand handleResponse(Response response, ContextResourceClient client) {
if (tried)
throw new ResourceException(response.getStatus());
tried = true;
client.getContextResourceClientFactory().getInfo().setUser(new User("rickard", "secret"));
// Try again
return refresh();
}
}).onError(ErrorHandler.RECOVERABLE_ERROR, new ResponseHandler() {
@Override
public HandlerCommand handleResponse(Response response, ContextResourceClient client) {
// Try to restart
return refresh();
}
}));
// END SNIPPET: client-create2
// START SNIPPET: client-create3
Reference ref = new Reference("http://localhost:8888/");
crc = contextResourceClientFactory.newClient(ref);
// END SNIPPET: client-create3
}
use of org.qi4j.library.rest.client.spi.ResponseHandler in project qi4j-sdk by Qi4j.
the class RssReaderTest method testReadRssFeed.
@Test
public void testReadRssFeed() {
Client client = new Client(Protocol.HTTPS);
Reference ref = new Reference("https://github.com/Qi4j/qi4j-sdk/commits/develop.atom");
ContextResourceClientFactory contextResourceClientFactory = module.newObject(ContextResourceClientFactory.class, client);
contextResourceClientFactory.registerResponseReader(new ResponseReader() {
@Override
public Object readResponse(Response response, Class<?> resultType) throws ResourceException {
if (resultType.equals(Document.class)) {
try {
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
documentBuilderFactory.setNamespaceAware(false);
return documentBuilderFactory.newDocumentBuilder().parse(response.getEntity().getStream());
} catch (Exception e) {
throw new ResourceException(e);
}
}
return null;
}
});
contextResourceClientFactory.setErrorHandler(new ErrorHandler().onError(ErrorHandler.RECOVERABLE_ERROR, new ResponseHandler() {
@Override
public HandlerCommand handleResponse(Response response, ContextResourceClient client) {
System.out.println(">> REFRESH on recoverable error: " + response.getStatus());
return refresh();
}
}));
crc = contextResourceClientFactory.newClient(ref);
crc.onResource(new ResultHandler<Document>() {
Iterator<Node> itemNodes;
@Override
public HandlerCommand handleResult(Document result, ContextResourceClient client) {
try {
final XPath xPath = XPathFactory.newInstance().newXPath();
System.out.println("== " + xPath.evaluate("feed/title", result) + " ==");
final NodeList nodes = (NodeList) xPath.evaluate("feed/entry", result, XPathConstants.NODESET);
List<Node> items = new ArrayList<Node>();
for (int i = 0; i < nodes.getLength(); i++) {
items.add(nodes.item(i));
}
itemNodes = items.iterator();
return processEntry(xPath);
} catch (XPathExpressionException e) {
throw new ResourceException(e);
}
}
private HandlerCommand processEntry(final XPath xPath) throws XPathExpressionException {
if (!itemNodes.hasNext()) {
return null;
}
Node item = itemNodes.next();
String title = xPath.evaluate("title", item);
String detailUrl = xPath.evaluate("link/@href", item);
System.out.println("-- " + title + " --");
System.out.println("-- " + detailUrl + " --");
return processEntry(xPath);
}
});
crc.start();
}
use of org.qi4j.library.rest.client.spi.ResponseHandler in project qi4j-sdk by Qi4j.
the class HandlerCommand method onSuccess.
public <T> HandlerCommand onSuccess(final ResultHandler<T> resultHandler) {
final Class<T> resultType = (Class<T>) Classes.RAW_CLASS.map(((ParameterizedType) resultHandler.getClass().getGenericInterfaces()[0]).getActualTypeArguments()[0]);
this.responseHandler = new ResponseHandler() {
@Override
public HandlerCommand handleResponse(Response response, ContextResourceClient client) {
T result = client.getContextResourceClientFactory().readResponse(response, resultType);
return resultHandler.handleResult(result, client);
}
};
return this;
}
use of org.qi4j.library.rest.client.spi.ResponseHandler in project qi4j-sdk by Qi4j.
the class ContextResourceClient method onQuery.
public <T> ContextResourceClient onQuery(String relation, final ResultHandler<T> handler) {
final Class<T> resultType = (Class<T>) Classes.RAW_CLASS.map(((ParameterizedType) handler.getClass().getGenericInterfaces()[0]).getActualTypeArguments()[0]);
queryHandlers.put(relation, new ResponseHandler() {
@Override
public HandlerCommand handleResponse(Response response, ContextResourceClient client) {
T result = contextResourceFactory.readResponse(response, resultType);
return handler.handleResult(result, client);
}
});
return this;
}
Aggregations