Solved

Validating xml documents using external DTD's

Posted on 2008-10-16
1
851 Views
Last Modified: 2012-05-05
Hello Experts,

In my application i am parsing xml files which includes dtd file path in DOCTYPE declaration. I do not want parser to use the dtd file which is reffered in same xml file, instead of that I would like to pass dtd file path from java program.
I have done lot of googling and come to know that it could be done by entityResolver. However, the problem is that when I am passing path from the application it gives error during validation like below...

"The markup declarations contained or pointed to by the document type declaration must be well-formed."

The piece of code I am using looks like;

public class TestValidation extends DefaultHandler implements EntityResolver {

//---custom dtd file to set for validation------
public static String customDTD= "../../../demo/dtdFile/test.dtd";

//-----------Here validation xml file private static void validatePackages(XML xmlFileName) throws IOException, ParserConfigurationException, SAXException {

TestValidation errorHandler = new TestValidation ();

SAXParserFactory factory = SAXParserFactory.newInstance();

factory.setValidating(true);

try {

SAXParser parser = factory.newSAXParser();
if(!xmlFileName.exists()) {
System.err.println("Did not find file ");
}
parser.parse(f, errorHandler);
}

}finally {

errorHandler.setErrors(errorcount);
}

}

//-------------------Checking for dtd file given in xml file if yes then setting it to custom file----------------------------

public InputSource resolveEntity(String publicId, String systemId)
{

if (systemId.contains(".dtd")){
System.out.println("publicId="publicId" systemId="+systemId );

return new InputSource(new ByteArrayInputStream(customDTD.getBytes()));
}

else{
System.out.println("Other tag found");
return null;
}
}

public void error(SAXParseException e) throws SAXParseException {

---- Handling errors found;
}

}

I think the way I am providing dtd file path is wrong.
Can you please suggest the modified code for this?

Thanks,
Shailesh
0
Comment
Question by:ShaileshShinde
1 Comment
 
LVL 12

Accepted Solution

by:
basav_com earned 250 total points
ID: 22740155
Note : This is just a workaround to the above problem.  For all, please ignore the following solution and reply to the actual question posted by ShaileshShinde.

Read the file using FileReader and replace the 'doctype' declaration with your required data and create an intermediate temp .xml file.

Now read the above temp xml file.

0

Featured Post

Netscaler Common Configuration How To guides

If you use NetScaler you will want to see these guides. The NetScaler How To Guides show administrators how to get NetScaler up and configured by providing instructions for common scenarios and some not so common ones.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

INTRODUCTION Working with files is a moderately common task in Java.  For most projects hard coding the file names, using parameters in configuration files, or using command-line arguments is sufficient.   However, when your application has vi…
For beginner Java programmers or at least those new to the Eclipse IDE, the following tutorial will show some (four) ways in which you can import your Java projects to your Eclipse workbench. Introduction While learning Java can be done with…
Viewers will learn about if statements in Java and their use The if statement: The condition required to create an if statement: Variations of if statements: An example using if statements:
This video teaches viewers about errors in exception handling.

809 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question