Notice: This Wiki is now read only and edits are no longer possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.
XDI4j Tutorial 6
{{#eclipseproject:technology.higgins|eclipse_custom_style.css}}
This tutorial explains how to start with an XRI like =markus/+email and work all the way through XRI Resolution and XDI Messaging.
Example Code:
import java.net.URI;
import org.eclipse.higgins.xdi4j.GraphComponent;
import org.eclipse.higgins.xdi4j.Literal;
import org.eclipse.higgins.xdi4j.addressing.Addressing;
import org.eclipse.higgins.xdi4j.io.XDIWriterRegistry;
import org.eclipse.higgins.xdi4j.messaging.Message;
import org.eclipse.higgins.xdi4j.messaging.MessageEnvelope;
import org.eclipse.higgins.xdi4j.messaging.MessageResult;
import org.eclipse.higgins.xdi4j.messaging.Operation;
import org.eclipse.higgins.xdi4j.messaging.client.XDIClient;
import org.eclipse.higgins.xdi4j.messaging.client.http.XDIHttpClient;
import org.eclipse.higgins.xdi4j.xri3.impl.XRI3;
import org.eclipse.higgins.xdi4j.xri3.impl.XRI3Segment;
import org.openxri.XRI;
import org.openxri.resolve.Resolver;
import org.openxri.resolve.ResolverFlags;
import org.openxri.resolve.ResolverState;
import org.openxri.xml.Service;
import org.openxri.xml.XRD;
public class Test {
public static void main(String[] args) throws Exception {
// we start with an XDI address in XRI 3.0 syntax
XRI3 xri3 = new XRI3("=markus/+email");
System.out.println("Will try to do an XDI $get on " + xri3.toString());
// in order to perform XRI resolution on it, we just take the first part
// and treat it like an XRI in 2.0 syntax
XRI xri2 = new XRI(xri3.getAuthority().toString());
System.out.println("Will try to resolve XRI " + xri2.toString());
// initialize the OpenXRI resolver and find the XDI endpoint associated with the XRI
Resolver resolver = new Resolver(null);
ResolverFlags resolverFlags = new ResolverFlags();
resolverFlags.setNoDefaultT(true); // we only want SEPs that really have an XDI type
ResolverState resolverState = new ResolverState();
XRD resultXrd = resolver.resolveSEPToXRD(xri2, "xri://$xdi!($v!1)", null, resolverFlags, resolverState);
if (resultXrd.getSelectedServices().getList().size() < 1)
throw new RuntimeException("No XDI endpoints found from this XRI.");
Service resultSep = (Service) resultXrd.getSelectedServices().getList().get(0);
URI xdiEndpoint = resultSep.getURIAt(0).getURI();
System.out.println("XDI endpoint found: " + xdiEndpoint.toString());
// initialize the XDI4j client with the XDI endpoint we just found
XDIClient client = new XDIHttpClient(xdiEndpoint.toString());
// prepare an XDI $get message
// we use the Addressing utility class to directly convert our
// address =markus/+email to an XDI inner graph in the $get message
MessageEnvelope messageEnvelope = MessageEnvelope.newInstance();
Message message = messageEnvelope.newMessage(new XRI3Segment("$"));
Operation operation = message.createGetOperation();
operation.createOperationGraph(Addressing.convertAddressToGraph(xri3));
System.out.println("This is the message we are going to send:");
XDIWriterRegistry.forFormat("X3 Simple").write(messageEnvelope.getGraph(), System.out, null);
// send the message
MessageResult messageResult = client.send(messageEnvelope, null);
System.out.println("This is the result we just got:");
XDIWriterRegistry.forFormat("X3 Simple").write(messageResult.getGraph(), System.out, null);
// read the literal of =markus/+email
GraphComponent[] graphComponents = Addressing.findByAddress(messageResult.getGraph(), xri3);
if (graphComponents.length < 1 || ! (graphComponents[0] instanceof Literal))
throw new RuntimeException("No literal found at address " + xri3.toString());
Literal literal = (Literal) graphComponents[0];
System.out.println("Value of " + xri3.toString() + " is \"" + literal.getData() + "\"");
}
}
