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() + "\""); } }