Convert COBOL to Java

Delivering you an intelligent and high quality result in due time!

Benefit from the Ispirer top-notch migration services and robust automated solutions. Foster migration, and optimize the cost and performance of your IT infrastructure by converting your COBOL application to Java with Ispirer.

Migrate COBOL to Java


nGLFly Wizard for automated conversion

NGLFly Wizard offers a range of opportunities for automated COBOL to Java conversion with minimum manual corrections:

  • Free assessment Metrics tool to analyze your database and estimate migration complexity
  • Assistance in NGLFly configuration
  • Automated migration of the entire application, including project files, business logic, GUI and database API
  • Prompt customization of the tool to maximize automation rate
  • Expert support during the entire project

Check all the features by requesting a free trial of NGLFly Wizard.
It is valid for 30 days.

Free trial


Turnkey migration service

Turnkey COBOL to Java migration service provided by Ispirer professionals includes:

  • Migration of the entire application, including project files, business logic, GUI and database API
  • Team of experts skilled in COBOL and Java
  • Tailored migration roadmap from assessment through migration and testing to cutover
  • Smart automation with Ispirer Toolkit
  • Assistance in deployment and integration, performance optimization, new feature development

Drop us a line and we’ll discuss and estimate your COBOL to Java project.

Request a quote

NGLFly Wizard for Automated App Conversion

NGLFly Wizard Logo

NGLFly Wizard is a tool for automated application conversion. This solution makes it possible to translate code from one programming language to another automatically, while preserving the initial functionality of an application. Based on an intelligent proprietary algorithm, the tool analyzes the syntax, semantics, mapping data types, control structures, function calls, and even code structures that do not have equivalents in a target technology. Based on the analysis, nGLFly Wizard applies all the relevant conversion rules from its knowledge base core and translates the source code to the target technology.

NGLFly supports both legacy and most popular programming languages, such as COBOL, Delphi, Informix 4GL, Powerbuilder, C#, Java, Python, JavaScript, and others. To ensure a smooth translation process, our support experts are available to assist with tool configuration or resolve any issues in a timely manner.

High quality

High quality code conversion.

Expert system with 20.000+ conversion rules and 100.000+ automation tests.



Nimble configuration with 300+ parameters and options for effective application code conversion.

Free smart assessment

Free smart assessment

Free assessment Metrics for migration scope and complexity evaluation.

Intuitive and instructive reports

Comprehensive migration analysis

Intuitive and instructive reports for cost-effective post-migration polishing.

Conversion Overview

Ispirer Toolkit automatically converts COBOL to Java, considering the specifics of these languages. As the result of the conversion, Java class is generated for each source file (.cbl, .cob, .cpy). The class name is formed from the PROGRAM-ID specified in the Identification division, taking into account the camelCase rule of the Java language. Variables from the Data division are migrated to class variables, and paragraphs from the Procedure division are migrated to class methods. When using structures in COBOL, additional classes are formed for them in Java.
Besides, our tool processes COPY and INCLUDE clauses, creating a class object derived from the conversion of the header file. At the same time, dependencies and data types used in the header files are automatically taken into account.
In order to achieve a high level of automation and get maintainable code, we have developed a special Java framework, which is used by the conversion results.

Variable Conversion
Ispirer Toolkit automatically converts all COBOL data types, taking into account PICTURE (PIC) and USAGE clauses. For exact data type matching, we use generic Java classes.

Code Conversion
Each paragraph is converted to the class method. At the same time, the call and completion of each method automatically consider the possibility of using PERFORM and GO TO statements. COBOL statements and functions, which do not have analogues in Java, are converted to the class methods of our framework.

Working with Database
Database access in the COBOL application can be converted to JDBC or Hibernate. In addition, if the Java application needs to work with another database, you can convert the embedded SQL, as well as the database itself. You can learn more about database migration using Ispirer Toolkit in a special section of our site.

Working with Files
Ispirer Toolkit supports conversion of files of all three types: sequential, indexed and relative. As a result, file algorithms are automatically moved from COBOL to Java without changes.

COBOL to Java Conversion Demo

Check out how Ispirer Toolkit automatically converts COBOL application.

Drop us a line, if you have any business inquiries or questions regarding your COBOL conversion project. Ispirer experts will demonstrate our solutions and answer any questions you may have!

