Buggy code:
private final QName fRootElement = new QName ( ) ; private boolean fInCDATASection = false ; private int [ ] fElementIndexStack = new int [ 8 ] ; private int [ ] fContentSpecTypeStack = new int [ 8 ] ; private QName [ ] fElementQNamePartsStack = new QName [ 8 ] ; private QName [ ] fElementChildren = new QName [ 32 ] ; private int fElementChildrenLength = 0 ; private int [ ] fElementChildrenOffsetStack = new int [ 32 ] ; private int fElementDepth = - 1 ; private boolean fSeenRootElement = false ; private boolean fInElementContent = false ; private XMLElementDecl fTempElementDecl = new XMLElementDecl ( ) ; private final XMLAttributeDecl fTempAttDecl = new XMLAttributeDecl ( ) ; private final XMLEntityDecl fEntityDecl = new XMLEntityDecl ( ) ; private final QName fTempQName = new QName ( ) ; private final StringBuffer fBuffer = new StringBuffer ( ) ; protected DatatypeValidator fValID ; protected DatatypeValidator fValIDRef ; protected DatatypeValidator fValIDRefs ; protected DatatypeValidator fValENTITY ; protected DatatypeValidator fValENTITIES ; protected DatatypeValidator fValNMTOKEN ; protected DatatypeValidator fValNMTOKENS ; protected DatatypeValidator fValNOTATION ; public XMLDTDValidator ( ) { } DTDGrammarBucket getGrammarBucket ( ) { } public void reset ( XMLComponentManager componentManager ) throws XMLConfigurationException { } public String [ ] getRecognizedFeatures ( ) { } public void setFeature ( String featureId , boolean state ) throws XMLConfigurationException { } public String [ ] getRecognizedProperties ( ) { } public void setProperty ( String propertyId , Object value ) throws XMLConfigurationException { } public Boolean getFeatureDefault ( String featureId ) { } public Object getPropertyDefault ( String propertyId ) { } public void setDocumentHandler ( XMLDocumentHandler documentHandler ) { } public XMLDocumentHandler getDocumentHandler ( ) { } public void setDocumentSource ( XMLDocumentSource source ) { } public XMLDocumentSource getDocumentSource ( ) { } public void startDocument ( XMLLocator locator , String encoding , NamespaceContext namespaceContext , Augmentations augs ) throws XNIException { } public void xmlDecl ( String version , String encoding , String standalone , Augmentations augs ) throws XNIException { } public void doctypeDecl ( String rootElement , String publicId , String systemId , Augmentations augs ) throws XNIException { } public void startElement ( QName element , XMLAttributes attributes , Augmentations augs ) throws XNIException { } public void emptyElement ( QName element , XMLAttributes attributes , Augmentations augs ) throws XNIException { } public void characters ( XMLString text , Augmentations augs ) throws XNIException { } public void ignorableWhitespace ( XMLString text , Augmentations augs ) throws XNIException { } public void endElement ( QName element , Augmentations augs ) throws XNIException { } public void startCDATA ( Augmentations augs ) throws XNIException { } public void endCDATA ( Augmentations augs ) throws XNIException { } public void endDocument ( Augmentations augs ) throws XNIException { } public void comment ( XMLString text , Augmentations augs ) throws XNIException { } public void processingInstruction ( String target , XMLString data , Augmentations augs ) throws XNIException { } public void startGeneralEntity ( String name , XMLResourceIdentifier identifier , String encoding , Augmentations augs ) throws XNIException { } public void endGeneralEntity ( String name , Augmentations augs ) throws XNIException { } public void textDecl ( String version , String encoding , Augmentations augs ) throws XNIException { } public final boolean hasGrammar ( ) { } public final boolean validate ( ) { } protected void addDTDDefaultAttrsAndValidate ( QName elementName , int elementIndex , XMLAttributes attributes ) throws XNIException { } protected String getExternalEntityRefInAttrValue ( String nonNormalizedValue ) { } protected void validateDTDattribute ( QName element , String attValue , XMLAttributeDecl attributeDecl ) throws XNIException { } protected boolean invalidStandaloneAttDef ( QName element , QName attribute ) { } private boolean normalizeAttrValue ( XMLAttributes attributes , int index ) { } private final void rootElementSpecified ( QName rootElement ) throws XNIException { } private int checkContent ( int elementIndex , QName [ ] children , int childOffset , int childCount ) throws XNIException { } private int getContentSpecType ( int elementIndex ) { } private void charDataInContent ( ) { } private String getAttributeTypeName ( XMLAttributeDecl attrDecl ) { switch ( attrDecl . simpleType . type ) { case XMLSimpleType . TYPE_ENTITY : { return attrDecl . simpleType . list ? XMLSymbols . fENTITIESSymbol : XMLSymbols . fENTITYSymbol ; } case XMLSimpleType . TYPE_ENUMERATION : { StringBuffer buffer = new StringBuffer ( ) ; buffer . append ( '(' ) ; for ( int i = 0 ; i < ( attrDecl . simpleType . enumeration . length ) ; i ++ ) { if ( i > 0 ) { <START_BUG> buffer . append ( "|" ) ; <END_BUG> } buffer . append ( attrDecl . simpleType . enumeration [ i ] ) ; } buffer . append ( ')' ) ; return fSymbolTable . addSymbol ( buffer . toString ( ) ) ; } case XMLSimpleType . TYPE_ID : { return XMLSymbols . fIDSymbol ; } case XMLSimpleType . TYPE_IDREF : { return attrDecl . simpleType . list ? XMLSymbols . fIDREFSSymbol : XMLSymbols . fIDREFSymbol ; } case XMLSimpleType . TYPE_NMTOKEN : { return attrDecl . simpleType . list ? XMLSymbols . fNMTOKENSSymbol : XMLSymbols . fNMTOKENSymbol ; } case XMLSimpleType . TYPE_NOTATION : { return XMLSymbols . fNOTATIONSymbol ; } } return XMLSymbols . fCDATASymbol ; } protected void init ( ) { } private void ensureStackCapacity ( int newElementDepth ) { } protected boolean handleStartElement ( QName element , XMLAttributes attributes , Augmentations augs ) throws XNIException { } protected void startNamespaceScope ( QName element , XMLAttributes attributes , Augmentations augs ) { } protected void handleEndElement ( QName element , Augmentations augs , boolean isEmpty ) throws XNIException { } protected void endNamespaceScope ( QName element , Augmentations augs , boolean isEmpty ) { } protected boolean isSpace ( int c ) { } public boolean characterData ( String data , Augmentations augs ) { } }

Fix:
buffer . append ( '|' ) ;