Blog |

How to Fix The Service Configuration Error in Java

How to Fix The Service Configuration Error in Java
Table of Contents

A ServiceConfigurationError is thrown in Java when a service provider cannot be loaded successfully. For instance, the format of the provider-configuration file appears to violate some aspect of the specification.

 

Syntax of ServiceConfigurationError:

public class ServiceConfigurationError
extends Error

The ServiceConfigurationError class belongs to the Error class, which itself is an extension of the Throwable class, which is an extension of the Object class. Additionally, the Serializable interface is implemented.

Object -> Throwable -> Error -> ServiceConfigurationError

 

When does the ServiceConfigurationError occur?

The ServiceConfigurationError exception occurs when something goes wrong while loading service providers like Javax Servlet, Hibernate or Java Swing in your application. However, below are some other related scenarios where this error also can occur:

  • On violation of the specification of the provider-configuration file.
  • An IOException occurs when reading the provider-configuration file.
  • When a concrete provider class named in provider-configuration cannot be found while working.
  • When the concrete provider class is not a subclass of the service class.
  • When the concrete provider class cannot be instantiated or some other kind of error occurs.

 

Example: Writing an Image to a New File Path

import java.awt.image.BufferedImage;
import java.io.*;
import javax.imageio.ImageIO;

public class Demo {

public static void createImage2() {
   try {
     BufferedImage bImage = ImageIO.read(new
File("//cdn.rollbar.com/Users/demo/Documents/Images/download.jpg"));
     ByteArrayOutputStream bos = new ByteArrayOutputStream();
     ImageIO.write(bImage, "jpg", bos);
     byte[] data = bos.toByteArray();
     ByteArrayInputStream bis = new ByteArrayInputStream(data);
     BufferedImage bImage2 = ImageIO.read(bis);
     ImageIO.write(bImage2, "jpg", new File("output.jpg"));
   } catch (IOException e) {
     e.printStackTrace();
   }
   System.out.println("image created successfully");
 }

  public static void main(String[] args) {
    createImage2();
  }
}

Output:

The below output appears when dealing with an image input or output in a very new system where the dependencies are not yet correctly set up.

Exception in thread "main" java.util.ServiceConfigurationError: javax.imageio.spi.ImageReaderSpi: Provider com.twelvemonkeys.imageio.plugins.jpeg.JPEGImageReaderSpi not found
at java.util.ServiceLoader.fail(ServiceLoader.java:239)
at java.util.ServiceLoader.access$300(ServiceLoader.java:185)
at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:372)
at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:404)
at java.util.ServiceLoader$1.next(ServiceLoader.java:480)
at javax.imageio.spi.IIORegistry.registerApplicationClasspathSpis(IIORegistry.java:210)
at javax.imageio.spi.IIORegistry.<init>(IIORegistry.java:138)
at javax.imageio.spi.IIORegistry.getDefaultInstance(IIORegistry.java:159)
at javax.imageio.ImageIO.<clinit>(ImageIO.java:66)

 

Handling ServiceConfigurationError in Java

Let's examine the debugging and handling of this Java exception. The ideal strategy is to use try-catch blocks and to utilize a competent IDE that will fetch dependencies automatically. Even while it might not always work, this could help avoid the issue. We'll examine how to correct the aforementioned example using a try-catch block after running the code in an IDE.

 

Working Code:

import java.awt.image.BufferedImage;
import java.io.*;
import java.util.ServiceConfigurationError;
import javax.imageio.ImageIO;

public class Demo {

  public static void createImage2() {
    try {
      BufferedImage bImage = ImageIO.read(new File("//cdn.rollbar.com/Users/demo/Documents/Images/download.jpg"));
      ByteArrayOutputStream bos = new ByteArrayOutputStream();
      ImageIO.write(bImage, "jpg", bos);
      byte[] data = bos.toByteArray();
      ByteArrayInputStream bis = new ByteArrayInputStream(data);
      BufferedImage bImage2 = ImageIO.read(bis);
      ImageIO.write(bImage2, "jpg", new File("output.jpg"));
    } catch (IOException e) {
      e.printStackTrace();
    } catch (ServiceConfigurationError e) {
      System.out.println("Exception caught");
    }
    System.out.println("image created successfully");
  }

  public static void main(String[] args) {
    createImage2();
  }
}

 

 

Output:

image created successfully

 

Conclusion

By adding a try-catch block and, as good programming practice, running the code in an IDE that can automatically install any software dependencies, a developer can fix ServiceConfigurationError seamlessly.

 

Track, Analyze and Manage Errors With Rollbar

Managing errors and exceptions in your code is challenging. It can make deploying production code an unnerving experience. Being able to track, analyze, and manage errors in real-time can help you proceed with more confidence. Rollbar automates error monitoring and triaging, making fixing Java errors easier than ever. Sign Up Today!

Related Resources

"Rollbar allows us to go from alerting to impact analysis and resolution in a matter of minutes. Without it we would be flying blind."

Error Monitoring

Start continuously improving your code today.

Get Started Shape