Search code examples
javaandroidxmljdom-2

Error in XML parser with JDOM2 package in android studio (java)


This code should convert xml to json and i got below error in the first of it. SAXBuilder can't read xml file.

I use JDOM2 library in this code.

Java code:

package com.example.books_xmltojson;

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.EditText;
import org.jdom2.Document;
import org.jdom2.input.SAXBuilder;
import java.io.InputStream;

public class MainActivity extends AppCompatActivity {
    EditText edittext;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        edittext = findViewById(R.id.edittext);
        // SAX builder 
        InputStream input = getResources().openRawResource(R.raw.books);
        SAXBuilder builder = new SAXBuilder();
        try {
            Document doc = builder.build(input);
        } catch (Exception e) {
                edittext.setText(e.toString());
      } 
   }
}

XML R.raw.books:

// Resources
<catalog>
   <book>
      <title>XML Developer's Guide</title>
      <genre>Computer</genre>

   </book>
   <book>
      <title>Midnight Rain</title>
      <genre>Fantasy</genre>
   </book>
</catalog>

The error:

org.jdom2.JDOMException: http://xml.org/sax/features/external-general-entities feature http://xml.org/sax/features/external-general-entities not supported for SAX driver org.apache.harmony.xml.ExpatReader


Solution

  • First i had to implement xercesImpl.jar to my project. Then i had to change the SAXBuilder as below:

    SAXBuilder builder = new SAXBuilder("org.apache.xerces.parsers.SAXParser");
    builder.setFeature("http://xml.org/sax/features/external-general-entities", false);
    

    And guess what, ChatGPT solved my problem step by step. it's amazing.