This project serves as a client library for interacting with Fedora 4 using Java.
###Create a Fedora client
FcrepoClient client = FcrepoClient.client().build();
####Create a Fedora client with credentials
FcrepoClient client = FcrepoClient.client().credentials(username, password).build();
###CRUD
- Create a new container with RDF properties:
try (FcrepoResponse response = new PostBuilder(uri, client)
.body(turtleFile, "text/turtle")
.perform()) {
URI location = response.getLocation();
logger.debug("Container creation status and location: {}, {}", response.getStatusCode(), location);
}
- Uploaded file with checksum mismatch:
try (FcrepoResponse response = new PostBuilder(uri, client)
.body(pictureFile, "image/jpg")
.digest("checksumdoesntmatch")
.perform()) {
String errorMessage = IOUtils.toString(response.getBody(), "UTF-8");
logger.debug("Response status code and message: {}, {}", response.getStatusCode(), errorMessage);
}
- Replace triples on resource:
try (FcrepoResponse response = new PutBuilder(uri, client)
.body(turtleFile, "text/turtle")
.preferLenient()
.perform()) {
logger.debug("Response status code: {}", response.getStatusCode());
}
- Retrieving a resource in RDF+XML format:
try (FcrepoResponse response = new GetBuilder(uri, client)
.accept("application/rdf+xml")
.perform()) {
String turtleContent = IOUtils.toString(response.getBody(), "UTF-8");
}
- Retrieving a binary/Non-RDF source:
try (FcrepoResponse response = new GetBuilder(binaryUri, client)
.perform()) {
InputStream body = response.getBody();
String contentType = response.getContentType();
Map<String, String> disposition = response.getContentDisposition();
String filename = disposition.get(FedoraHeaderConstants.CONTENT_DISPOSITION_FILENAME);
String size = disposition.get(FedoraHeaderConstants.CONTENT_DISPOSITION_SIZE);
}
- Retrieving a resource with links to other resources, including/excluding specific preferences:
List<URI> includes = Arrays.asList(
URI.create("http://fedora.info/definitions/v4/repository#InboundReferences"));
List<URI> omits = Arrays.asList(
URI.create("http://www.w3.org/ns/ldp#PreferMembership"),
URI.create("http://www.w3.org/ns/ldp#PreferContainment"));
try (FcrepoResponse response = new GetBuilder(uri, client)
.preferRepresentation(includes, omits)
.perform()) {
// ...
}
- Delete a resource:
try (FcrepoResponse response = new DeleteBuilder(uri, client).perform()) {
logger.debug("Resource deletion status: {}", response.getStatusCode());
}
###Versioning
- After the first version is created on a resource, you can see a triple on the resource with predicate fedora:hasVersions like below
<fedoraurl/resource1> fedora:hasVersions <fedoraurl/resource1/fcr:versions>
- Create a version:
URI uri = URI.create("fedoraurl/fcr:versions");
try (FcrepoResponse response = new PostBuilder(uri, client)
.slug("version1")
.perform()) {
URI location = response.getLocation();
logger.debug("Version creation status and location: {}, {}", response.getStatusCode(), location);
}
- Delete a version:
URI uri = URI.create("fedoraurl/fcr:versions/version1");
try (FcrepoResponse response = new DeleteBuilder(uri, client).perform()) {
logger.debug("Version deletion status: {}", response.getStatusCode());
}
- Revert a version:
URI uri = URI.create("fedoraurl/fcr:versions/version1");
try (FcrepoResponse response = new PatchBuilder(uri, client).perform()) {
logger.debug("Version reversion status: {}", response.getStatusCode());
}
###Fixity
- Fixity only applies to Binary resources. You can see a triple on NonRdfSourceDescription with predicate fedora:hasFixityService like below
<fedoraurl/node1> fedora:hasFixityService <fedoraurl/node1/fcr:fixity>
- Fixity check:
URI uri = URI.create("fedoraurl/fcr:fixity");
try (FcrepoResponse response = new GetBuilder(uri, client).perform()) {
String turtleContent = IOUtils.toString(response.getBody(), "UTF-8");
}
###Batch atomic operations
- A triple on the repository root with predicate fedora:hasTransactionProvider defines the location of the transaction provider:
<fedoraurl/tx:transactionid/> fedora:hasTransactionProvider <fedoraurl/fcr:tx>
- Create a transaction:
URI uri = URI.create("fedoraurl/fcr:tx");
try (FcrepoResponse response = new PostBuilder(uri, client).perform()) {
URI location = response.getLocation();
logger.debug("Transaction creation status and location: {}, {}", response.getStatusCode(), location);
}
- Keep an existing transaction alive:
URI uri = URI.create("fedoraurl/tx:xxxx/fcr:tx");
try (FcrepoResponse response = new PostBuilder(uri, client).perform()) {
logger.debug("Response status: {}", response.getStatusCode());
}
- Commit a transaction:
URI uri = URI.create("fedoraurl/tx:xxxx/fcr:tx/fcr:commit");
try (FcrepoResponse response = new PostBuilder(uri, client).perform()) {
logger.debug("Transaction commit status: {}", response.getStatusCode());
}
- Rollback a transaction:
URI uri = URI.create("fedoraurl/tx:xxxx/fcr:tx/fcr:rollback");
try (FcrepoResponse response = new PostBuilder(uri, client).perform()) {
logger.debug("Transaction rollback status: {}", response.getStatusCode());
}
###Processing link headers:
try (FcrepoResponse response = new GetBuilder(uriForBinary, client).perform()) {
final List<URI> links = response.getLinkHeaders(FedoraHeaderConstants.DESCRIBED_BY);
logger.debug("'describedby' Link headers: {}", links);
}
- Container Link Headers
<http://www.w3.org/ns/ldp#Resource>;rel="type",
<http://www.w3.org/ns/ldp#Container>;rel="type",
<http://www.w3.org/ns/ldp#BasicContainer>;rel="type"
- NonRDFSource Link Headers
<http://www.w3.org/ns/ldp#Resource>;rel="type",
<http://www.w3.org/ns/ldp#NonRDFSource>;rel="type",
<http://fedoraurl/fcr:metadata>; rel="describedby"
The stateless core of this codebase was written as part of the fcrepo-camel project but has since been extracted to be an independent library so that it may be used in other applications.
You can include the fcrepo-java-client
library in your project with the following coordinates:
<dependency>
<groupId>org.fcrepo.client</groupId>
<artifactId>fcrepo-java-client</artifactId>
<version>${fcrepo-java-client.version}</version>
</dependency>
dependencies {
compile group: 'org.fcrepo.client', name: 'fcrepo-java-client', version: fcrepoJavaClientVersion
}
Current maintainers: