[ http://issues.apache.org/jira/browse/XERCESJ-1114?page=all ]

Michael Glavassevich reassigned XERCESJ-1114:
---------------------------------------------

    Assignee: Michael Glavassevich

> Parameter entities in the internal subset using DOM.getInternalsubset are 
> either resolved or skipped
> ----------------------------------------------------------------------------------------------------
>
>                 Key: XERCESJ-1114
>                 URL: http://issues.apache.org/jira/browse/XERCESJ-1114
>             Project: Xerces2-J
>          Issue Type: Bug
>          Components: DOM (HTML)
>    Affects Versions: 2.7.1
>         Environment: Windows XP JDK 1.4 
>            Reporter: Laszlo Bartos
>         Assigned To: Michael Glavassevich
>
> I have to print out the internal subset of XML documents, but the parameter 
> entity refs are always resolved by DOM parser. If I set the feature 
> http://xml.org/sax/features/external-parameter-entities to false, then it is 
> resolved to empty string (so the parameter entity ref disappears).
>  
> To reproduce the problem:
>  
> 1. Save this as an XML document  
>  
> <?xml version="1.0" encoding="utf-8"?>
> <!DOCTYPE PEtest PUBLIC "-//TEST//DTD PETest XML//EN" "petest.dtd" [ <!ENTITY 
> % local.ent PUBLIC "-//TEST//DTD PETest Extension XML//EN" ""> %local.ent; ]> 
> <PETest> <front> </front> <body> </body></PETest>
>  
> 2. Set the feature http://xml.org/sax/features/external-parameter-entities to 
> false  and call the DOM parser. Here is a sample program:
> public static void main(String argv[]) {
>         ParserWrapper parser = null;
>         // create parser
>         try {
>             parser = 
> (ParserWrapper)Class.forName("dom.wrappers.Xerces").newInstance();
>             parser.setFeature("http://xml.org/sax/features/namespaces";, 
> false);
>             parser.setFeature("http://xml.org/sax/features/validation";, 
> false);
>             
> parser.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd";,
>  false);
>             
> parser.setFeature("http://apache.org/xml/features/validation/schema";, false);
>             
> parser.setFeature("http://apache.org/xml/features/validation/dynamic";, false);
>             parser.setFeature("http://apache.org/xml/features/xinclude";, 
> false);
>             
> parser.setFeature("http://xml.org/sax/features/external-parameter-entities";, 
> false);
>             // parse file
>             Document document = parser.parse(argv[0]);
>             System.out.println(document.getDoctype().getInternalSubset());
>         }
>         catch (Exception e) {
>           e.printStackTrace(System.err);
>         }
>     } // main(String[])
> Result: The getInternalSubset will return 
> <!ENTITY % local.ent PUBLIC "-//TEST//DTD PETest Extension XML//EN" "">
> which means that the entity ref is resolved to empty string. (If I set 
> http://xml.org/sax/features/external-parameter-entities to true, then the 
> parameter entity ref is correctly resolved and returned in getInternalSubset, 
> however I need the reference without resolving it.)  
> I have found that if I add the following code into 
> org.apache.xerces.parsers.AbstractDOMParser.startParameterEntity(String, 
> XMLResourceIdentifier, String, Augmentations): 
>    ...
>    //append the paremeter entity reference if it was not resolved
>         if (fInDTD && fInternalSubset != null && !fInDTDExternalSubset && 
> augs != null) {
>           Object skip = augs.getItem(Constants.ENTITY_SKIPPED);
>           if (skip instanceof Boolean && (Boolean)skip == Boolean.TRUE) { 
>             fInternalSubset.append(name);
>             fInternalSubset.append(";\n");
>           }
>         }
>  
> then the parameter entity ref is included in the internal subset. 

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to