Skip to main content

Migrating from v3 to v4

Norconex Crawler v4 is a significant evolution of the v3 series. The core concepts are unchanged — you still define start references, filters, fetchers, importer handlers, and committers — but package names, class names, configuration element names, and the Java API have all changed substantially.

The fastest migration path

The Visual Configurator can do most of the work for you, and requires no coding. It is a web application Norconex hosts and offers free of charge, so there is nothing to install. The Configurator itself is not open source — the crawler is, and remains so.

The conversion runs entirely in your browser: your configuration is never uploaded, which matters because v3 configs routinely contain credentials, internal hostnames, and proxy settings.

  1. Open the Configurator and choose Import.
  2. Provide your v3 configuration — upload the .xml file, drag and drop it, or paste its content directly.
  3. The Configurator detects the v3 format automatically (by its <httpcollector> root element) and offers to migrate it.
  4. It converts the configuration, splitting a multi-crawler v3 file into one v4 configuration per <crawler> entry, and applies known class and element renames.
  5. A migration report lists what was converted, what was renamed, and what needs your attention. You can download it, download an individual crawler configuration, or download a ZIP containing every converted crawler plus the report.
  6. Review and adjust the result visually in the Configurator, then Export as XML, YAML, or JSON — either copied to your clipboard or downloaded as a file.
Non-coders welcome

Because import and export are entirely UI-driven, this path requires no Java and no hand-editing of configuration files. It is also the fastest way to discover the v4 equivalent of a v3 class you cannot find in this guide.

Two things the converter cannot do for you
  • Unresolved fragments. If your v3 file uses Velocity #include or #parse directives, the Configurator only sees the file you gave it. Inline the fragments first, or migrate each fragment separately.
  • Custom classes. Your own implementations of v3 interfaces are carried over by name but will not compile or load against v4. See Java API changes and Extending the Crawler.

What changed at a high level

Areav3v4
Minimum Java1721
Config formatXML onlyXML, YAML, and JSON equally supported
Config structureOne file: a collector wrapping multiple crawlersOne file = one crawler
Maven groupIdcom.norconex.collectors.v3com.norconex.crawler
Maven artifactsnorconex-collector-*, norconex-importer, norconex-committer-*nx-crawler-*, nx-importer, nx-committer-*
Java packagescom.norconex.collector.*, com.norconex.committer.core3com.norconex.crawler.*, com.norconex.committer.core
InterfacesI-prefixed (IHttpFetcher, ICommitter)Prefix dropped (Fetcher, Committer)
Java API entrynew HttpCollector(config).start()WebCrawler.create(config).crawl()
Crawl state storage<dataStoreEngine> (MVStore, JDBC, MongoDB)<cluster> connectors (MVStore, Hazelcast, in-memory)
Importer pipelinepreParseHandlers / documentParserFactory / postParseHandlersA single handlers list with conditional flow control
Importer handlersTaggers, transformers, filters, splittersTransformers, conditions, splitters (taggers merged into transformers)
CommittersSeparate repository per committer, independent versionsSame mono-repo, versioned with the crawler
Launch scriptscollector-http.sh, collector-fs.shcrawl-web.sh, crawl-fs.sh

Things that did not change: CLI subcommands (start, stop, clean, configcheck, configrender, storeexport, storeimport), the event system model (v3 already used a unified event manager), short class-name resolution in configuration files (v3 supported that too), and Velocity variables and fragments.

Detailed migration steps

See the v3 to v4 Detailed Guide for element-by-element and class-by-class mapping tables.

For cross-format configuration behavior (null vs empty, omitted defaults, variables, fragments), see Configuration Semantics, including the v3 mapping callout.

Need help?