You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2025/04/07 07:54:05 UTC

(jena) branch main updated (181844c53f -> fa1c64b74a)

This is an automated email from the ASF dual-hosted git repository.

andy pushed a change to branch main
in repository https://gitbox.apache.org/repos/asf/jena.git


    from 181844c53f Bump vite from 6.2.4 to 6.2.5 in /jena-fuseki2/jena-fuseki-ui
     new 0b188c3798 Clean up assembler code
     new fa1c64b74a GH-3106: Prepare Fuseki config file for assemblers

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../java/org/apache/jena/query/DatasetFactory.java |   2 +-
 .../jena/rdfs/assembler/GraphRDFSAssembler.java    |   2 +-
 .../jena/sparql/core/assembler/AssemblerUtils.java | 135 +++---
 .../sparql/core/assembler/DatasetAssembler.java    |   2 +-
 .../src/main/java/tdb/cmdline/ModTDBDataset.java   |   2 +-
 .../src/main/java/tdb2/cmdline/ModTDBDataset.java  |   2 +-
 .../java/org/apache/jena/assembler/Assembler.java  |   9 +-
 .../org/apache/jena/assembler/AssemblerHelp.java   | 488 ++++++++++-----------
 .../org/apache/jena/assembler/ConstAssembler.java  |  21 +-
 .../assembler/assemblers/InfModelAssembler.java    |   9 +-
 .../org/apache/jena/ontology/OntModelSpec.java     |   2 +-
 .../org/apache/jena/rdf/model/ModelFactory.java    |   2 +-
 .../java/org/apache/jena/sys/InitJenaCore.java     |  28 +-
 .../jena/assembler/acceptance/AllAccept.java       |   4 +-
 .../jena/assembler/test/TestAssemblerGroup.java    |  58 +--
 .../assembler/test/TestBuiltinAssemblerGroup.java  |   6 +-
 .../org/apache/jena/fuseki/build/FusekiConfig.java |   7 +-
 .../apache/jena/fuseki/main/cmds/FusekiMain.java   |   5 +
 .../org/apache/jena/fuseki/mgt/ActionDatasets.java |   3 +-
 .../apache/jena/fuseki/main/TestConfigFile.java    |   9 +
 .../main/TestFusekiMainCmdCustomArguments.java     |   9 +-
 .../testing/Config/configOfModels.ttl              |  39 ++
 .../org/apache/jena/fuseki/mgt/ActionDatasets.java |   4 +-
 .../org/apache/jena/tdb2/assembler/VocabTDB2.java  |   2 +-
 .../apache/jena/query/text/assembler/Params.java   |   2 +-
 .../jena/query/text/assembler/TextAssembler.java   |  24 +-
 .../text/AbstractTestDatasetWithAnalyzer.java      |   2 +-
 .../text/TestDatasetWithLocalizedAnalyzer.java     |   2 +-
 ...TestDatasetWithLuceneMultilingualTextIndex.java |   2 +-
 .../text/TestDatasetWithLuceneStoredLiterals.java  |   2 +-
 .../query/text/TestDatasetWithLuceneTextIndex.java |   2 +-
 ...estDatasetWithLuceneTextIndexWithLangField.java |   2 +-
 .../query/text/TestDatasetWithSimpleAnalyzer.java  |   2 +-
 .../text/TestDatasetWithStandardAnalyzer.java      |   2 +-
 .../jena/query/text/TestTextDefineAnalyzers.java   |   2 +-
 .../jena/query/text/TestTextGraphIndexExtra2.java  |   2 +-
 .../jena/query/text/TestTextHighlighting.java      |   2 +-
 .../text/TestTextMultilingualEnhancements.java     |   2 +-
 .../text/TestTextMultilingualEnhancements02.java   |   2 +-
 .../text/TestTextMultipleProplistNotWorking.java   |   2 +-
 .../apache/jena/query/text/TestTextPropLists.java  |   2 +-
 .../jena/query/text/TestTextPropLists02.java       |   2 +-
 .../text/assembler/TestEntityMapAssembler.java     |  10 +-
 .../text/assembler/TestTextDatasetAssembler.java   |   8 +-
 .../assembler/TestTextIndexLuceneAssembler.java    |  16 +-
 45 files changed, 508 insertions(+), 434 deletions(-)
 create mode 100644 jena-fuseki2/jena-fuseki-main/testing/Config/configOfModels.ttl


(jena) 02/02: GH-3106: Prepare Fuseki config file for assemblers

Posted by an...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

andy pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/jena.git

commit fa1c64b74aa3ab0977e14cb8c4bc1aada0a94cae
Author: Andy Seaborne <an...@apache.org>
AuthorDate: Fri Apr 4 16:10:30 2025 +0100

    GH-3106: Prepare Fuseki config file for assemblers
---
 .../jena/sparql/core/assembler/AssemblerUtils.java | 17 ++++++++--
 .../org/apache/jena/fuseki/build/FusekiConfig.java |  5 ++-
 .../apache/jena/fuseki/main/cmds/FusekiMain.java   |  5 +++
 .../org/apache/jena/fuseki/mgt/ActionDatasets.java |  3 +-
 .../apache/jena/fuseki/main/TestConfigFile.java    |  9 +++++
 .../main/TestFusekiMainCmdCustomArguments.java     |  9 +++--
 .../testing/Config/configOfModels.ttl              | 39 ++++++++++++++++++++++
 .../org/apache/jena/fuseki/mgt/ActionDatasets.java |  4 +--
 8 files changed, 78 insertions(+), 13 deletions(-)

diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/AssemblerUtils.java b/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/AssemblerUtils.java
index b2cd64dfb3..9ebd2deda2 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/AssemblerUtils.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/AssemblerUtils.java
@@ -111,6 +111,10 @@ public class AssemblerUtils
         // assemblerAssertions.add(r, RDFS.subClassOf, JA.Object);
     }
 
+    /**
+     * Read a file and make ready for use with assemblers.
+     * It calls {@link #prepareForAssembler}.
+     */
     public static Model readAssemblerFile(String assemblerFile) {
         Model spec = null;
         try {
@@ -118,22 +122,29 @@ public class AssemblerUtils
         } catch (Exception ex) {
             throw new ARQException("Failed reading assembler description: " + ex.getMessage());
         }
-        addRegistered(spec);
+        prepareForAssembler(spec);
         return spec;
     }
 
     /** Add any extra information to the model.
      * Such information includes registration of datasets (e.g. TDB1, TDB2)
-     * done by {@link #register} ({@link #registerDataset}, {@link #registerModel}.
+     * done by {@link #register} ({@link #registerDataset}, {@link #registerModel}
+     * and adding subclass relationship used for models.
      * It avoids directly modifying {@link Assembler#general}.
      * @param model
      * @return Model The same model after modification.
      */
