Skip to main content


A-Z glossary of PageSeeder concepts


A generator is a server-side component written in Java which produces an XML response from a content request. Berlioz libraries provide a number of built-in generators for common use cases.

 It must follow the ContentGenerator Java interface.

public interface ContentGenerator {

  void process(ContentRequest req, XMLWriter xml)
    throws BerliozException, IOException;


Generators can have other features, for example, cacheable.


In order for a generator to be invoked, it must be part of a service. The same generator can be used in multiple services.

In the context of a service, a generator can be given a name and a target to make it easier for XSLT templates to match.

For example:

<service id="get-user" method="get">
  <url pattern="/user/{username}"/>
  <generator name="user" target="main" class="org.example.GetUser"/>


Generators can be used to return any content.

The following examples are only used to demonstrate how to write simple generators; they aren’t meant to be used verbatim in a production environment where other aspects such as caching and error handling should be considered.

Current user

A generator could return the user currently in the session. This kind of generator would be included in most services in the app.

public void process(ContentRequest req, XMLWriter xml) throws IOException {
  HttpSession session = req.getSession();
  User user = (user)session.getAttribute("org.example.User");
  if (user != null) {

PSML document

A generator could also be used to return an XML or PSML document on the server.

public void process(ContentRequest req, XMLWriter xml) throws IOException {
  String path = req.getBerliozPath();
  File file = new File(PSML_ROOT, path+".psml");
  if (file.exists()) {
    XMLCopy.copyTo(file, xml);
Created on , last edited on