Contact us

Turnkey Migration Service

The entire conversion process can be divided into several stages:

  • Preparation. During the preparation stage, the focus lies on planning and preparing applications and infrastructure for migration to a new environment or platform. This involves assessing their current state to gauge compatibility with the target environment and defining the migration strategy, timeline, and required resources. Additionally, identifying potential risks and challenges associated with the migration process and devising mitigation strategies are integral parts of this stage.
  • Assessment. During the assessment phase, the team conducts a thorough analysis of the source code to accurately estimate the migration timeframe and cost. As a first step, we apply Metrics - a set of Ispirer’s proprietary assessment tools tailored to different programming languages. These metrics automatically analyze the source application, gathering essential information and generating a comprehensive report. This report combined with the insights gathered during the expert review of the source code serves as the basis for estimating the delivery time and cost of the migration project.

APP Services general

  • Automated conversion with Ispirer Toolkit. Considering the inherent characteristics of the original technology, Ispirer Toolkit can provide varying default levels of automated code conversion. Importantly, Ispirer experts can iteratively customize the tools to meet the specific properties and patterns of the source code and thus increase the level of automated conversion.
  • Post-conversion refinement. Often an application may contain code segments that are impossible or ineffective to migrate automatically. In such a case, our team of Ispirer experts leverages their extensive knowledge and expertise to meticulously execute the manual migration of the remaining code. Moreover, this stage involves fine-tuning the application to improve its performance in the new environment. This may include optimizing resource allocation, tuning database configurations, and addressing any performance bottlenecks.
  • Functional testing. Functional testing ensures that the migrated application behaves as expected and meets the functional requirements in the new environment. The Ispirer experts run hundreds of tests to ensure that the converted application is reliable and meets user requirements, business objectives, and industry standards.

Why choose conversion over developing a new app?

Seasoned Team

Same functionality, new application

Migration does not require labor-intensive development of new functionality from scratch. Your application will be converted to a new technology while maintaining the original functionality

Enhanced efficiency

Architecture preserved or modified

By default, automated conversion implies preserving the initial architecture which is easier to maintain. It is also possible to transform the app architecture, for example, from desktop to the web and thus improve accessibility and scalability


Legacy System Transformation

Migrating legacy systems to modern architectures or platforms can future-proof your application, making it easier to maintain, update, and extend in the long term

Advanced security

The speed of conversion

Migrating an application is much faster than creating a new one from scratch. Automated migration with Ispirer Toolkit minimizes manual effort and may speed up the delivery by 2-3 times


Performance and Scalability

Through conversion, you can optimize the application's architecture and infrastructure, improving scalability and performance without the need to rebuild everything

Advanced security

No need for documentation

To perform the conversion, we go by your source code. There is no need to have detailed documentation in place to start the conversion as is the case with development

Looking for COBOL to Java Conversion Services?

Drop us a line and we’ll estimate your project for free!

Request a quote

Conversion Samples of COBOL to Java

Ispirer Toolkit analyzes all object dependencies during the conversion process and provides not only line-by-line conversion, but resolves type conversions as well. In addition, the software understands and transforms the necessary inheritance dependencies. It parses the entire source code, builds an internal tree with all the information about the objects, and uses it in the migration process.

To convert structures, we have implemented additional type conversion classes to store variable sizes to convert redefines and arrays so that they work similar to COBOL logic. For more information review the code samples below.

Common variables declaration structure conversion:

  2. 01 varlnk.
  3. 05 varlnk-1 PIC 999.
  4. 05 varlnk-2 PIC X(10).
  5. 05 varlnk-3 PIC 9(7).
  2. public class Varlnk extends StructureModel {
  3. private int sizes[];
  4. public PictureType<Integer> Varlnk1 = new PictureType<>(PictureType.Type.Integer, new DecimalFormat("999"));
  5. public PictureType<String> Varlnk2 = new PictureType<>(PictureType.Type.String, new AlphanumericFormat("X(10)"));
  6. public PictureType<Integer> Varlnk3 = new PictureType<>(PictureType.Type.Integer, new DecimalFormat("9(7)"));
  7. public Varlnk() {
  8. sizes = new int[] { Varlnk1.getSize(),Varlnk2.getSize(),Varlnk3.getSize() };
  9. }
  10. @Override
  11. public String toString() {
  12. return "" + Varlnk1 + Varlnk2 + Varlnk3;
  13. }
  14. @Override
  15. public void setData(char[] data) {
  16. setData(getStringValues(data, sizes));
  17. }
  18. @Override
  19. public void setData(String[] data) {
  20. Varlnk1.setDataFromFile(data[0].getBytes());
  21. Varlnk2.setValue(data[1]);
  22. Varlnk3.setDataFromFile(data[2].getBytes());
  23. }
  24. @Override
  25. public int getSize() {
  26. int sum = 0;
  27. for(int i = 0; i < sizes.length; i ++) {
  28. sum += sizes[i];
  29. }
  30. return sum;
  31. }
  32. @Override
  33. public void initialize() {
  34. Varlnk1.initialize();
  35. Varlnk2.initialize();
  36. Varlnk3.initialize();
  37. }
  38. @Override
  39. public byte[] toFile() {
  40. byte[] structure = new byte[] { };
  41. structure = ArrayUtils.addAll(structure, Varlnk1.toFile());
  42. structure = ArrayUtils.addAll(structure, Varlnk2.toFile());
  43. structure = ArrayUtils.addAll(structure, Varlnk3.toFile());
  44. return structure;
  45. }
  46. @Override
  47. public void setDataFromFile(byte[] bytes) {
  48. bytes = getFullArray(bytes);
  49. Varlnk1.setDataFromFile(Arrays.copyOf(bytes, Varlnk1.getSize()));
  50. bytes = Arrays.copyOfRange(bytes, Varlnk1.getSize(), bytes.length);
  51. Varlnk2.setDataFromFile(Arrays.copyOf(bytes, Varlnk2.getSize()));
  52. bytes = Arrays.copyOfRange(bytes, Varlnk2.getSize(), bytes.length);
  53. Varlnk3.setDataFromFile(Arrays.copyOf(bytes, Varlnk3.getSize()));
  54. bytes = Arrays.copyOfRange(bytes, Varlnk3.getSize(), bytes.length);
  55. }
  56. @Override
  57. public void setDefaultValue(PictureType.DefaultValue value) {
  58. Varlnk1.setDefaultValueFromStructure(value);
  59. Varlnk2.setDefaultValueFromStructure(value);
  60. Varlnk3.setDefaultValueFromStructure(value);
  61. }
  62. }
  64. public Varlnk varlnk = new Varlnk();

Common REDEFINES conversion:

  2. 01 var1 PIC XXX VALUE '111'.
  3. 01 var2 REDEFINES var1.
  4. 05 vvv1 PIC 9.
  5. 05 vvv2 PIC 99.
  2. private StrField Var1 = new StrField("XXX", "111");
  3. public Var2 var2 = new Var2(Var1);
  6. public class Var2 extends StructureModel {
  7. private int sizes[];
  8. public PictureType<Integer> Vvv1 = new PictureType<>(PictureType.Type.Integer, new DecimalFormat("9"));
  9. public PictureType<Integer> Vvv2 = new PictureType<>(PictureType.Type.Integer, new DecimalFormat("99"));
  10. public Var2(StructureModel ... objs) {
  11. sizes = new int[] { Vvv1.getSize(),Vvv2.getSize() };
  12. initRedefineObjs(objs);
  13. }
  14. @Override
  15. public String toString() {
  16. return "" + Vvv1 + Vvv2;
  17. }
  18. @Override
  19. public void setData(char[] data) {
  20. setData(getStringValues(data, sizes));
  21. }
  22. @Override
  23. public void setData(String[] data) {
  24. Vvv1.setDataFromFile(data[0].getBytes());
  25. Vvv2.setDataFromFile(data[1].getBytes());
  26. redefine();
  27. }
  28. public void setVvv1(Integer Vvv1) {
  29. this.Vvv1.setValue(Vvv1);
  30. redefine();
  31. }
  32. public void setVvv2(Integer Vvv2) {
  33. this.Vvv2.setValue(Vvv2);
  34. redefine();
  35. }
  36. @Override
  37. public int getSize() {
  38. int sum = 0;
  39. for(int i = 0; i < sizes.length; i ++) {
  40. sum += sizes[i];
  41. }
  42. return sum;
  43. }
  44. @Override
  45. public void initialize() {
  46. Vvv1.initialize();
  47. Vvv2.initialize();
  48. }
  49. @Override
  50. public byte[] toFile() {
  51. byte[] structure = new byte[] { };
  52. structure = ArrayUtils.addAll(structure, Vvv1.toFile());
  53. structure = ArrayUtils.addAll(structure, Vvv2.toFile());
  54. return structure;
  55. }
  56. @Override
  57. public void setDataFromFile(byte[] bytes) {
  58. bytes = getFullArray(bytes);
  59. Vvv1.setDataFromFile(Arrays.copyOf(bytes, Vvv1.getSize()));
  60. bytes = Arrays.copyOfRange(bytes, Vvv1.getSize(), bytes.length);
  61. Vvv2.setDataFromFile(Arrays.copyOf(bytes, Vvv2.getSize()));
  62. bytes = Arrays.copyOfRange(bytes, Vvv2.getSize(), bytes.length);
  63. }
  64. @Override
  65. public void setDefaultValue(PictureType.DefaultValue value) {
  66. Vvv1.setDefaultValueFromStructure(value);
  67. Vvv2.setDefaultValueFromStructure(value);
  68. redefine();
  69. }
  70. }

Common array conversion:

  2. 01 var5.
  3. 05 var5-occurs OCCURS 2 TIMES.
  4. 10 var5-occurs-txt PIC X(6) VALUE ' TEXT1'.
  2. public List<PictureType<String>> Var5 = Stream.generate(()->new PictureType<String>(new AlphanumericFormat("X(6)"), " TEXT1")).limit(2).collect(Collectors.toList());

COBOL call chain with PERFORMs conversion:

  2. TopLevel.
  3. DISPLAY "In TopLevel. Starting to run program"
  4. PERFORM OneLevelDown
  5. DISPLAY "Back in TopLevel.".
  6. STOP RUN.
  8. OneLevelDown.
  9. DISPLAY ">>>> Now in OneLevelDown"
  10. PERFORM TwoLevelsDown
  11. DISPLAY ">>>> Back in OneLevelDown".
  13. TwoLevelsDown.
  14. DISPLAY ">>>>>>>> Now in TwoLevelsDown."
  15. PERFORM ThreeLevelsDown.
  16. DISPLAY ">>>>>>>> Back in TwoLevelsDown.".
  18. ThreeLevelsDown.
  19. DISPLAY ">>>>>>>>>>>> Now in ThreeLevelsDown".
  2. private static CobSmplCbl instance;
  3. public boolean isCalled = false;
  5. public void CobSmplCblProcedureDivision() {
  6. toplevel(true);
  7. }
  8. private void toplevel(boolean isPerform) {
  9. System.out.println("In TopLevel. Starting to run program");
  10. oneleveldown(false);
  11. System.out.println("Back in TopLevel.");
  12. throw new StopRun();
  13. }
  14. private void oneleveldown(boolean isPerform) {
  15. System.out.println(">>>> Now in OneLevelDown ");
  16. twolevelsdown (false);
  17. System.out.println(">>>> Back in OneLevelDown ");
  18. }
  19. private void twolevelsdown(boolean isPerform) {
  20. System.out.println(">>>>>>>> Now in TwoLevelsDown.");
  21. threelevelsdown(false);
  22. System.out.println(">>>>>>>> Back in TwoLevelsDown.");
  23. }
  24. private void threelevelsdown(boolean isPerform) {
  25. System.out.println(">>>>>>>>>>>> Now in ThreeLevelsDown");
  26. }
  27. public static CobSmplCbl getInstance() {
  28. return instance == null ? instance = new CobSmplCbl() : instance;
  29. }
  31. public static void cancel() {
  32. instance = new CobSmplCbl();
  33. }

Copy statement conversion:

During the conversion stage, the code from the copy files is included in the program and replaced with the appropriate copy statements, thereafter the program converts the entire code.

If statement conversion:

  2. if var3 = var4
  3. move "D" to var3
  4. else
  5. move " " to var3.
  2. if (Var3.compareTo(Var4) == 0) {
  3. Var1.setData("D");
  4. }
  5. else {
  6. Var3.setValue(" ");
  7. }