-    public static Model addRegistered(Model model) {
+    public static Model prepareForAssembler(Model model) {
         model.add(modelExtras);
         return model;
     }
 
+    /** @deprecated Use {@link #prepareForAssembler(Model)} */
+    @Deprecated(forRemoval = true)
+    public static Model addRegistered(Model model) {
+        return prepareForAssembler(model);
+    }
+
     public static Object build(String assemblerFile, String typeURI) {
         Resource type = ResourceFactory.createResource(typeURI);
         return build(assemblerFile, type);
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/build/FusekiConfig.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/build/FusekiConfig.java
index b6eb248204..aff8113213 100644
--- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/build/FusekiConfig.java
+++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/build/FusekiConfig.java
@@ -394,7 +394,7 @@ public class FusekiConfig {
     /**
      * Read a configuration in a model.
      * Allow dataset descriptions to be carried over from another place.
-     * Add to a list.
+     * Add the {@link DataAccessPoint} to a list.
      */
     private static void readConfiguration(Graph configuration, DatasetDescriptionMap dsDescMap, List<DataAccessPoint> dataServiceRef) {
         List<Node> services = G.nodesOfTypeAsList(configuration, FusekiVocabG.fusekiService);
@@ -666,7 +666,7 @@ public class FusekiConfig {
         endpoints.add(endpoint);
     }
 
-    @Deprecated
+    @Deprecated(forRemoval = true)
     public static Dataset getDataset(Resource datasetDesc, DatasetDescriptionMap dsDescMap) {
         DatasetGraph dsg = getDataset(datasetDesc.getModel().getGraph(), datasetDesc.asNode(), dsDescMap);
         return DatasetFactory.wrap(dsg);
@@ -688,7 +688,6 @@ public class FusekiConfig {
             throw new FusekiConfigException("No rdf:type for dataset " + displayStr(configuration, datasetDesc));
 
         // Should have been done already. e.g. ActionDatasets.execPostContainer,
-        // AssemblerUtils.readAssemblerFile < FusekiServer.parseConfigFile.
         //AssemblerUtils.addRegistered(datasetDesc.getModel());
 
         Resource r = resource(configuration, datasetDesc);
diff --git a/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/main/cmds/FusekiMain.java b/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/main/cmds/FusekiMain.java
index 1e2947dca2..015d97f9b0 100644
--- a/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/main/cmds/FusekiMain.java
+++ b/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/main/cmds/FusekiMain.java
@@ -48,6 +48,7 @@ import org.apache.jena.fuseki.validation.*;
 import org.apache.jena.query.ARQ;
 import org.apache.jena.riot.RDFDataMgr;
 import org.apache.jena.riot.RDFParser;
+import org.apache.jena.sparql.core.assembler.AssemblerUtils;
 import org.apache.jena.sys.JenaSystem;
 import org.slf4j.Logger;
 
@@ -731,8 +732,12 @@ public class FusekiMain extends CmdARQ {
                     file = file.substring("file:".length());
                 Path path = Path.of(file);
                 IOX.checkReadableFile(file, msg->new CmdException(msg));
+
                 serverArgs.datasetDescription = "Configuration: "+path.toAbsolutePath();
                 serverArgs.serverConfigModel = RDFParser.source(path).toModel();
+                // Add dataset and model declarations.
+                AssemblerUtils.prepareForAssembler(serverArgs.serverConfigModel);
+
                 // ... and perform server configuration
                 builder.parseConfig(serverArgs.serverConfigModel);
             } else {
diff --git a/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/mgt/ActionDatasets.java b/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/mgt/ActionDatasets.java
index 80eba44b6f..bc5a541c5a 100644
--- a/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/mgt/ActionDatasets.java
+++ b/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/mgt/ActionDatasets.java
@@ -151,8 +151,7 @@ public class ActionDatasets extends ActionContainerItem {
                 // Add the dataset and graph wiring for assemblers
                 Model model = ModelFactory.createDefaultModel();
                 model.add(descriptionModel);
-                // See AssemblerUtils.readAssemblerFile(String filename)
-                AssemblerUtils.addRegistered(model);
+                model = AssemblerUtils.prepareForAssembler(model);
 
                 // ----
                 // Process configuration.
diff --git a/jena-fuseki2/jena-fuseki-main/src/test/java/org/apache/jena/fuseki/main/TestConfigFile.java b/jena-fuseki2/jena-fuseki-main/src/test/java/org/apache/jena/fuseki/main/TestConfigFile.java
index 1711cb5d5a..5617b63f9d 100644
--- a/jena-fuseki2/jena-fuseki-main/src/test/java/org/apache/jena/fuseki/main/TestConfigFile.java
+++ b/jena-fuseki2/jena-fuseki-main/src/test/java/org/apache/jena/fuseki/main/TestConfigFile.java
@@ -321,6 +321,15 @@ public class TestConfigFile {
         }
     }
 
+    // GH-3106.
+    // Several types of Model.
+    // Requires that the configuration file has had the assembler registrations added correctly.
+    @Test public void setupDatasetOfModels() {
+        FusekiServer server = FusekiServer.construct("--port=0", "--conf", DIR+"configOfModels.ttl");
+        server.start();
+        server.stop();
+    }
+
     private static String NL = "\n";
 
     private void unionGraph(String fnConfig, String dbName) {
diff --git a/jena-fuseki2/jena-fuseki-main/src/test/java/org/apache/jena/fuseki/main/TestFusekiMainCmdCustomArguments.java b/jena-fuseki2/jena-fuseki-main/src/test/java/org/apache/jena/fuseki/main/TestFusekiMainCmdCustomArguments.java
index aa64bc5f77..3e5d41255a 100644
--- a/jena-fuseki2/jena-fuseki-main/src/test/java/org/apache/jena/fuseki/main/TestFusekiMainCmdCustomArguments.java
+++ b/jena-fuseki2/jena-fuseki-main/src/test/java/org/apache/jena/fuseki/main/TestFusekiMainCmdCustomArguments.java
@@ -22,8 +22,8 @@ import static org.junit.jupiter.api.Assertions.*;
 
 import java.util.function.Consumer;
 
-import org.junit.After;
 import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
 
@@ -70,13 +70,15 @@ public class TestFusekiMainCmdCustomArguments {
     @AfterAll public static void afterClass() {
         if ( level != null )
             LogCtl.setLevel(Fuseki.serverLog, level);
+        // Clear up!
     }
 
     private FusekiServer server = null;
 
-    @After public void after() {
+    @AfterEach public void after() {
         if ( server != null )
             server.stop();
+        FusekiMain.resetCustomisers();
     }
 
     @Test
@@ -139,6 +141,7 @@ public class TestFusekiMainCmdCustomArguments {
         });
         assertTrue(server.getDataAccessPointRegistry().isRegistered("/dataset"));
         assertFalse(server.getDataAccessPointRegistry().isRegistered("/ds"));
+        FusekiMain.resetCustomisers();
     }
 
     @Test
@@ -223,7 +226,7 @@ public class TestFusekiMainCmdCustomArguments {
         }
     };
 
-    // --fixed triggers replacing the comfiguration model.
+    // --fixed triggers replacing the configuration model.
     static class TestArgsCustomModelAltArg implements FusekiServerArgsCustomiser {
         final ArgDecl argDecl;
         final Model fixedModel;
diff --git a/jena-fuseki2/jena-fuseki-main/testing/Config/configOfModels.ttl b/jena-fuseki2/jena-fuseki-main/testing/Config/configOfModels.ttl
new file mode 100644
index 0000000000..ebc9cabc05
--- /dev/null
+++ b/jena-fuseki2/jena-fuseki-main/testing/Config/configOfModels.ttl
@@ -0,0 +1,39 @@
+# Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+## Fuseki Server configuration file.
+## Teh dataset has inf models that depend on TDB graph models.
+
+PREFIX :        <#>
+PREFIX fuseki:  <http://jena.apache.org/fuseki#>
+PREFIX rdf:     <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
+PREFIX rdfs:    <http://www.w3.org/2000/01/rdf-schema#>
+PREFIX ja:      <http://jena.hpl.hp.com/2005/11/Assembler#>
+PREFIX tdb2:    <http://jena.apache.org/2016/tdb#>
+PREFIX res:     <http://jena.hpl.hp.com/2003/>
+
+:serviceData rdf:type fuseki:Service ;
+    fuseki:name "Data" ;
+    fuseki:dataset :dsData ;
+    .
+
+:dsData rdf:type ja:RDFDataset ;
+  ja:defaultGraph :graphDefault ;
+  .
+
+:graphDefault rdf:type tdb2:GraphTDB2 ;
+    tdb2:dataset :ds_tdb2_Data ;
+    .
+
+:ds_tdb2_Data rdf:type tdb2:DatasetTDB2 ;
+    rdfs:label "Data TDB2 Dataset" ;
+    tdb2:location "--mem--" ;
+    .
+
+## GH-3106 - use :graphDefault interfered with dataset creation.
+:graphInfData rdf:type ja:InfModel ;
+     ja:baseModel :graphDefault ;
+     ja:reasoner [
+         rdf:type ja:Reasoner ;
+         ja:reasonerURL res:OWLMicroFBRuleReasoner
+     ];
+     .
diff --git a/jena-fuseki2/jena-fuseki-webapp/src/main/java/org/apache/jena/fuseki/mgt/ActionDatasets.java b/jena-fuseki2/jena-fuseki-webapp/src/main/java/org/apache/jena/fuseki/mgt/ActionDatasets.java
index 11019e0b72..e6fed0c5da 100644
--- a/jena-fuseki2/jena-fuseki-webapp/src/main/java/org/apache/jena/fuseki/mgt/ActionDatasets.java
+++ b/jena-fuseki2/jena-fuseki-webapp/src/main/java/org/apache/jena/fuseki/mgt/ActionDatasets.java
@@ -151,8 +151,8 @@ public class ActionDatasets extends ActionContainerItem {
 
                 Model model = ModelFactory.createDefaultModel();
                 model.add(modelData);
-                // Add the dataset and graph wiring.
-                AssemblerUtils.addRegistered(model);
+                // Add dataset and model declarations.
+                model = AssemblerUtils.prepareForAssembler(model);
 
                 // ----
                 // Process configuration.


(jena) 01/02: Clean up assembler code

Posted by an...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

andy pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/jena.git

commit 0b188c37988f78f1fa86417fdba2ff928fd50362
Author: Andy Seaborne <an...@apache.org>
AuthorDate: Thu Apr 3 09:22:49 2025 +0100

    Clean up assembler code
---
 .../java/org/apache/jena/query/DatasetFactory.java |   2 +-
 .../jena/rdfs/assembler/GraphRDFSAssembler.java    |   2 +-
 .../jena/sparql/core/assembler/AssemblerUtils.java | 120 ++---
 .../sparql/core/assembler/DatasetAssembler.java    |   2 +-
 .../src/main/java/tdb/cmdline/ModTDBDataset.java   |   2 +-
 .../src/main/java/tdb2/cmdline/ModTDBDataset.java  |   2 +-
 .../java/org/apache/jena/assembler/Assembler.java  |   9 +-
 .../org/apache/jena/assembler/AssemblerHelp.java   | 488 ++++++++++-----------
 .../org/apache/jena/assembler/ConstAssembler.java  |  21 +-
 .../assembler/assemblers/InfModelAssembler.java    |   9 +-
 .../org/apache/jena/ontology/OntModelSpec.java     |   2 +-
 .../org/apache/jena/rdf/model/ModelFactory.java    |   2 +-
 .../java/org/apache/jena/sys/InitJenaCore.java     |  28 +-
 .../jena/assembler/acceptance/AllAccept.java       |   4 +-
 .../jena/assembler/test/TestAssemblerGroup.java    |  58 +--
 .../assembler/test/TestBuiltinAssemblerGroup.java  |   6 +-
 .../org/apache/jena/fuseki/build/FusekiConfig.java |   2 +-
 .../org/apache/jena/tdb2/assembler/VocabTDB2.java  |   2 +-
 .../apache/jena/query/text/assembler/Params.java   |   2 +-
 .../jena/query/text/assembler/TextAssembler.java   |  24 +-
 .../text/AbstractTestDatasetWithAnalyzer.java      |   2 +-
 .../text/TestDatasetWithLocalizedAnalyzer.java     |   2 +-
 ...TestDatasetWithLuceneMultilingualTextIndex.java |   2 +-
 .../text/TestDatasetWithLuceneStoredLiterals.java  |   2 +-
 .../query/text/TestDatasetWithLuceneTextIndex.java |   2 +-
 ...estDatasetWithLuceneTextIndexWithLangField.java |   2 +-
 .../query/text/TestDatasetWithSimpleAnalyzer.java  |   2 +-
 .../text/TestDatasetWithStandardAnalyzer.java      |   2 +-
 .../jena/query/text/TestTextDefineAnalyzers.java   |   2 +-
 .../jena/query/text/TestTextGraphIndexExtra2.java  |   2 +-
 .../jena/query/text/TestTextHighlighting.java      |   2 +-
 .../text/TestTextMultilingualEnhancements.java     |   2 +-
 .../text/TestTextMultilingualEnhancements02.java   |   2 +-
 .../text/TestTextMultipleProplistNotWorking.java   |   2 +-
 .../apache/jena/query/text/TestTextPropLists.java  |   2 +-
 .../jena/query/text/TestTextPropLists02.java       |   2 +-
 .../text/assembler/TestEntityMapAssembler.java     |  10 +-
 .../text/assembler/TestTextDatasetAssembler.java   |   8 +-
 .../assembler/TestTextIndexLuceneAssembler.java    |  16 +-
 39 files changed, 431 insertions(+), 422 deletions(-)

diff --git a/jena-arq/src/main/java/org/apache/jena/query/DatasetFactory.java b/jena-arq/src/main/java/org/apache/jena/query/DatasetFactory.java
index 7faa7fed80..67ab1494e7 100644
--- a/jena-arq/src/main/java/org/apache/jena/query/DatasetFactory.java
+++ b/jena-arq/src/main/java/org/apache/jena/query/DatasetFactory.java
@@ -301,7 +301,7 @@ public class DatasetFactory {
      */
     public static Dataset assemble(Resource resource) {
         Objects.requireNonNull(resource, "resource can not be null") ;
-        Dataset ds = (Dataset) Assembler.general.open(resource);
+        Dataset ds = (Dataset) Assembler.general().open(resource);
         return ds;
     }
 }
diff --git a/jena-arq/src/main/java/org/apache/jena/rdfs/assembler/GraphRDFSAssembler.java b/jena-arq/src/main/java/org/apache/jena/rdfs/assembler/GraphRDFSAssembler.java
index acec3bfec5..f0869d3190 100644
--- a/jena-arq/src/main/java/org/apache/jena/rdfs/assembler/GraphRDFSAssembler.java
+++ b/jena-arq/src/main/java/org/apache/jena/rdfs/assembler/GraphRDFSAssembler.java
@@ -65,7 +65,7 @@ public class GraphRDFSAssembler extends AssemblerBase implements Assembler {
         if ( graph == null )
             throw new AssemblerException(root, "Required base graph missing: "+VocabRDFS.tGraphRDFS) ;
 
-        Model base = (Model)Assembler.general.open(graph);
+        Model base = (Model)Assembler.general().open(graph);
 
         String schemaFile = getAsStringValue(root, VocabRDFS.pRdfsSchemaFile);
         if ( schemaFile == null )
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/AssemblerUtils.java b/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/AssemblerUtils.java
index cf02882007..b2cd64dfb3 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/AssemblerUtils.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/AssemblerUtils.java
@@ -18,51 +18,55 @@
 
 package org.apache.jena.sparql.core.assembler;
 
-import org.apache.jena.assembler.Assembler ;
-import org.apache.jena.assembler.ConstAssembler ;
-import org.apache.jena.assembler.JA ;
-import org.apache.jena.assembler.assemblers.AssemblerGroup ;
+import static org.apache.jena.sparql.core.assembler.DatasetAssemblerVocab.*;
+
+import java.util.Objects;
+
+import org.apache.jena.assembler.Assembler;
+import org.apache.jena.assembler.JA;
+import org.apache.jena.assembler.assemblers.AssemblerGroup;
 import org.apache.jena.graph.Node;
 import org.apache.jena.graph.NodeFactory;
-import org.apache.jena.query.* ;
-import org.apache.jena.rdf.model.Model ;
-import org.apache.jena.rdf.model.ModelFactory ;
-import org.apache.jena.rdf.model.Resource ;
-import org.apache.jena.rdf.model.ResourceFactory ;
-import org.apache.jena.riot.RDFDataMgr ;
-import org.apache.jena.shared.PrefixMapping ;
-import org.apache.jena.sparql.ARQException ;
+import org.apache.jena.query.QueryExecution;
+import org.apache.jena.query.QuerySolution;
+import org.apache.jena.query.QuerySolutionMap;
+import org.apache.jena.query.ResultSet;
+import org.apache.jena.rdf.model.Model;
+import org.apache.jena.rdf.model.ModelFactory;
+import org.apache.jena.rdf.model.Resource;
+import org.apache.jena.rdf.model.ResourceFactory;
+import org.apache.jena.riot.RDFDataMgr;
+import org.apache.jena.shared.PrefixMapping;
+import org.apache.jena.sparql.ARQException;
 import org.apache.jena.sparql.core.DatasetGraph;
-import org.apache.jena.sparql.util.Context ;
-import org.apache.jena.sparql.util.MappingRegistry ;
-import org.apache.jena.sparql.util.Symbol ;
-import org.apache.jena.sparql.util.TypeNotUniqueException ;
-import org.apache.jena.sparql.util.graph.GraphUtils ;
-import org.apache.jena.sys.JenaSystem ;
+import org.apache.jena.sparql.util.Context;
+import org.apache.jena.sparql.util.MappingRegistry;
+import org.apache.jena.sparql.util.Symbol;
+import org.apache.jena.sparql.util.TypeNotUniqueException;
+import org.apache.jena.sparql.util.graph.GraphUtils;
+import org.apache.jena.sys.JenaSystem;
 import org.apache.jena.system.Txn;
-import org.apache.jena.vocabulary.RDFS ;
-import static org.apache.jena.sparql.core.assembler.DatasetAssemblerVocab.*;
-
-import java.util.Objects;
+import org.apache.jena.vocabulary.RDFS;
 
 public class AssemblerUtils
 {
     // Wrappers for reading things form a file - assumes one of the thing per file.
     public static PrefixMapping readPrefixMapping(String file)
     {
-        PrefixMapping pm = (PrefixMapping)AssemblerUtils.build(file, JA.PrefixMapping) ;
-        return pm ;
+        PrefixMapping pm = (PrefixMapping)AssemblerUtils.build(file, JA.PrefixMapping);
+        return pm;
     }
 
-    private static boolean initialized = false ;
+    private static boolean initialized = false;
+    private static AssemblerGroup generalAssembler = Assembler.general();
 
-    static { JenaSystem.init() ; }
+    static { JenaSystem.init(); }
 
     static public void init()
     {
         if ( initialized )
-            return ;
-        initialized = true ;
+            return;
+        initialized = true;
         registerDataset(tDataset,         new DatasetAssemblerGeneral());
         registerDataset(tDatasetOne,      new DatasetOneAssembler());
         registerDataset(tDatasetZero,     new DatasetZeroAssembler());
@@ -74,37 +78,37 @@ public class AssemblerUtils
         registerModel(tViewGraph,          new ViewGraphAssembler());
     }
 
-    private static Model modelExtras = ModelFactory.createDefaultModel() ;
+    private static Model modelExtras = ModelFactory.createDefaultModel();
 
     // Legacy. Supports assemblers using a general "rdf:type ja:dataset"
-    private static Resource datasetAssemblerType = DatasetAssemblerVocab.tDataset ;
+    private static Resource datasetAssemblerType = DatasetAssemblerVocab.tDataset;
 
     /** Register an assembler that creates a dataset */
     static public void registerDataset(Resource r, Assembler a) {
-       register(ConstAssembler.general(), r, a, datasetAssemblerType) ;
+       register(generalAssembler, r, a, datasetAssemblerType);
     }
 
     /** Register an assembler that creates a dataset */
     static public void registerModel(Resource r, Assembler a) {
-        register(ConstAssembler.general(), r, a, JA.Model) ;
+        register(generalAssembler, r, a, JA.Model);
     }
 
     /** Register an additional assembler */
     static public void register(AssemblerGroup g, Resource r, Assembler a, Resource superType) {
-        registerAssembler(g, r, a) ;
+        registerAssembler(g, r, a);
         if ( superType != null && ! superType.equals(r) ) {
             // This is called during Jena-wide initialization.
             // Use function for constant (JENA-1294)
-           modelExtras.add(r, RDFS.Init.subClassOf(), superType) ;
+           modelExtras.add(r, RDFS.Init.subClassOf(), superType);
         }
     }
 
     /** register */
     public static void registerAssembler(AssemblerGroup group, Resource r, Assembler a) {
         if ( group == null )
-            group = ConstAssembler.general();
+            group = generalAssembler;
         group.implementWith(r, a);
-        // assemblerAssertions.add(r, RDFS.subClassOf, JA.Object) ;
+        // assemblerAssertions.add(r, RDFS.subClassOf, JA.Object);
     }
 
     public static Model readAssemblerFile(String assemblerFile) {
@@ -126,18 +130,18 @@ public class AssemblerUtils
      * @return Model The same model after modification.
      */
     public static Model addRegistered(Model model) {
-        model.add(modelExtras) ;
-        return model ;
+        model.add(modelExtras);
+        return model;
     }
 
     public static Object build(String assemblerFile, String typeURI) {
-        Resource type = ResourceFactory.createResource(typeURI) ;
-        return build(assemblerFile, type) ;
+        Resource type = ResourceFactory.createResource(typeURI);
+        return build(assemblerFile, type);
     }
 
     public static Object build(String assemblerFile, Resource type) {
-        Objects.requireNonNull(assemblerFile, "No assembler file") ;
-        Model spec = readAssemblerFile(assemblerFile) ;
+        Objects.requireNonNull(assemblerFile, "No assembler file");
+        Model spec = readAssemblerFile(assemblerFile);
         return build(spec, type);
     }
 
@@ -150,13 +154,13 @@ public class AssemblerUtils
         } catch (TypeNotUniqueException ex) {
             throw new ARQException("Multiple types for: " + tDataset);
         }
-        return Assembler.general.open(root) ;
+        return generalAssembler.open(root);
     }
     /** Look for and build context declarations.
      * e.g.
      * <pre>
-     * root ... ;
-     *   ja:context [ ja:cxtName "arq:queryTimeout" ;  ja:cxtValue "10000" ] ;
+     * root ...;
+     *   ja:context [ ja:cxtName "arq:queryTimeout";  ja:cxtValue "10000" ];
      *   ...
      * </pre>
      * Short name forms of context parameters can be used.
@@ -205,30 +209,30 @@ public class AssemblerUtils
     /** Look for and merge in context declarations.
      * e.g.
      * <pre>
-     * root ... ;
-     *   ja:context [ ja:cxtName "arq:queryTimeout" ;  ja:cxtValue "10000" ] ;
+     * root ...;
+     *   ja:context [ ja:cxtName "arq:queryTimeout";  ja:cxtValue "10000" ];
      *   ...
      * </pre>
      * Short name forms of context parameters can be used.
      * Setting as string "undef" will remove the context setting.
      */
     public static void mergeContext(Resource r, Context context) {
-        String qs = "PREFIX ja: <"+JA.getURI()+">\nSELECT * { ?x ja:context [ ja:cxtName ?name ; ja:cxtValue ?value ] }" ;
-        QuerySolutionMap qsm = new QuerySolutionMap() ;
-        qsm.add("x", r) ;
+        String qs = "PREFIX ja: <"+JA.getURI()+">\nSELECT * { ?x ja:context [ ja:cxtName ?name; ja:cxtValue ?value ] }";
+        QuerySolutionMap qsm = new QuerySolutionMap();
+        qsm.add("x", r);
         QueryExecution qExec = QueryExecution.model(r.getModel()).query(qs).substitution(qsm).build();
-        ResultSet rs = qExec.execSelect() ;
+        ResultSet rs = qExec.execSelect();
         while ( rs.hasNext() )
         {
-            QuerySolution soln = rs.next() ;
-            String name = soln.getLiteral("name").getLexicalForm() ;
-            String value = soln.getLiteral("value").getLexicalForm() ;  // Works for numbers as well!
-            name = MappingRegistry.mapPrefixName(name) ;
-            Symbol symbol = Symbol.create(name) ;
+            QuerySolution soln = rs.next();
+            String name = soln.getLiteral("name").getLexicalForm();
+            String value = soln.getLiteral("value").getLexicalForm();  // Works for numbers as well!
+            name = MappingRegistry.mapPrefixName(name);
+            Symbol symbol = Symbol.create(name);
             if ( "undef".equalsIgnoreCase(value) )
-                context.remove(symbol) ;
+                context.remove(symbol);
             else
-                context.set(symbol, value) ;
+                context.set(symbol, value);
         }
     }
 }
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/DatasetAssembler.java b/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/DatasetAssembler.java
index db281ec028..4127c63113 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/DatasetAssembler.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/DatasetAssembler.java
@@ -69,7 +69,7 @@ public abstract class DatasetAssembler extends AssemblerBase implements Assemble
         Resource dataset = getResourceValue(dbAssem, pDataset) ;
         if ( dataset == null )
             throw new AssemblerException(dbAssem, "Required base dataset missing: "+dbAssem) ;
-        Dataset base = (Dataset)Assembler.general.open(dataset);
+        Dataset base = (Dataset)Assembler.general().open(dataset);
         return base.asDatasetGraph();
     }
 }
diff --git a/jena-cmds/src/main/java/tdb/cmdline/ModTDBDataset.java b/jena-cmds/src/main/java/tdb/cmdline/ModTDBDataset.java
index e756f712f6..def2048bd4 100644
--- a/jena-cmds/src/main/java/tdb/cmdline/ModTDBDataset.java
+++ b/jena-cmds/src/main/java/tdb/cmdline/ModTDBDataset.java
@@ -111,7 +111,7 @@ public class ModTDBDataset extends ModDataset {
             root = GraphUtils.findRootByType(spec, VocabTDB1.tDatasetTDB1);
         if ( root == null )
             throw new ARQException("Not found: No such type: <" + VocabTDB1.tDatasetTDB + ">");
-        return (Dataset)Assembler.general.open(root) ;
+        return (Dataset)Assembler.general().open(root) ;
     }
 
     public Location getLocation() {
diff --git a/jena-cmds/src/main/java/tdb2/cmdline/ModTDBDataset.java b/jena-cmds/src/main/java/tdb2/cmdline/ModTDBDataset.java
index 4bb79144e5..ceb59dfc9d 100644
--- a/jena-cmds/src/main/java/tdb2/cmdline/ModTDBDataset.java
+++ b/jena-cmds/src/main/java/tdb2/cmdline/ModTDBDataset.java
@@ -115,7 +115,7 @@ public class ModTDBDataset extends ModDataset {
             root = GraphUtils.findRootByType(spec, VocabTDB2.tDatasetTDB2);
         if ( root == null )
             throw new ARQException("Not found: No such type: <" + VocabTDB2.tDatasetTDB + ">");
-        return (Dataset)Assembler.general.open(root) ;
+        return (Dataset)Assembler.general().open(root) ;
     }
 
     public Location getLocation() {
diff --git a/jena-core/src/main/java/org/apache/jena/assembler/Assembler.java b/jena-core/src/main/java/org/apache/jena/assembler/Assembler.java
index 0fb60c8aec..f75ffb46a5 100644
--- a/jena-core/src/main/java/org/apache/jena/assembler/Assembler.java
+++ b/jena-core/src/main/java/org/apache/jena/assembler/Assembler.java
@@ -31,8 +31,7 @@ import org.apache.jena.rdf.model.* ;
     not an instruction.
 
 */
-public interface Assembler
-    {
+public interface Assembler {
 
     /**
         The core operation: answer a new object constructed according to the
@@ -94,5 +93,9 @@ public interface Assembler
 
     public static final Assembler documentManager = ConstAssembler.documentManager();
 
+    public static AssemblerGroup general() { return general; }
+
+    /** @deprecated use {@link #general()} */
+    @Deprecated(forRemoval = true)
     public static final AssemblerGroup general = ConstAssembler.general() ;
-    }
+}
diff --git a/jena-core/src/main/java/org/apache/jena/assembler/AssemblerHelp.java b/jena-core/src/main/java/org/apache/jena/assembler/AssemblerHelp.java
index 5b41766cb3..f9c448b53c 100644
--- a/jena-core/src/main/java/org/apache/jena/assembler/AssemblerHelp.java
+++ b/jena-core/src/main/java/org/apache/jena/assembler/AssemblerHelp.java
@@ -18,304 +18,298 @@
 
 package org.apache.jena.assembler;
 
-import java.lang.reflect.Constructor ;
-import java.lang.reflect.Method ;
-import java.util.ArrayList ;
-import java.util.HashSet ;
-import java.util.List ;
-import java.util.Set ;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
 
-import org.apache.jena.assembler.assemblers.AssemblerGroup ;
-import org.apache.jena.assembler.exceptions.AmbiguousSpecificTypeException ;
-import org.apache.jena.atlas.logging.Log ;
-import org.apache.jena.datatypes.xsd.XSDDatatype ;
-import org.apache.jena.rdf.model.* ;
-import org.apache.jena.shared.BadDescriptionMultipleRootsException ;
-import org.apache.jena.shared.BadDescriptionNoRootException ;
-import org.apache.jena.shared.JenaException ;
-import org.apache.jena.shared.PrefixMapping ;
-import org.apache.jena.vocabulary.RDF ;
-import org.apache.jena.vocabulary.RDFS ;
+import org.apache.jena.assembler.assemblers.AssemblerGroup;
+import org.apache.jena.assembler.exceptions.AmbiguousSpecificTypeException;
+import org.apache.jena.atlas.logging.Log;
+import org.apache.jena.datatypes.xsd.XSDDatatype;
+import org.apache.jena.rdf.model.*;
+import org.apache.jena.shared.BadDescriptionMultipleRootsException;
+import org.apache.jena.shared.BadDescriptionNoRootException;
+import org.apache.jena.shared.JenaException;
+import org.apache.jena.shared.PrefixMapping;
+import org.apache.jena.vocabulary.RDF;
+import org.apache.jena.vocabulary.RDFS;
 
 /**
-    AssemblerHelp provides utility methods used by, and useful for working with,
-    the Assembler code, including the methods that expand a model to include the
-    required inferences and to find the most specific type of a root in an
-    assembler specification.
-*/
-public class AssemblerHelp
-    {
+ * AssemblerHelp provides utility methods used by, and useful for working with, the
+ * Assembler code, including the methods that expand a model to include the required
+ * inferences and to find the most specific type of a root in an assembler
+ * specification.
+ */
+public class AssemblerHelp {
     /**
-        A useful constant for <code>listStatements(S, P, O)</code>. 
-    */
+     * A useful constant for <code>listStatements(S, P, O)</code>.
+     */
     protected static final Property ANY = null;
-    
+
     /**
-        Answer a Resource .equals() to <code>root</code>, but in the expanded
-        model.
-    */
-    public static Resource withFullModel( Resource root )
-        { return root.inModel( fullModel( root.getModel() ) ); }
-    
+     * Answer a Resource .equals() to <code>root</code>, but in the expanded model.
+     */
+    public static Resource withFullModel(Resource root) {
+        return root.inModel(fullModel(root.getModel()));
+    }
+
     /**
-        Answer the full model of <code>m</code>, with all its imports included and
-        with the necessary properties added from the JA schema. However, if
-        the magic footprint triple (ja:this, rdf:type, ja:Expanded) is present in the
-        model, it is returned unchanged. Imports are managed by the shared
-        <code>ImportManager.instance</code>.
-    */
-    public static Model fullModel( Model m )
-        { return fullModel( ImportManager.instance, m ); }    
-    
+     * Answer the full model of <code>m</code>, with all its imports included and
+     * with the necessary properties added from the JA schema. However, if the magic
+     * footprint triple (ja:this, rdf:type, ja:Expanded) is present in the model, it
+     * is returned unchanged. Imports are managed by the shared
+     * <code>ImportManager.instance</code>.
+     */
+    public static Model fullModel(Model m) {
+        return fullModel(ImportManager.instance, m);
+    }
+
     /**
-        Answer the full model of <code>m</code>, with all its imports included and
-        with the necessary properties added from the JA schema. However, if
-        the magic footprint triple (ja:this, rdf:type, ja:Expanded) is present in the
-        model, it is returned unchanged. Imports are managed by <code>im</code>.
-    */
-    public static Model fullModel( ImportManager im, Model m )
-        {
-        return m.contains( JA.This, RDF.type, JA.Expanded )
-            ? m
-            : (Model) ModelExpansion.withSchema( im.withImports( m ), JA.getSchema() )
-                .add( JA.This, RDF.type, JA.Expanded )
-                .setNsPrefixes( PrefixMapping.Extended )
-                .setNsPrefixes( m )
-            ;
-        }
-    
+     * Answer the full model of <code>m</code>, with all its imports included and
+     * with the necessary properties added from the JA schema. However, if the magic
+     * footprint triple (ja:this, rdf:type, ja:Expanded) is present in the model, it
+     * is returned unchanged. Imports are managed by <code>im</code>.
+     */
+    public static Model fullModel(ImportManager im, Model m) {
+        return m.contains(JA.This, RDF.type, JA.Expanded)
+            ? m : (Model)ModelExpansion.withSchema(im.withImports(m), JA.getSchema()).add(JA.This, RDF.type, JA.Expanded)
+                                       .setNsPrefixes(PrefixMapping.Extended).setNsPrefixes(m);
+    }
+
     /**
-        Load all the classes which are objects of any (t, ja:loadClass, S) 
-        statements in <code>m</code>. The order in which the classes are 
-        loaded is not specified, and loading stops immediately if any class 
-        cannot be loaded. 
-    <p>    
-        Contrast with <code>loadClasses(AssemblerGroup,Model)</code>, 
-        which loads classes and assumes that those classes are assemblers to 
-        be added to the group.
+     * Load all the classes which are objects of any (t, ja:loadClass, S) statements
+     * in <code>m</code>. The order in which the classes are loaded is not specified,
+     * and loading stops immediately if any class cannot be loaded.
+     * <p>
+     * Contrast with <code>loadClasses(AssemblerGroup,Model)</code>, which loads
+     * classes and assumes that those classes are assemblers to be added to the
+     * group.
      */
-    public static void loadArbitraryClasses( AssemblerGroup g, Model m )
-        {
-        StmtIterator it = m.listStatements( null, JA.loadClass, ANY );
-        while (it.hasNext()) loadArbitraryClass( g, it.nextStatement() );        
-        }
-    
+    public static void loadArbitraryClasses(AssemblerGroup g, Model m) {
+        StmtIterator it = m.listStatements(null, JA.loadClass, ANY);
+        while (it.hasNext())
+            loadArbitraryClass(g, it.nextStatement());
+    }
+
     /**
-         Load all the classes which are objects of any (t, ja:assembler, S) statements 
-         in <code>m</code>. <code>group.implementWIth(t,c)</code> is called
-         for each statement, where <code>c</code> is an instance of the class named
-         by <code>S</code>. The order in which the classes are loaded is not
-         specified, and loading stops immediately if any class cannot be loaded.
-    */
-    public static void loadAssemblerClasses( AssemblerGroup group, Model m )
-        {
-        StmtIterator it = m.listStatements( ANY, JA.assembler, ANY );
-        while (it.hasNext()) loadAssemblerClass( group, it.nextStatement() );
-        }
-    
+     * Load all the classes which are objects of any (t, ja:assembler, S) statements
+     * in <code>m</code>. <code>group.implementWIth(t,c)</code> is called for each
+     * statement, where <code>c</code> is an instance of the class named by
+     * <code>S</code>. The order in which the classes are loaded is not specified,
+     * and loading stops immediately if any class cannot be loaded.
+     */
+    public static void loadAssemblerClasses(AssemblerGroup group, Model m) {
+        StmtIterator it = m.listStatements(ANY, JA.assembler, ANY);
+        while (it.hasNext())
+            loadAssemblerClass(group, it.nextStatement());
+    }
+
     /**
-        Load the class named by the object of <code>s</code>, run its
-        <code>whenRequiredByAssembler</code> method if any, and
-        register an <code>implementWith</code> for the subject of
-        <code>s</code> and an instance of the class.
-    */
-    private static void loadAssemblerClass( AssemblerGroup group, Statement s )
-        {
-        Class<?> c = loadArbitraryClass( group, s );
-        runAnyAssemblerConstructor( group, s, c );
-        }
-    
+     * Load the class named by the object of <code>s</code>, run its
+     * <code>whenRequiredByAssembler</code> method if any, and register an
+     * <code>implementWith</code> for the subject of <code>s</code> and an instance
+     * of the class.
+     */
+    private static void loadAssemblerClass(AssemblerGroup group, Statement s) {
+        Class<? > c = loadArbitraryClass(group, s);
+        runAnyAssemblerConstructor(group, s, c);
+    }
+
     /**
-        Load the class named by the object of <code>s</code> if necessary.
-        If that class has a static method <code>whenRequiredByAssembler</code>
-        with an <code>AssemblerGroup</code> argument, call that method
-        passing it <code>ag</code>.
-    */
-    private static Class<?> loadArbitraryClass( AssemblerGroup ag, Statement s )
-        {
-        Class<?> loaded = loadClassNamedBy( s ); 
-        try 
-            { 
-            Method m = loaded.getDeclaredMethod( "whenRequiredByAssembler", new Class[] {AssemblerGroup.class} );
-            m.invoke( null, ag );
-            }
-        catch (NoSuchMethodException e)
-            { /* that's OK */ }
-        catch (Exception e) 
-            { throw new JenaException( e ); }       
-        return loaded;
+     * Load the class named by the object of <code>s</code> if necessary. If that
+     * class has a static method <code>whenRequiredByAssembler</code> with an
+     * <code>AssemblerGroup</code> argument, call that method passing it
+     * <code>ag</code>.
+     */
+    private static Class<? > loadArbitraryClass(AssemblerGroup ag, Statement s) {
+        Class<? > loaded = loadClassNamedBy(s);
+        try {
+            Method m = loaded.getDeclaredMethod("whenRequiredByAssembler", new Class[]{AssemblerGroup.class});
+            m.invoke(null, ag);
+        } catch (NoSuchMethodException e) { /* that's OK */ } catch (Exception e) {
+            throw new JenaException(e);
         }
-    
-    private static Class<?> loadClassNamedBy( Statement s )
-    {
-        String x = getString( s ) ;
-        // Jena2 -> Jena3 transition 
+        return loaded;
+    }
+
+    private static Class<? > loadClassNamedBy(Statement s) {
+        String x = getString(s);
+        // Jena2 -> Jena3 transition
         if ( x.startsWith("com.hp.hpl.jena") ) {
-            String x1 = x.replaceFirst("com.hp.hpl.jena", "org.apache.jena") ;
-            Log.warnOnce(AssemblerHelp.class, "ja:loadClass: Migration to Jena3: Converting "+x+" to "+x1, x) ;
-            x = x1 ;
+            String x1 = x.replaceFirst("com.hp.hpl.jena", "org.apache.jena");
+            Log.warnOnce(AssemblerHelp.class, "ja:loadClass: Migration to Jena3: Converting " + x + " to " + x1, x);
+            x = x1;
+        }
+        try {
+            return Class.forName(x);
+        } catch (Exception e) {
+            throw new JenaException(e);
         }
-        try { return Class.forName(x); }
-        catch (Exception e) { throw new JenaException( e ); }
     }
 
-    private static void runAnyAssemblerConstructor( AssemblerGroup group,  Statement s, Class<?> c )
-        {
-        try
-            {
+    private static void runAnyAssemblerConstructor(AssemblerGroup group, Statement s, Class<? > c) {
+        try {
             Resource type = s.getSubject();
-            Constructor<?> con = getResourcedConstructor( c );
-            if (con == null)
-                establish( group, type, c.getConstructor().newInstance() );
+            Constructor<? > con = getResourcedConstructor(c);
+            if ( con == null )
+                establish(group, type, c.getConstructor().newInstance());
             else
-                establish( group, type, con.newInstance( s.getSubject() ) );
-            }
-        catch (Exception e)
-            { throw new JenaException( e ); }
+                establish(group, type, con.newInstance(s.getSubject()));
+        } catch (Exception e) {
+            throw new JenaException(e);
         }
-    
-    private static void establish( AssemblerGroup group, Resource type, Object x )
-        {
-        if (x instanceof Assembler)
-            group.implementWith( type, (Assembler) x );
+    }
+
+    private static void establish(AssemblerGroup group, Resource type, Object x) {
+        if ( x instanceof Assembler )
+            group.implementWith(type, (Assembler)x);
         else
-            throw new JenaException( "constructed entity is not an Assembler: " + x );
-        }
+            throw new JenaException("constructed entity is not an Assembler: " + x);
+    }
 
-    private static Constructor<?> getResourcedConstructor( Class<?> c )
-        {
-        try { return c.getConstructor( new Class[] { Resource.class } ); }
-        catch (SecurityException e) { return null; }
-        catch (NoSuchMethodException e) { return null; }
+    private static Constructor<? > getResourcedConstructor(Class<? > c) {
+        try {
+            return c.getConstructor(new Class[]{Resource.class});
+        } catch (SecurityException e) {
+            return null;
+        } catch (NoSuchMethodException e) {
+            return null;
         }
+    }
 
     /**
-         Answer the most specific type of <code>root</code> that is a subclass of
-         ja:Object. If there are no candidate types, answer <code>givenType</code>. 
-         If there is more than one type, throw a NoSpecificTypeException.
-    */
-    public static Resource findSpecificType( Resource root )
-        { return findSpecificType( root, JA.Object ); }
+     * Answer the most specific type of <code>root</code> that is a subclass of
+     * ja:Object. If there are no candidate types, answer <code>givenType</code>. If
+     * there is more than one type, throw a NoSpecificTypeException.
+     */
+    public static Resource findSpecificType(Resource root) {
+        return findSpecificType(root, JA.Object);
+    }
 
     /**
-     	 Answer the most specific type of <code>root</code> that is a subclass of
-         <code>givenType</code>. If there are no candidate types, answer 
-         <code>givenType</code>. If there is more than one type, throw a 
-         NoSpecificTypeException.
-    */
-    public static Resource findSpecificType( Resource root, Resource baseType )
-        {
-        Set<Resource> types = findSpecificTypes( root, baseType );
-        if (types.size() == 1)
+     * Answer the most specific type of <code>root</code> that is a subclass of
+     * <code>givenType</code>. If there are no candidate types, answer
+     * <code>givenType</code>. If there is more than one type, throw a
+     * NoSpecificTypeException.
+     */
+    public static Resource findSpecificType(Resource root, Resource baseType) {
+        Set<Resource> types = findSpecificTypes(root, baseType);
+        if ( types.size() == 1 )
             return types.iterator().next();
-        if (types.size() == 0)
+        if ( types.size() == 0 )
             return baseType;
-        throw new AmbiguousSpecificTypeException( root, new ArrayList<>( types ) );
-        }
+        throw new AmbiguousSpecificTypeException(root, new ArrayList<>(types));
+    }
 
     /**
-        Answer all the types of <code>root</code> which are subtypes of
-        <code>baseType</code> and which do not have subtypes which are
-        also types of <code>root</code>.
-    */
-    public static Set<Resource> findSpecificTypes( Resource root, Resource baseType )
-        {
-        List<RDFNode> types = root.listProperties( RDF.type ).mapWith( Statement::getObject ).toList();
+     * Answer all the types of <code>root</code> which are subtypes of
+     * <code>baseType</code> and which do not have subtypes which are also types of
+     * <code>root</code>.
+     */
+    public static Set<Resource> findSpecificTypes(Resource root, Resource baseType) {
+        List<RDFNode> types = root.listProperties(RDF.type).mapWith(Statement::getObject).toList();
         Set<Resource> results = new HashSet<>();
-        for (int i = 0; i < types.size(); i += 1)
-            {
-            Resource candidate = (Resource) types.get( i );
-            if  (candidate.hasProperty( RDFS.subClassOf, baseType ))
-                if (hasNoCompetingSubclass( types, candidate )) 
-                    results.add( candidate );
-            }
-        return results;
+        for ( int i = 0 ; i < types.size() ; i += 1 ) {
+            Resource candidate = (Resource)types.get(i);
+            if ( candidate.hasProperty(RDFS.subClassOf, baseType) )
+                if ( hasNoCompetingSubclass(types, candidate) )
+                    results.add(candidate);
         }
+        return results;
+    }
 
-    private static boolean hasNoCompetingSubclass( List<RDFNode> types, Resource candidate )
-        {
-            for ( RDFNode type : types )
-            {
-                Resource other = (Resource) type;
-                if ( other.hasProperty( RDFS.subClassOf, candidate ) && !candidate.equals( other ) )
-                {
-                    return false;
-                }
+    private static boolean hasNoCompetingSubclass(List<RDFNode> types, Resource candidate) {
+        for ( RDFNode type : types ) {
+            Resource other = (Resource)type;
+            if ( other.hasProperty(RDFS.subClassOf, candidate) && !candidate.equals(other) ) {
+                return false;
             }
-        return true;
         }
+        return true;
+    }
 
     /**
-        Answer the resource that is the object of the statement <code>s</code>. If
-        the object is not a resource, throw a BadObjectException with that statement.
-    */
-    public static Resource getResource( Statement s )
-        {
+     * Answer the resource that is the object of the statement <code>s</code>. If the
+     * object is not a resource, throw a BadObjectException with that statement.
+     */
+    public static Resource getResource(Statement s) {
         RDFNode ob = s.getObject();
-        if (ob.isLiteral()) throw new BadObjectException( s );
-        return (Resource) ob;
-        }
+        if ( ob.isLiteral() )
+            throw new BadObjectException(s);
+        return (Resource)ob;
+    }
 
     /**
-        Answer the plain string object of the statement <code>s</code>. If the
-        object is not a string literal, throw a BadObjectException with that statement.
-    */
-    public static String getString( Statement s )
-        {
+     * Answer the plain string object of the statement <code>s</code>. If the object
+     * is not a string literal, throw a BadObjectException with that statement.
+     */
+    public static String getString(Statement s) {
         RDFNode ob = s.getObject();
-        if (ob.isResource()) throw new BadObjectException( s );
-        Literal L = (Literal) ob;
-        if (!L.getLanguage().equals( "" )) throw new BadObjectException( s );
-        if (L.getDatatype() == null) return L.getLexicalForm();
-        if (L.getDatatype() == XSDDatatype.XSDstring) return L.getLexicalForm();
-        throw new BadObjectException( s );
-        }
+        if ( ob.isResource() )
+            throw new BadObjectException(s);
+        Literal L = (Literal)ob;
+        if ( !L.getLanguage().equals("") )
+            throw new BadObjectException(s);
+        if ( L.getDatatype() == null )
+            return L.getLexicalForm();
+        if ( L.getDatatype() == XSDDatatype.XSDstring )
+            return L.getLexicalForm();
+        throw new BadObjectException(s);
+    }
 
     /**
-        Answer the String value of the literal <code>L</code>, which is the
-        object of the Statement <code>s</code>. If the literal is not an
-        XSD String or a plain string without a language code, throw a
-        BadObjectException.
-    */
-    public static String getString( Statement s, Literal L )
-        {
-        if (!L.getLanguage().equals( "" )) throw new BadObjectException( s );
-        if (L.getDatatype() == null) return L.getLexicalForm();
-        if (L.getDatatype() == XSDDatatype.XSDstring) return L.getLexicalForm();
-        throw new BadObjectException( s );
-        }
+     * Answer the String value of the literal <code>L</code>, which is the object of
+     * the Statement <code>s</code>. If the literal is not an XSD String or a plain
+     * string without a language code, throw a BadObjectException.
+     */
+    public static String getString(Statement s, Literal L) {
+        if ( !L.getLanguage().equals("") )
+            throw new BadObjectException(s);
+        if ( L.getDatatype() == null )
+            return L.getLexicalForm();
+        if ( L.getDatatype() == XSDDatatype.XSDstring )
+            return L.getLexicalForm();
+        throw new BadObjectException(s);
+    }
 
     /**
-        Answer a Set of the ja:Object resources in the full expansion of
-        the assembler specification model <code>model</code>.
-    */
-    public static Set<Resource> findAssemblerRoots( Model model )
-        { return findAssemblerRoots( model, JA.Object ); }
+     * Answer a Set of the ja:Object resources in the full expansion of the assembler
+     * specification model <code>model</code>.
+     */
+    public static Set<Resource> findAssemblerRoots(Model model) {
+        return findAssemblerRoots(model, JA.Object);
+    }
 
     /**
-        Answer a Set of the objects in the full expansion of the assembler
-        specification <code>model</code> which have rdf:type <code>type</code>,
-        which <i>must</i> be a subtype of <code>ja:Object</code>.
-    */
-    public static Set<Resource> findAssemblerRoots( Model model, Resource type )
-        { return fullModel( model ).listResourcesWithProperty( RDF.type, type ).toSet(); }
+     * Answer a Set of the objects in the full expansion of the assembler
+     * specification <code>model</code> which have rdf:type <code>type</code>, which
+     * <i>must</i> be a subtype of <code>ja:Object</code>.
+     */
+    public static Set<Resource> findAssemblerRoots(Model model, Resource type) {
+        return fullModel(model).listResourcesWithProperty(RDF.type, type).toSet();
+    }
 
     /**
-         Answer the single resource in <code>singleRoot</code> of type
-         <code>ja:Model</code>. Otherwise throw an exception.
-    */
-    public static Resource singleModelRoot( Model singleRoot )
-        { return singleRoot( singleRoot, JA.Model ); }
+     * Answer the single resource in <code>singleRoot</code> of type
+     * <code>ja:Model</code>. Otherwise throw an exception.
+     */
+    public static Resource singleModelRoot(Model singleRoot) {
+        return singleRoot(singleRoot, JA.Model);
+    }
 
     /**
-     	Answer the single resource in <code>singleRoot</code> of type
-         <code>type</code>. Otherwise throw an exception.
-    */
-    public static Resource singleRoot( Model singleRoot, Resource type )
-        {
-        Set<Resource> roots = findAssemblerRoots( singleRoot, type );
-        if (roots.size() == 1) return roots.iterator().next();
-        if (roots.size() == 0) throw new BadDescriptionNoRootException( singleRoot, type );
-        throw new BadDescriptionMultipleRootsException( singleRoot, type );
-        }
+     * Answer the single resource in <code>singleRoot</code> of type
+     * <code>type</code>. Otherwise throw an exception.
+     */
+    public static Resource singleRoot(Model singleRoot, Resource type) {
+        Set<Resource> roots = findAssemblerRoots(singleRoot, type);
+        if ( roots.size() == 1 )
+            return roots.iterator().next();
+        if ( roots.size() == 0 )
+            throw new BadDescriptionNoRootException(singleRoot, type);
+        throw new BadDescriptionMultipleRootsException(singleRoot, type);
     }
+}
diff --git a/jena-core/src/main/java/org/apache/jena/assembler/ConstAssembler.java b/jena-core/src/main/java/org/apache/jena/assembler/ConstAssembler.java
index deee4010a2..08ef4001f9 100644
--- a/jena-core/src/main/java/org/apache/jena/assembler/ConstAssembler.java
+++ b/jena-core/src/main/java/org/apache/jena/assembler/ConstAssembler.java
@@ -21,16 +21,16 @@ package org.apache.jena.assembler;
 import org.apache.jena.assembler.assemblers.* ;
 
 /*
-   Assembler initialization - so it works when inside class initialization processes.
+   Assembler initialization.
    Assembler is an interface and constants are statics (implicitly or explicitly final)
    which makes controlling order tricky.
 
-   Solution: initialization code (ie. inside jenaSystem.init) must use teh methods here,
+   Solution: initialization code (ie. inside jenaSystem.init) must use the methods here,
    and not Assembler.constant.
 
-   Use ConstAssembler.general(), not Assembler.general.
+   Use ConstAssembler.general(), not Assembler.general().
 */
-public class ConstAssembler
+/*package*/ class ConstAssembler
 {
     private static Assembler defaultModel = null ;
 	public static Assembler defaultModel() {
@@ -109,10 +109,9 @@ public class ConstAssembler
 		return documentManager ;
 	}
 
-    private static AssemblerGroup general = null ;
-    public  static AssemblerGroup general() {
-        if ( general == null ) {
-            general =  AssemblerGroup.create()
+    private static AssemblerGroup general = makeGeneral();
+    private static AssemblerGroup makeGeneral() {
+        return AssemblerGroup.create()
                 .implementWith( JA.DefaultModel, defaultModel() )
                 .implementWith( JA.MemoryModel, memoryModel() )
                 .implementWith( JA.InfModel, infModel() )
@@ -127,7 +126,11 @@ public class ConstAssembler
                 .implementWith( JA.RuleSet, ruleSet() )
                 .implementWith( JA.DocumentManager, documentManager() )
                 ;
-        }
+    }
+
+    public static AssemblerGroup general() {
         return general ;
     }
+
+    static void init() {}
 }
diff --git a/jena-core/src/main/java/org/apache/jena/assembler/assemblers/InfModelAssembler.java b/jena-core/src/main/java/org/apache/jena/assembler/assemblers/InfModelAssembler.java
index e483e4a4f0..d43ccda81b 100644
--- a/jena-core/src/main/java/org/apache/jena/assembler/assemblers/InfModelAssembler.java
+++ b/jena-core/src/main/java/org/apache/jena/assembler/assemblers/InfModelAssembler.java
@@ -26,6 +26,9 @@ import org.apache.jena.reasoner.rulesys.GenericRuleReasonerFactory ;
 
 public class InfModelAssembler extends ModelAssembler
     {
+
+    public InfModelAssembler() {}
+
     @Override
     protected Model openEmptyModel( Assembler a, Resource root, Mode mode )
         {
@@ -44,13 +47,13 @@ public class InfModelAssembler extends ModelAssembler
 
     protected Reasoner getReasoner( Assembler a, Resource root )
         { return getReasonerFactory( a, root ).create( root ); }
-    
+
     protected ReasonerFactory getReasonerFactory( Assembler a, Resource root )
-        { 
+        {
         Resource factory = getUniqueResource( root, JA.reasoner );
         return factory == null
             ? GenericRuleReasonerFactory.theInstance()
             : (ReasonerFactory) a.open( factory )
-            ;        
+            ;
         }
     }
diff --git a/jena-core/src/main/java/org/apache/jena/ontology/OntModelSpec.java b/jena-core/src/main/java/org/apache/jena/ontology/OntModelSpec.java
index fc595a46d1..f06a1fe72a 100644
--- a/jena-core/src/main/java/org/apache/jena/ontology/OntModelSpec.java
+++ b/jena-core/src/main/java/org/apache/jena/ontology/OntModelSpec.java
@@ -281,7 +281,7 @@ public class OntModelSpec {
     */
     public static OntModelSpec assemble( Resource root )
         {
-        Object assembled = Assembler.general.open( root );
+        Object assembled = Assembler.general().open( root );
         if (!(assembled instanceof OntModelSpec))
             throw new JenaException( "assemble: expected an OntModelSpec, but got a " + assembled.getClass().getName() );
         return (OntModelSpec) assembled;
diff --git a/jena-core/src/main/java/org/apache/jena/rdf/model/ModelFactory.java b/jena-core/src/main/java/org/apache/jena/rdf/model/ModelFactory.java
index af03920bac..29d7bf7aa0 100644
--- a/jena-core/src/main/java/org/apache/jena/rdf/model/ModelFactory.java
+++ b/jena-core/src/main/java/org/apache/jena/rdf/model/ModelFactory.java
@@ -85,7 +85,7 @@ public class ModelFactory extends ModelFactoryBase
         is the prefix of Jena Assembler objects.
     */
     public static Model assembleModelFrom(Resource root) {
-        return Assembler.general.openModel(root);
+        return Assembler.general().openModel(root);
     }
 
     /**
diff --git a/jena-core/src/main/java/org/apache/jena/sys/InitJenaCore.java b/jena-core/src/main/java/org/apache/jena/sys/InitJenaCore.java
index e3f65d94c8..8a8add8130 100644
--- a/jena-core/src/main/java/org/apache/jena/sys/InitJenaCore.java
+++ b/jena-core/src/main/java/org/apache/jena/sys/InitJenaCore.java
@@ -18,18 +18,19 @@
 
 package org.apache.jena.sys;
 
+import org.apache.jena.assembler.Assembler;
 import org.apache.jena.irix.SystemIRIx;
 import org.apache.jena.vocabulary.OWL;
 import org.apache.jena.vocabulary.RDF;
 import org.apache.jena.vocabulary.RDFS;
 
 public class InitJenaCore  implements JenaSubsystemLifecycle {
-    private static volatile boolean initialized = false ;
-    private static Object           initLock    = new Object() ;
+    private static volatile boolean initialized = false;
+    private static Object           initLock    = new Object();
 
     @Override
     public void start() {
-        init() ;
+        init();
     }
 
     @Override
@@ -37,29 +38,30 @@ public class InitJenaCore  implements JenaSubsystemLifecycle {
 
     @Override
     public int level() {
-        return 10 ;
+        return 10;
     }
 
     public static void init() {
         if ( initialized )
-            return ;
+            return;
         synchronized (initLock) {
             if ( initialized ) {
-                JenaSystem.logLifecycle("JenaCore.init - skip") ;
-                return ;
+                JenaSystem.logLifecycle("JenaCore.init - skip");
+                return;
             }
-            initialized = true ;
-            JenaSystem.logLifecycle("JenaCore.init - start") ;
+            initialized = true;
+            JenaSystem.logLifecycle("JenaCore.init - start");
 
             // Initialization
             SystemIRIx.init();
             // Touch classes with constants.
             // This isn't necessary but it makes it more deterministic.
             // These constants are reused in various places.
-            RDF.getURI() ;
-            RDFS.getURI() ;
-            OWL.getURI() ;
-            JenaSystem.logLifecycle("JenaCore.init - finish") ;
+            RDF.getURI();
+            RDFS.getURI();
+            OWL.getURI();
+            Assembler.general();
+            JenaSystem.logLifecycle("JenaCore.init - finish");
         }
     }
 }
diff --git a/jena-core/src/test/java/org/apache/jena/assembler/acceptance/AllAccept.java b/jena-core/src/test/java/org/apache/jena/assembler/acceptance/AllAccept.java
index dbb3cdb324..a284c1f492 100644
--- a/jena-core/src/test/java/org/apache/jena/assembler/acceptance/AllAccept.java
+++ b/jena-core/src/test/java/org/apache/jena/assembler/acceptance/AllAccept.java
@@ -46,7 +46,7 @@ public class AllAccept extends AssemblerTestBase
     public void testUnadornedInferenceModel()
         {
         Resource root = resourceInModel( "x ja:reasoner R; R rdf:type ja:ReasonerFactory" );
-        Model m = Assembler.general.openModel( root );
+        Model m = Assembler.general().openModel( root );
         assertInstanceOf( InfModel.class, m );
         InfModel inf = (InfModel) m;
         assertIsoModels( empty, inf.getRawModel() );
@@ -61,7 +61,7 @@ public class AllAccept extends AssemblerTestBase
             data.write( fs, "N3" );
         }
         Resource root = resourceInModel( "x rdf:type ja:MemoryModel; x ja:content y; y ja:externalContent file:" + f.getAbsolutePath() );
-        Model m = Assembler.general.openModel( root );
+        Model m = Assembler.general().openModel( root );
         assertIsoModels( data, m );
         }
     }
diff --git a/jena-core/src/test/java/org/apache/jena/assembler/test/TestAssemblerGroup.java b/jena-core/src/test/java/org/apache/jena/assembler/test/TestAssemblerGroup.java
index 79d04b0c6c..bc9a57badf 100644
--- a/jena-core/src/test/java/org/apache/jena/assembler/test/TestAssemblerGroup.java
+++ b/jena-core/src/test/java/org/apache/jena/assembler/test/TestAssemblerGroup.java
@@ -40,7 +40,7 @@ public class TestAssemblerGroup extends AssemblerTestBase
 
     @Override protected Class<? extends Assembler> getAssemblerClass()
         { return AssemblerGroup.class; }
-    
+
     public void testEmptyAssemblerGroup()
         {
         AssemblerGroup a = AssemblerGroup.create();
@@ -51,32 +51,32 @@ public class TestAssemblerGroup extends AssemblerTestBase
 
     protected void checkFailsType( Assembler a, String type )
         {
-        try 
-            { 
-            a.open( resourceInModel( "x rdf:type " + type ) ); 
-            fail( "should trap missing implementation" ); 
+        try
+            {
+            a.open( resourceInModel( "x rdf:type " + type ) );
+            fail( "should trap missing implementation" );
             }
         catch (NoSpecificTypeException e)
             {
             assertEquals( resource( "x" ), e.getRoot() );
             }
-//        catch (NoImplementationException e) 
-//            { 
-//            assertEquals( resource( "x" ), e.getRoot() ); 
+//        catch (NoImplementationException e)
+//            {
+//            assertEquals( resource( "x" ), e.getRoot() );
 //            assertEquals( JA.Object, e.getType() );
 //            assertNotNull( e.getAssembler() );
 //            }
         }
-    
+
     public static boolean loaded = false;
-    
+
     public static class Trivial {
         // Use the hook static method - copes with classes already loaded.
         public static void whenRequiredByAssembler(AssemblerGroup ag) {
             loaded = true;
         }
     }
-    
+
     public void testLoadsClasses()
         {
         AssemblerGroup a = AssemblerGroup.create();
@@ -88,14 +88,14 @@ public class TestAssemblerGroup extends AssemblerTestBase
         assertEquals( "mockmockmock", a.open( root ) );
         assertTrue( "the assembler group did not obey the ja:loadClass directive", loaded );
         }
-    
+
     static class MockAssembler extends AssemblerBase
         {
         @Override
         public Object open( Assembler a, Resource root, Mode mode )
             { return "mockmockmock"; }
         }
-    
+
     public void testSingletonAssemblerGroup()
         {
         AssemblerGroup a = AssemblerGroup.create();
@@ -103,7 +103,7 @@ public class TestAssemblerGroup extends AssemblerTestBase
         a.openModel( resourceInModel( "x rdf:type ja:InfModel" ) );
         checkFailsType( a, "js:DefaultModel" );
         }
-    
+
     public void testMultipleAssemblerGroup()
         {
         AssemblerGroup a = AssemblerGroup.create();
@@ -113,7 +113,7 @@ public class TestAssemblerGroup extends AssemblerTestBase
         assertFalse( a.openModel( resourceInModel( "y rdf:type ja:MemoryModel" ) ) instanceof InfModel );
         checkFailsType( a, "js:DefaultModel" );
         }
-    
+
     public void testImpliedType()
         {
         AssemblerGroup a = AssemblerGroup.create();
@@ -122,22 +122,22 @@ public class TestAssemblerGroup extends AssemblerTestBase
         a.implementWith( JA.InfModel, new NamedObjectAssembler( resource( "x" ), expected ) );
         assertSame( expected, a.open( root ) );
         }
-    
+
     public void testBuiltinGroup()
         {
-        AssemblerGroup g = Assembler.general;
+        AssemblerGroup g = Assembler.general();
         assertInstanceOf( Model.class, g.open( resourceInModel( "x rdf:type ja:DefaultModel" ) ) );
         assertInstanceOf( InfModel.class, g.open( resourceInModel( "x rdf:type ja:InfModel" ) ) );
         assertMemoryModel( g.open( resourceInModel( "x rdf:type ja:MemoryModel" ) ) );
         }
-    
-    private static Assembler mockAssembler = new AssemblerBase() 
+
+    private static Assembler mockAssembler = new AssemblerBase()
         {
         @Override
         public Object open( Assembler a, Resource root, Mode mode )
             { return null; }
         };
-    
+
     public void testAddingImplAddsSubclass()
         {
         final Model [] fullModel = new Model[1];
@@ -150,19 +150,19 @@ public class TestAssemblerGroup extends AssemblerTestBase
         Resource typeA = resource( "typeA" ), typeB = resource( "typeB" );
         g.implementWith( typeA, mockAssembler );
         g.implementWith( typeB, mockAssembler );
-        g.open( root );    
+        g.open( root );
         assertTrue( fullModel[0].contains( typeA, RDFS.subClassOf, JA.Object ) );
         assertTrue( fullModel[0].contains( typeB, RDFS.subClassOf, JA.Object ) );
         }
-    
-    public static class ImplementsSPOO 
+
+    public static class ImplementsSPOO
         {
         public static void whenRequiredByAssembler( AssemblerGroup g )
             {
             g.implementWith( resource( "SPOO" ), mockAssembler );
             }
         }
-    
+
     public void testClassesLoadedBeforeAddingTypes()
         {
         String className = ImplementsSPOO.class.getName();
@@ -172,7 +172,7 @@ public class TestAssemblerGroup extends AssemblerTestBase
         g.open( root );
         assertEquals( resourceSet( "SPOO ja:MemoryModel" ), g.implementsTypes() );
         }
-    
+
     protected void assertMemoryModel( Object object )
         {
         if (object instanceof Model)
@@ -183,12 +183,12 @@ public class TestAssemblerGroup extends AssemblerTestBase
         else
             fail( "expected a Model, but got a " + object.getClass() );
         }
-    
+
     public void testPassesSelfIn()
         {
         final AssemblerGroup group = AssemblerGroup.create();
         final Object result = new Object();
-        Assembler fake = new AssemblerBase() 
+        Assembler fake = new AssemblerBase()
             {
             @Override
             public Object open( Assembler a, Resource root, Mode irrelevant )
@@ -200,7 +200,7 @@ public class TestAssemblerGroup extends AssemblerTestBase
         group.implementWith( JA.Object, fake );
         assertSame( result, group.open( resourceInModel( "x rdf:type ja:Object" ) ) );
         }
-    
+
     public void testCopyPreservesMapping()
         {
         AssemblerGroup initial = AssemblerGroup
@@ -210,5 +210,5 @@ public class TestAssemblerGroup extends AssemblerTestBase
         AssemblerGroup copy = initial.copy();
         assertSame( initial.assemblerFor( JA.InfModel ), copy.assemblerFor( JA.InfModel ) );
         }
-    
+
     }
diff --git a/jena-core/src/test/java/org/apache/jena/assembler/test/TestBuiltinAssemblerGroup.java b/jena-core/src/test/java/org/apache/jena/assembler/test/TestBuiltinAssemblerGroup.java
index ae286ce742..6465d4581b 100644
--- a/jena-core/src/test/java/org/apache/jena/assembler/test/TestBuiltinAssemblerGroup.java
+++ b/jena-core/src/test/java/org/apache/jena/assembler/test/TestBuiltinAssemblerGroup.java
@@ -67,7 +67,7 @@ public class TestBuiltinAssemblerGroup extends AssemblerTestBase
         {
         PrefixMapping wanted = PrefixMapping.Factory.create().setNsPrefix( "P", "spoo:/" );
         Resource r = resourceInModel( "x ja:prefix 'P'; x ja:namespace 'spoo:/'" );
-        assertEquals( wanted, Assembler.general.open( r ) );
+        assertEquals( wanted, Assembler.general().open( r ) );
         }
 
     public void testRecognisesAndAssemblesMultiplePrefixMappings()
@@ -76,7 +76,7 @@ public class TestBuiltinAssemblerGroup extends AssemblerTestBase
             .setNsPrefix( "P", "spoo:/" ).setNsPrefix( "Q", "flarn:/" );
         Resource r = resourceInModel
             ( "x ja:includes y; x ja:includes z; y ja:prefix 'P'; y ja:namespace 'spoo:/'; z ja:prefix 'Q'; z ja:namespace 'flarn:/'" );
-        assertEquals( wanted, Assembler.general.open( r ) );
+        assertEquals( wanted, Assembler.general().open( r ) );
         }
 
     public static void assertEquals( PrefixMapping wanted, Object got )
@@ -89,6 +89,6 @@ public class TestBuiltinAssemblerGroup extends AssemblerTestBase
 
     private void assertAssemblerClass( Resource type, Class<?> C )
         {
-        assertInstanceOf( C, Assembler.general.assemblerFor( type ) );
+        assertInstanceOf( C, Assembler.general().assemblerFor( type ) );
         }
     }
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/build/FusekiConfig.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/build/FusekiConfig.java
index 2e6ec3a8ca..b6eb248204 100644
--- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/build/FusekiConfig.java
+++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/build/FusekiConfig.java
@@ -692,7 +692,7 @@ public class FusekiConfig {
         //AssemblerUtils.addRegistered(datasetDesc.getModel());
 
         Resource r = resource(configuration, datasetDesc);
-        Dataset ds = (Dataset)Assembler.general.open(r);
+        Dataset ds = (Dataset)Assembler.general().open(r);
         if ( ds == null )
             throw new FusekiConfigException("Bad description of a dataset: " + displayStr(configuration, datasetDesc));
         dsg = ds.asDatasetGraph();
diff --git a/jena-tdb2/src/main/java/org/apache/jena/tdb2/assembler/VocabTDB2.java b/jena-tdb2/src/main/java/org/apache/jena/tdb2/assembler/VocabTDB2.java
index 21bbf41629..191ea6c7ae 100644
--- a/jena-tdb2/src/main/java/org/apache/jena/tdb2/assembler/VocabTDB2.java
+++ b/jena-tdb2/src/main/java/org/apache/jena/tdb2/assembler/VocabTDB2.java
@@ -85,7 +85,7 @@ public class VocabTDB2
     static public synchronized void init() {
         if ( initialized )
             return;
-        registerWith(Assembler.general);
+        registerWith(Assembler.general());
         initialized = true;
     }
 
diff --git a/jena-text/src/main/java/org/apache/jena/query/text/assembler/Params.java b/jena-text/src/main/java/org/apache/jena/query/text/assembler/Params.java
index bc80bec7a2..8bdb19fe53 100644
--- a/jena-text/src/main/java/org/apache/jena/query/text/assembler/Params.java
+++ b/jena-text/src/main/java/org/apache/jena/query/text/assembler/Params.java
@@ -264,7 +264,7 @@ public class Params {
                 throw new TextIndexException("Analyzer param spec text:paramValue must be an analyzer spec resource: " + valueNode);
             }
 
-            Analyzer analyzer = (Analyzer) Assembler.general.open((Resource) valueNode);
+            Analyzer analyzer = (Analyzer) Assembler.general().open((Resource) valueNode);
             return new ParamSpec(name, analyzer, Analyzer.class);
 
         default:
diff --git a/jena-text/src/main/java/org/apache/jena/query/text/assembler/TextAssembler.java b/jena-text/src/main/java/org/apache/jena/query/text/assembler/TextAssembler.java
index 1d7daf3196..83c2e820d7 100644
--- a/jena-text/src/main/java/org/apache/jena/query/text/assembler/TextAssembler.java
+++ b/jena-text/src/main/java/org/apache/jena/query/text/assembler/TextAssembler.java
@@ -28,18 +28,18 @@ public class TextAssembler
         AssemblerUtils.init() ;
         AssemblerUtils.registerDataset(TextVocab.textDataset,      new TextDatasetAssembler()) ;
         
-        Assembler.general.implementWith(TextVocab.entityMap,        new EntityDefinitionAssembler()) ;
-        Assembler.general.implementWith(TextVocab.textIndexLucene,  new TextIndexLuceneAssembler()) ;
-        Assembler.general.implementWith(TextVocab.standardAnalyzer, new StandardAnalyzerAssembler()) ;
-        Assembler.general.implementWith(TextVocab.simpleAnalyzer,   new SimpleAnalyzerAssembler()) ;
-        Assembler.general.implementWith(TextVocab.keywordAnalyzer,  new KeywordAnalyzerAssembler()) ;
-        Assembler.general.implementWith(TextVocab.lowerCaseKeywordAnalyzer, new LowerCaseKeywordAnalyzerAssembler()) ;
-        Assembler.general.implementWith(TextVocab.localizedAnalyzer, new LocalizedAnalyzerAssembler()) ;
-        Assembler.general.implementWith(TextVocab.configurableAnalyzer, new ConfigurableAnalyzerAssembler()) ;
-        Assembler.general.implementWith(TextVocab.genericAnalyzer,  new GenericAnalyzerAssembler()) ;
-        Assembler.general.implementWith(TextVocab.genericFilter,    new GenericFilterAssembler()) ;
-        Assembler.general.implementWith(TextVocab.genericTokenizer,  new GenericTokenizerAssembler()) ;
-        Assembler.general.implementWith(TextVocab.definedAnalyzer,  new DefinedAnalyzerAssembler()) ;
+        Assembler.general().implementWith(TextVocab.entityMap,        new EntityDefinitionAssembler()) ;
+        Assembler.general().implementWith(TextVocab.textIndexLucene,  new TextIndexLuceneAssembler()) ;
+        Assembler.general().implementWith(TextVocab.standardAnalyzer, new StandardAnalyzerAssembler()) ;
+        Assembler.general().implementWith(TextVocab.simpleAnalyzer,   new SimpleAnalyzerAssembler()) ;
+        Assembler.general().implementWith(TextVocab.keywordAnalyzer,  new KeywordAnalyzerAssembler()) ;
+        Assembler.general().implementWith(TextVocab.lowerCaseKeywordAnalyzer, new LowerCaseKeywordAnalyzerAssembler()) ;
+        Assembler.general().implementWith(TextVocab.localizedAnalyzer, new LocalizedAnalyzerAssembler()) ;
+        Assembler.general().implementWith(TextVocab.configurableAnalyzer, new ConfigurableAnalyzerAssembler()) ;
+        Assembler.general().implementWith(TextVocab.genericAnalyzer,  new GenericAnalyzerAssembler()) ;
+        Assembler.general().implementWith(TextVocab.genericFilter,    new GenericFilterAssembler()) ;
+        Assembler.general().implementWith(TextVocab.genericTokenizer,  new GenericTokenizerAssembler()) ;
+        Assembler.general().implementWith(TextVocab.definedAnalyzer,  new DefinedAnalyzerAssembler()) ;
 
     }
 }
diff --git a/jena-text/src/test/java/org/apache/jena/query/text/AbstractTestDatasetWithAnalyzer.java b/jena-text/src/test/java/org/apache/jena/query/text/AbstractTestDatasetWithAnalyzer.java
index 18ca245c50..3ca1bfaad2 100644
--- a/jena-text/src/test/java/org/apache/jena/query/text/AbstractTestDatasetWithAnalyzer.java
+++ b/jena-text/src/test/java/org/apache/jena/query/text/AbstractTestDatasetWithAnalyzer.java
@@ -93,7 +93,7 @@ public abstract class AbstractTestDatasetWithAnalyzer extends AbstractTestDatase
         specModel.read(reader, "", "TURTLE");
         TextAssembler.init();            
         Resource root = specModel.getResource(SPEC_ROOT_URI);
-        dataset = (Dataset) Assembler.general.open(root);
+        dataset = (Dataset) Assembler.general().open(root);
     }
     
     public void init(String analyzer) {
diff --git a/jena-text/src/test/java/org/apache/jena/query/text/TestDatasetWithLocalizedAnalyzer.java b/jena-text/src/test/java/org/apache/jena/query/text/TestDatasetWithLocalizedAnalyzer.java
index b22e4d4b5b..4716bcb734 100644
--- a/jena-text/src/test/java/org/apache/jena/query/text/TestDatasetWithLocalizedAnalyzer.java
+++ b/jena-text/src/test/java/org/apache/jena/query/text/TestDatasetWithLocalizedAnalyzer.java
@@ -105,7 +105,7 @@ public class TestDatasetWithLocalizedAnalyzer extends AbstractTestDatasetWithTex
 //        deleteOldFiles();
         indexDir.mkdirs();
         Resource root = specModel.getResource(SPEC_ROOT_URI);
-        dataset = (Dataset) Assembler.general.open(root);
+        dataset = (Dataset) Assembler.general().open(root);
     }
     
     
diff --git a/jena-text/src/test/java/org/apache/jena/query/text/TestDatasetWithLuceneMultilingualTextIndex.java b/jena-text/src/test/java/org/apache/jena/query/text/TestDatasetWithLuceneMultilingualTextIndex.java
index b805c6a38e..06aef03cb2 100644
--- a/jena-text/src/test/java/org/apache/jena/query/text/TestDatasetWithLuceneMultilingualTextIndex.java
+++ b/jena-text/src/test/java/org/apache/jena/query/text/TestDatasetWithLuceneMultilingualTextIndex.java
@@ -100,7 +100,7 @@ public class TestDatasetWithLuceneMultilingualTextIndex extends AbstractTestData
         specModel.read(reader, "", "TURTLE");
         TextAssembler.init();
         Resource root = specModel.getResource(SPEC_ROOT_URI);
-        dataset = (Dataset) Assembler.general.open(root);
+        dataset = (Dataset) Assembler.general().open(root);
     }
 
     @After
diff --git a/jena-text/src/test/java/org/apache/jena/query/text/TestDatasetWithLuceneStoredLiterals.java b/jena-text/src/test/java/org/apache/jena/query/text/TestDatasetWithLuceneStoredLiterals.java
index b3a90100d0..1fe2de1f27 100644
--- a/jena-text/src/test/java/org/apache/jena/query/text/TestDatasetWithLuceneStoredLiterals.java
+++ b/jena-text/src/test/java/org/apache/jena/query/text/TestDatasetWithLuceneStoredLiterals.java
@@ -112,7 +112,7 @@ public class TestDatasetWithLuceneStoredLiterals extends AbstractTestDatasetWith
         specModel.read(reader, "", "TURTLE");
         TextAssembler.init();
         Resource root = specModel.getResource(SPEC_ROOT_URI);
-        dataset = (Dataset) Assembler.general.open(root);
+        dataset = (Dataset) Assembler.general().open(root);
     }
 
     @After
diff --git a/jena-text/src/test/java/org/apache/jena/query/text/TestDatasetWithLuceneTextIndex.java b/jena-text/src/test/java/org/apache/jena/query/text/TestDatasetWithLuceneTextIndex.java
index 06fee96368..63979c1217 100644
--- a/jena-text/src/test/java/org/apache/jena/query/text/TestDatasetWithLuceneTextIndex.java
+++ b/jena-text/src/test/java/org/apache/jena/query/text/TestDatasetWithLuceneTextIndex.java
@@ -89,7 +89,7 @@ public class TestDatasetWithLuceneTextIndex extends AbstractTestDatasetWithTextI
         specModel.read(reader, "", "TURTLE");
         TextAssembler.init();           
         Resource root = specModel.getResource(SPEC_ROOT_URI);
-        dataset = (Dataset) Assembler.general.open(root);
+        dataset = (Dataset) Assembler.general().open(root);
     }
     
     @After
diff --git a/jena-text/src/test/java/org/apache/jena/query/text/TestDatasetWithLuceneTextIndexWithLangField.java b/jena-text/src/test/java/org/apache/jena/query/text/TestDatasetWithLuceneTextIndexWithLangField.java
index 0f2be79a07..52c604d311 100644
--- a/jena-text/src/test/java/org/apache/jena/query/text/TestDatasetWithLuceneTextIndexWithLangField.java
+++ b/jena-text/src/test/java/org/apache/jena/query/text/TestDatasetWithLuceneTextIndexWithLangField.java
@@ -92,7 +92,7 @@ public class TestDatasetWithLuceneTextIndexWithLangField extends AbstractTestDat
         specModel.read(reader, "", "TURTLE");
         TextAssembler.init();           
         Resource root = specModel.getResource(SPEC_ROOT_URI);
-        dataset = (Dataset) Assembler.general.open(root);
+        dataset = (Dataset) Assembler.general().open(root);
     }
     
     @After
diff --git a/jena-text/src/test/java/org/apache/jena/query/text/TestDatasetWithSimpleAnalyzer.java b/jena-text/src/test/java/org/apache/jena/query/text/TestDatasetWithSimpleAnalyzer.java
index 4a34d66c20..69866842f5 100644
--- a/jena-text/src/test/java/org/apache/jena/query/text/TestDatasetWithSimpleAnalyzer.java
+++ b/jena-text/src/test/java/org/apache/jena/query/text/TestDatasetWithSimpleAnalyzer.java
@@ -101,7 +101,7 @@ public class TestDatasetWithSimpleAnalyzer extends AbstractTestDatasetWithTextIn
 //        deleteOldFiles();
         indexDir.mkdirs();
         Resource root = specModel.getResource(SPEC_ROOT_URI);
-        dataset = (Dataset) Assembler.general.open(root);
+        dataset = (Dataset) Assembler.general().open(root);
     }
     
     
diff --git a/jena-text/src/test/java/org/apache/jena/query/text/TestDatasetWithStandardAnalyzer.java b/jena-text/src/test/java/org/apache/jena/query/text/TestDatasetWithStandardAnalyzer.java
index 6fb4ba0fed..f66f610a48 100644
--- a/jena-text/src/test/java/org/apache/jena/query/text/TestDatasetWithStandardAnalyzer.java
+++ b/jena-text/src/test/java/org/apache/jena/query/text/TestDatasetWithStandardAnalyzer.java
@@ -101,7 +101,7 @@ public class TestDatasetWithStandardAnalyzer extends AbstractTestDatasetWithText
 //        deleteOldFiles();
         indexDir.mkdirs();
         Resource root = specModel.getResource(SPEC_ROOT_URI);
-        dataset = (Dataset) Assembler.general.open(root);
+        dataset = (Dataset) Assembler.general().open(root);
     }
     
     
diff --git a/jena-text/src/test/java/org/apache/jena/query/text/TestTextDefineAnalyzers.java b/jena-text/src/test/java/org/apache/jena/query/text/TestTextDefineAnalyzers.java
index 5ffa1db7b4..1f899ea435 100644
--- a/jena-text/src/test/java/org/apache/jena/query/text/TestTextDefineAnalyzers.java
+++ b/jena-text/src/test/java/org/apache/jena/query/text/TestTextDefineAnalyzers.java
@@ -144,7 +144,7 @@ public class TestTextDefineAnalyzers extends AbstractTestDatasetWithTextIndexBas
         specModel.read(reader, "", "TURTLE");
         TextAssembler.init();
         Resource root = specModel.getResource(SPEC_ROOT_URI);
-        dataset = (Dataset) Assembler.general.open(root);
+        dataset = (Dataset) Assembler.general().open(root);
     }
 
     @After
diff --git a/jena-text/src/test/java/org/apache/jena/query/text/TestTextGraphIndexExtra2.java b/jena-text/src/test/java/org/apache/jena/query/text/TestTextGraphIndexExtra2.java
index 8476391012..7becd7bfd5 100644
--- a/jena-text/src/test/java/org/apache/jena/query/text/TestTextGraphIndexExtra2.java
+++ b/jena-text/src/test/java/org/apache/jena/query/text/TestTextGraphIndexExtra2.java
@@ -105,7 +105,7 @@ public class TestTextGraphIndexExtra2 extends AbstractTestDatasetWithTextIndexBa
         specModel.read(reader, "", "TURTLE");
         TextAssembler.init();
         Resource root = specModel.getResource(SPEC_ROOT_URI);
-        dataset = (Dataset) Assembler.general.open(root);
+        dataset = (Dataset) Assembler.general().open(root);
     }
 
     @After
diff --git a/jena-text/src/test/java/org/apache/jena/query/text/TestTextHighlighting.java b/jena-text/src/test/java/org/apache/jena/query/text/TestTextHighlighting.java
index 1583e41036..f9456e7098 100644
--- a/jena-text/src/test/java/org/apache/jena/query/text/TestTextHighlighting.java
+++ b/jena-text/src/test/java/org/apache/jena/query/text/TestTextHighlighting.java
@@ -110,7 +110,7 @@ public class TestTextHighlighting extends AbstractTestDatasetWithTextIndexBase {
         specModel.read(reader, "", "TURTLE");
         TextAssembler.init();
         Resource root = specModel.getResource(SPEC_ROOT_URI);
-        dataset = (Dataset) Assembler.general.open(root);
+        dataset = (Dataset) Assembler.general().open(root);
     }
 
     @After
diff --git a/jena-text/src/test/java/org/apache/jena/query/text/TestTextMultilingualEnhancements.java b/jena-text/src/test/java/org/apache/jena/query/text/TestTextMultilingualEnhancements.java
index 1ac5ffff7f..6172ab0d44 100644
--- a/jena-text/src/test/java/org/apache/jena/query/text/TestTextMultilingualEnhancements.java
+++ b/jena-text/src/test/java/org/apache/jena/query/text/TestTextMultilingualEnhancements.java
@@ -142,7 +142,7 @@ public class TestTextMultilingualEnhancements extends AbstractTestDatasetWithTex
         specModel.read(reader, "", "TURTLE");
         TextAssembler.init();
         Resource root = specModel.getResource(SPEC_ROOT_URI);
-        dataset = (Dataset) Assembler.general.open(root);
+        dataset = (Dataset) Assembler.general().open(root);
     }
 
     @After
diff --git a/jena-text/src/test/java/org/apache/jena/query/text/TestTextMultilingualEnhancements02.java b/jena-text/src/test/java/org/apache/jena/query/text/TestTextMultilingualEnhancements02.java
index ccde292ce4..4785a4ba92 100644
--- a/jena-text/src/test/java/org/apache/jena/query/text/TestTextMultilingualEnhancements02.java
+++ b/jena-text/src/test/java/org/apache/jena/query/text/TestTextMultilingualEnhancements02.java
@@ -180,7 +180,7 @@ public class TestTextMultilingualEnhancements02 extends AbstractTestDatasetWithT
         specModel.read(reader, "", "TURTLE");
         TextAssembler.init();
         Resource root = specModel.getResource(SPEC_ROOT_URI);
-        dataset = (Dataset) Assembler.general.open(root);
+        dataset = (Dataset) Assembler.general().open(root);
     }
 
     @After
diff --git a/jena-text/src/test/java/org/apache/jena/query/text/TestTextMultipleProplistNotWorking.java b/jena-text/src/test/java/org/apache/jena/query/text/TestTextMultipleProplistNotWorking.java
index c092b6708c..352d6088cd 100644
--- a/jena-text/src/test/java/org/apache/jena/query/text/TestTextMultipleProplistNotWorking.java
+++ b/jena-text/src/test/java/org/apache/jena/query/text/TestTextMultipleProplistNotWorking.java
@@ -150,7 +150,7 @@ public class TestTextMultipleProplistNotWorking extends AbstractTestDatasetWithT
         specModel.read(reader, "", "TURTLE");
         TextAssembler.init();
         Resource root = specModel.getResource(SPEC_ROOT_URI);
-        dataset = (Dataset) Assembler.general.open(root);
+        dataset = (Dataset) Assembler.general().open(root);
     }
 
     @After
diff --git a/jena-text/src/test/java/org/apache/jena/query/text/TestTextPropLists.java b/jena-text/src/test/java/org/apache/jena/query/text/TestTextPropLists.java
index 532849e858..3bc5f5b25e 100644
--- a/jena-text/src/test/java/org/apache/jena/query/text/TestTextPropLists.java
+++ b/jena-text/src/test/java/org/apache/jena/query/text/TestTextPropLists.java
@@ -140,7 +140,7 @@ public class TestTextPropLists extends AbstractTestDatasetWithTextIndexBase {
         TextAssembler.init();
         indexDir.mkdirs();
         Resource root = specModel.getResource(SPEC_ROOT_URI);
-        dataset = (Dataset) Assembler.general.open(root);
+        dataset = (Dataset) Assembler.general().open(root);
     }
 
 
diff --git a/jena-text/src/test/java/org/apache/jena/query/text/TestTextPropLists02.java b/jena-text/src/test/java/org/apache/jena/query/text/TestTextPropLists02.java
index ee275abedb..f4753159c7 100644
--- a/jena-text/src/test/java/org/apache/jena/query/text/TestTextPropLists02.java
+++ b/jena-text/src/test/java/org/apache/jena/query/text/TestTextPropLists02.java
@@ -146,7 +146,7 @@ public class TestTextPropLists02 extends AbstractTestDatasetWithTextIndexBase {
         TextAssembler.init();
         indexDir.mkdirs();
         Resource root = specModel.getResource(SPEC_ROOT_URI);
-        dataset = (Dataset) Assembler.general.open(root);
+        dataset = (Dataset) Assembler.general().open(root);
     }
 
 
diff --git a/jena-text/src/test/java/org/apache/jena/query/text/assembler/TestEntityMapAssembler.java b/jena-text/src/test/java/org/apache/jena/query/text/assembler/TestEntityMapAssembler.java
index d258fd722e..d3946b3e0a 100644
--- a/jena-text/src/test/java/org/apache/jena/query/text/assembler/TestEntityMapAssembler.java
+++ b/jena-text/src/test/java/org/apache/jena/query/text/assembler/TestEntityMapAssembler.java
@@ -100,31 +100,31 @@ public class TestEntityMapAssembler {
     
     @Test public void EntityHasMapEntryWithSimpleAnalyzer() {
         EntityDefinitionAssembler entDefAssem = new EntityDefinitionAssembler();
-        EntityDefinition entityDef = entDefAssem.open(Assembler.general, spec3,  null);
+        EntityDefinition entityDef = entDefAssem.open(Assembler.general(), spec3,  null);
         assertEquals(SimpleAnalyzer.class, entityDef.getAnalyzer(SPEC1_DEFAULT_FIELD).getClass());
     }
     
     @Test public void EntityHasMapEntryWithStandardAnalyzerAndStopWords() {
         EntityDefinitionAssembler entDefAssem = new EntityDefinitionAssembler();
-        EntityDefinition entityDef = entDefAssem.open(Assembler.general, spec4,  null);
+        EntityDefinition entityDef = entDefAssem.open(Assembler.general(), spec4,  null);
         assertEquals(StandardAnalyzer.class, entityDef.getAnalyzer(SPEC1_DEFAULT_FIELD).getClass());
     }
     
     @Test public void EntityHasMapEntryWithKeywordAnalyzer() {
         EntityDefinitionAssembler entDefAssem = new EntityDefinitionAssembler();
-        EntityDefinition entityDef = entDefAssem.open(Assembler.general, spec5,  null);
+        EntityDefinition entityDef = entDefAssem.open(Assembler.general(), spec5,  null);
         assertEquals(KeywordAnalyzer.class, entityDef.getAnalyzer(SPEC1_DEFAULT_FIELD).getClass());
     }    
     
     @Test public void EntityHasMapEntryWithLowerCaseKeywordAnalyzer() {
         EntityDefinitionAssembler entDefAssem = new EntityDefinitionAssembler();
-        EntityDefinition entityDef = entDefAssem.open(Assembler.general, spec6,  null);
+        EntityDefinition entityDef = entDefAssem.open(Assembler.general(), spec6,  null);
         assertEquals(LowerCaseKeywordAnalyzer.class, entityDef.getAnalyzer(SPEC1_DEFAULT_FIELD).getClass());
     }    
     
     @Test public void EntityHasMapEntryWithConfigurableAnalyzer() {
         EntityDefinitionAssembler entDefAssem = new EntityDefinitionAssembler();
-        EntityDefinition entityDef = entDefAssem.open(Assembler.general, spec7,  null);
+        EntityDefinition entityDef = entDefAssem.open(Assembler.general(), spec7,  null);
         assertEquals(ConfigurableAnalyzer.class, entityDef.getAnalyzer(SPEC1_DEFAULT_FIELD).getClass());
     }    
     
diff --git a/jena-text/src/test/java/org/apache/jena/query/text/assembler/TestTextDatasetAssembler.java b/jena-text/src/test/java/org/apache/jena/query/text/assembler/TestTextDatasetAssembler.java
index c73f5da003..670147369a 100644
--- a/jena-text/src/test/java/org/apache/jena/query/text/assembler/TestTextDatasetAssembler.java
+++ b/jena-text/src/test/java/org/apache/jena/query/text/assembler/TestTextDatasetAssembler.java
@@ -57,24 +57,24 @@ public class TestTextDatasetAssembler extends AbstractTestTextAssembler {
 
     @Test
     public void testSimpleDatasetAssembler() {
-        Dataset dataset = (Dataset) Assembler.general.open(spec1);
+        Dataset dataset = (Dataset) Assembler.general().open(spec1);
         assertTrue(dataset.getContext().get(TextQuery.textIndex) instanceof TextIndexLucene);
         dataset.close();
     }
 
     @Test(expected = AssemblerException.class)
     public void testErrorOnNoDataset() {
-        Assembler.general.open(noDatasetPropertySpec);
+        Assembler.general().open(noDatasetPropertySpec);
     }
 
     @Test(expected = AssemblerException.class)
     public void testErrorOnNoIndex() {
-        Assembler.general.open(noIndexPropertySpec);
+        Assembler.general().open(noIndexPropertySpec);
     }
 
     @Test
     public void testCustomTextDocProducer() {
-        Dataset dataset = (Dataset)Assembler.general.open(customTextDocProducerSpec);
+        Dataset dataset = (Dataset)Assembler.general().open(customTextDocProducerSpec);
         DatasetGraphText dsgText = (DatasetGraphText)dataset.asDatasetGraph();
         assertTrue(dsgText.getMonitor() instanceof CustomTextDocProducer);
         dataset.close();
diff --git a/jena-text/src/test/java/org/apache/jena/query/text/assembler/TestTextIndexLuceneAssembler.java b/jena-text/src/test/java/org/apache/jena/query/text/assembler/TestTextIndexLuceneAssembler.java
index d24c15e62b..d540a5f9c7 100644
--- a/jena-text/src/test/java/org/apache/jena/query/text/assembler/TestTextIndexLuceneAssembler.java
+++ b/jena-text/src/test/java/org/apache/jena/query/text/assembler/TestTextIndexLuceneAssembler.java
@@ -29,9 +29,9 @@ import org.junit.Test ;
 import static org.junit.Assert.* ;
 
 public class TestTextIndexLuceneAssembler extends AbstractTestTextAssembler {
-    
+
     @Test public void testIndexHasEntityMap() {
-        TextIndexLucene index = (TextIndexLucene) Assembler.general.open(SIMPLE_INDEX_SPEC);
+        TextIndexLucene index = (TextIndexLucene) Assembler.general().open(SIMPLE_INDEX_SPEC);
         try {
             assertEquals(RDFS.label.asNode(), index.getDocDef().getPrimaryPredicate());
         }
@@ -42,9 +42,9 @@ public class TestTextIndexLuceneAssembler extends AbstractTestTextAssembler {
 
     @Test public void testLiteralDirectory() {
         TextIndexLuceneAssembler assembler = new TextIndexLuceneAssembler();
-        
+
         Resource root = SIMPLE_INDEX_SPEC_LITERAL_DIR;
-        Assembler a = Assembler.general;
+        Assembler a = Assembler.general();
         // the open method is not supposed to throw exceptions when the directory is
         // a literal
         TextIndexLucene index = (TextIndexLucene)assembler.open(a, root, /*mode*/ null);
@@ -60,7 +60,7 @@ public class TestTextIndexLuceneAssembler extends AbstractTestTextAssembler {
         TextIndexLuceneAssembler assembler = new TextIndexLuceneAssembler();
 
         Resource root = SIMPLE_INDEX_SPEC2;
-        Assembler a = Assembler.general;
+        Assembler a = Assembler.general();
         // the open method is not supposed to throw exceptions when the directory is
         // a resource
         TextIndexLucene index = (TextIndexLucene) assembler.open(a, root, /*mode*/ null);
@@ -77,7 +77,7 @@ public class TestTextIndexLuceneAssembler extends AbstractTestTextAssembler {
         TextIndexLuceneAssembler assembler = new TextIndexLuceneAssembler();
 
         Resource root = SIMPLE_INDEX_SPEC_MEM_DIR;
-        Assembler a = Assembler.general;
+        Assembler a = Assembler.general();
         // the open method is not supposed to throw exceptions when the directory is
         // a iri resource
         TextIndexLucene index = (TextIndexLucene) assembler.open(a, root, /*mode*/ null);
@@ -88,9 +88,9 @@ public class TestTextIndexLuceneAssembler extends AbstractTestTextAssembler {
             index.close();
         }
     }
-    
+
     @Test public void testQueryAnalyzer() {
-        TextIndexLucene index = (TextIndexLucene) Assembler.general.open(SIMPLE_INDEX_SPEC_QUERY_ANALYZER);
+        TextIndexLucene index = (TextIndexLucene) Assembler.general().open(SIMPLE_INDEX_SPEC_QUERY_ANALYZER);
         try {
             assertTrue(index.getQueryAnalyzer() instanceof KeywordAnalyzer);
         }