[2 days left] What’s wrong with your cloud strategy? Learn why multicloud solutions matter with Nimble Storage.Register Now

x
?
Solved

Validating xml documents using external DTD's

Posted on 2008-10-16
1
Medium Priority
?
860 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
1 Comment
 
LVL 12

Accepted Solution

by:
basav_com earned 750 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

What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

Question has a verified solution.

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

An old method to applying the Singleton pattern in your Java code is to check if a static instance, defined in the same class that needs to be instantiated once and only once, is null and then create a new instance; otherwise, the pre-existing insta…
Introduction This article is the first of three articles that explain why and how the Experts Exchange QA Team does test automation for our web site. This article explains our test automation goals. Then rationale is given for the tools we use to a…
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 tutorial covers a step-by-step guide to install VisualVM launcher in eclipse.
Suggested Courses

656 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