PERFORM UNTIL statement conversion:

  2. PERFORM UNTIL IterCount = 5
  3. ADD 1 TO IterCount
  2. while (Itercount != 5) {
  3. Itercount.setValue(Itercount + 1);
  4. }

Download Sample Code

You have just examined only a piece of the COBOL to Java conversion sample. You can download the entire application migration sample for free by filling out the form. Once you get the code sample, you will be able to:

  • Explore how well Ispirer Toolkit migrates the source code to the target technology without downloading it.
  • Analyze and compare the source sample with your code to understand which components of your application can be automatically converted using Ispirer Toolkit.
  • Run, play with and test an application containing nearly 600 lines of code.

See for yourself that Ispirer Toolkit can automatically convert not only a single piece of code, but an entire application. Most likely, complex code will require customization of the toolkit, but our experts can add new conversion rules within 3-5 business days. As a result, using Ispirer Toolkit you will get readable and maintainable code of manual conversion quality in the shortest time possible.

Snatch a totally free opportunity to see the high efficiency of Ispirer Toolkit!

Get your sample code
Enter your name.

Enter a valid e-mail address.

Select your country.

Invalid input.

Conversion of Various COBOL Dialects

  • Micro Focus COBOL
  • Realia COBOL
  • Fujitsu COBOL
  • Enterprise COBOL
  • GnuCOBOL
  • Microsoft COBOL
  • isCOBOL
  • COBOL/400
  • Hitachi COBOL

Accelerating our customers’ application modernization journey

The customer received a modernized application in C#, which is a feature-for-feature equivalent to the original Delphi application. Thus getting the ability to easily maintain and enhance the newly migrated code.

December 04, 2018

The company develops state-of-the-art automation systems for operation, disposition, monitoring and control for all industries. The customer needed to reanimate their software by moving from Delphi to C#.

Our customer ia a healthcare organization dedicated to improve funding and clinical performance of hospitals and healthcare systems. The company's requirement was to get the application on the new C# .NET platform.

previous arrow
next arrow

Why Migrate with Ispirer

With a proven track record validated by both time and satisfied clients, Ispirer software and services stand as the pinnacle choice for database migration and application modernization. Leveraging years of experience and client feedback, Ispirer guarantees smooth transitions and optimized operational efficiency for businesses of all scales.

  • Seasoned team. Ensuring high security and performance standards is what we do best, thanks to our impressive experience in building reliable and scalable solutions.
  • Technology expertise. Having 20+ years of experience our team has gained a wide pool of expertise in various programming languages from the rarest to the most popular ones.
  • Top-notch data security. We comply with ISO 27001 security management requirements with comprehensive policies and processes, advanced security technology, and skilled professionals.
  • Proprietary tools. In migration projects we employ Ispirer proprietary tools which underscores our dedication to delivering solutions of utmost reliability and performance. Compiled on a daily basis, this toolkit continually integrates dozens of new conversion rules, thereby consistently enhancing the automation capabilities. Find out more about our solution in the infographic:
Infographics showing how automatic application and database migration brings benefits

What Our Customers Say

"Beckman Coulter provided as much of the information as we could but there was a lot of functionality that we did not know. This is where Ispirer talents became apparent as they forensically reengineered functionality."

"We are now successfully running live on the new system, with the updated PB apps. I want to express my thanks to Ispirer team. You made this project a success!!! I was happy to work with you and would highly recommend Ispirer!"

"Because of Ispirer and MnMTK, our team was able to devote its time to build the infrastructure for new Java programs instead of spending time on converting code. The produced Java code met all our maintainability, readability and performance requirements."

"This approach was very successful avoiding any confusion at the first stage, and achieved high conversion rate in the end. The project was completed successfully, they say they couldn't make it without MnMTK 2017 and excellent extension support from lspirer."

"At the onset of the engagement the Ispirer MnMTK was expanded to meet the specific requirements of our migration prior to being delivered for our use. Once this phase of the project was complete we were provided with the expanded toolkit."

"We have found the Ispirer team to be knowledgeable and responsive and we have found the tooling to be flexible enough to be easily adapted to our coding conventions."

previous arrow
next arrow

Get in touch with us!

Have questions about migration from COBOL to Java?

Contact us