Coverage Report - org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Reader
 
Classes in this File Line Coverage Branch Coverage Complexity
MetadataXpp3Reader
0%
0/453
0%
0/150
6.304
 
 1  
 /*
 2  
  * $Id$
 3  
  */
 4  
 
 5  
 package org.apache.maven.artifact.repository.metadata.io.xpp3;
 6  
 
 7  
   //---------------------------------/
 8  
  //- Imported classes and packages -/
 9  
 //---------------------------------/
 10  
 
 11  
 import java.io.IOException;
 12  
 import java.io.InputStream;
 13  
 import java.io.Reader;
 14  
 import java.text.DateFormat;
 15  
 import java.util.Locale;
 16  
 import org.apache.maven.artifact.repository.metadata.Metadata;
 17  
 import org.apache.maven.artifact.repository.metadata.Plugin;
 18  
 import org.apache.maven.artifact.repository.metadata.Snapshot;
 19  
 import org.apache.maven.artifact.repository.metadata.Versioning;
 20  
 import org.codehaus.plexus.util.ReaderFactory;
 21  
 import org.codehaus.plexus.util.xml.pull.MXParser;
 22  
 import org.codehaus.plexus.util.xml.pull.XmlPullParser;
 23  
 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
 24  
 
 25  
 /**
 26  
  * Class MetadataXpp3Reader.
 27  
  * 
 28  
  * @version $Revision$ $Date$
 29  
  */
 30  0
 public class MetadataXpp3Reader {
 31  
 
 32  
 
 33  
       //--------------------------/
 34  
      //- Class/Member Variables -/
 35  
     //--------------------------/
 36  
 
 37  
     /**
 38  
      * If set the parser will be loaded with all single characters
 39  
      * from the XHTML specification.
 40  
      * The entities used:
 41  
      * <ul>
 42  
      * <li>http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent</li>
 43  
      * <li>http://www.w3.org/TR/xhtml1/DTD/xhtml-special.ent</li>
 44  
      * <li>http://www.w3.org/TR/xhtml1/DTD/xhtml-symbol.ent</li>
 45  
      * </ul>
 46  
      */
 47  0
     private boolean addDefaultEntities = true;
 48  
 
 49  
 
 50  
       //-----------/
 51  
      //- Methods -/
 52  
     //-----------/
 53  
 
 54  
     /**
 55  
      * Returns the state of the "add default entities" flag.
 56  
      * 
 57  
      * @return boolean
 58  
      */
 59  
     public boolean getAddDefaultEntities()
 60  
     {
 61  0
         return addDefaultEntities;
 62  
     } //-- boolean getAddDefaultEntities() 
 63  
 
 64  
     /**
 65  
      * Method getBooleanValue.
 66  
      * 
 67  
      * @param s
 68  
      * @param parser
 69  
      * @param attribute
 70  
      * @throws XmlPullParserException
 71  
      * @return boolean
 72  
      */
 73  
     public boolean getBooleanValue( String s, String attribute, XmlPullParser parser )
 74  
         throws XmlPullParserException
 75  
     {
 76  0
         return getBooleanValue( s, attribute, parser, null );
 77  
     } //-- boolean getBooleanValue( String, String, XmlPullParser ) 
 78  
 
 79  
     /**
 80  
      * Method getBooleanValue.
 81  
      * 
 82  
      * @param s
 83  
      * @param defaultValue
 84  
      * @param parser
 85  
      * @param attribute
 86  
      * @throws XmlPullParserException
 87  
      * @return boolean
 88  
      */
 89  
     public boolean getBooleanValue( String s, String attribute, XmlPullParser parser, String defaultValue )
 90  
         throws XmlPullParserException
 91  
     {
 92  0
         if ( s != null && s.length() != 0 )
 93  
         {
 94  0
             return Boolean.valueOf( s ).booleanValue();
 95  
         }
 96  0
         if ( defaultValue != null )
 97  
         {
 98  0
             return Boolean.valueOf( defaultValue ).booleanValue();
 99  
         }
 100  0
         return false;
 101  
     } //-- boolean getBooleanValue( String, String, XmlPullParser, String ) 
 102  
 
 103  
     /**
 104  
      * Method getByteValue.
 105  
      * 
 106  
      * @param s
 107  
      * @param strict
 108  
      * @param parser
 109  
      * @param attribute
 110  
      * @throws XmlPullParserException
 111  
      * @return byte
 112  
      */
 113  
     public byte getByteValue( String s, String attribute, XmlPullParser parser, boolean strict )
 114  
         throws XmlPullParserException
 115  
     {
 116  0
         if ( s != null )
 117  
         {
 118  
             try
 119  
             {
 120  0
                 return Byte.valueOf( s ).byteValue();
 121  
             }
 122  0
             catch ( NumberFormatException e )
 123  
             {
 124  0
                 if ( strict )
 125  
                 {
 126  0
                     throw new XmlPullParserException( "Unable to parse element '" + attribute + "', must be a byte", parser, null );
 127  
                 }
 128  
             }
 129  
         }
 130  0
         return 0;
 131  
     } //-- byte getByteValue( String, String, XmlPullParser, boolean ) 
 132  
 
 133  
     /**
 134  
      * Method getCharacterValue.
 135  
      * 
 136  
      * @param s
 137  
      * @param parser
 138  
      * @param attribute
 139  
      * @throws XmlPullParserException
 140  
      * @return char
 141  
      */
 142  
     public char getCharacterValue( String s, String attribute, XmlPullParser parser )
 143  
         throws XmlPullParserException
 144  
     {
 145  0
         if ( s != null )
 146  
         {
 147  0
             return s.charAt( 0 );
 148  
         }
 149  0
         return 0;
 150  
     } //-- char getCharacterValue( String, String, XmlPullParser ) 
 151  
 
 152  
     /**
 153  
      * Method getDateValue.
 154  
      * 
 155  
      * @param s
 156  
      * @param parser
 157  
      * @param attribute
 158  
      * @throws XmlPullParserException
 159  
      * @return java.util.Date
 160  
      */
 161  
     public java.util.Date getDateValue( String s, String attribute, XmlPullParser parser )
 162  
         throws XmlPullParserException
 163  
     {
 164  0
         return getDateValue( s, attribute, null, parser );
 165  
     } //-- java.util.Date getDateValue( String, String, XmlPullParser ) 
 166  
 
 167  
     /**
 168  
      * Method getDateValue.
 169  
      * 
 170  
      * @param s
 171  
      * @param parser
 172  
      * @param dateFormat
 173  
      * @param attribute
 174  
      * @throws XmlPullParserException
 175  
      * @return java.util.Date
 176  
      */
 177  
     public java.util.Date getDateValue( String s, String attribute, String dateFormat, XmlPullParser parser )
 178  
         throws XmlPullParserException
 179  
     {
 180  0
         if ( s != null )
 181  
         {
 182  0
             if ( dateFormat == null )
 183  
             {
 184  0
                 return new java.util.Date( Long.valueOf( s ).longValue() );
 185  
             }
 186  
             else
 187  
             {
 188  0
                 DateFormat dateParser = new java.text.SimpleDateFormat( dateFormat, Locale.US );
 189  
                 try
 190  
                 {
 191  0
                     return dateParser.parse( s );
 192  
                 }
 193  0
                 catch ( java.text.ParseException e )
 194  
                 {
 195  0
                     throw new XmlPullParserException( e.getMessage() );
 196  
                 }
 197  
             }
 198  
         }
 199  0
         return null;
 200  
     } //-- java.util.Date getDateValue( String, String, String, XmlPullParser ) 
 201  
 
 202  
     /**
 203  
      * Method getDoubleValue.
 204  
      * 
 205  
      * @param s
 206  
      * @param strict
 207  
      * @param parser
 208  
      * @param attribute
 209  
      * @throws XmlPullParserException
 210  
      * @return double
 211  
      */
 212  
     public double getDoubleValue( String s, String attribute, XmlPullParser parser, boolean strict )
 213  
         throws XmlPullParserException
 214  
     {
 215  0
         if ( s != null )
 216  
         {
 217  
             try
 218  
             {
 219  0
                 return Double.valueOf( s ).doubleValue();
 220  
             }
 221  0
             catch ( NumberFormatException e )
 222  
             {
 223  0
                 if ( strict )
 224  
                 {
 225  0
                     throw new XmlPullParserException( "Unable to parse element '" + attribute + "', must be a floating point number", parser, null );
 226  
                 }
 227  
             }
 228  
         }
 229  0
         return 0;
 230  
     } //-- double getDoubleValue( String, String, XmlPullParser, boolean ) 
 231  
 
 232  
     /**
 233  
      * Method getFloatValue.
 234  
      * 
 235  
      * @param s
 236  
      * @param strict
 237  
      * @param parser
 238  
      * @param attribute
 239  
      * @throws XmlPullParserException
 240  
      * @return float
 241  
      */
 242  
     public float getFloatValue( String s, String attribute, XmlPullParser parser, boolean strict )
 243  
         throws XmlPullParserException
 244  
     {
 245  0
         if ( s != null )
 246  
         {
 247  
             try
 248  
             {
 249  0
                 return Float.valueOf( s ).floatValue();
 250  
             }
 251  0
             catch ( NumberFormatException e )
 252  
             {
 253  0
                 if ( strict )
 254  
                 {
 255  0
                     throw new XmlPullParserException( "Unable to parse element '" + attribute + "', must be a floating point number", parser, null );
 256  
                 }
 257  
             }
 258  
         }
 259  0
         return 0;
 260  
     } //-- float getFloatValue( String, String, XmlPullParser, boolean ) 
 261  
 
 262  
     /**
 263  
      * Method getIntegerValue.
 264  
      * 
 265  
      * @param s
 266  
      * @param strict
 267  
      * @param parser
 268  
      * @param attribute
 269  
      * @throws XmlPullParserException
 270  
      * @return int
 271  
      */
 272  
     public int getIntegerValue( String s, String attribute, XmlPullParser parser, boolean strict )
 273  
         throws XmlPullParserException
 274  
     {
 275  0
         if ( s != null )
 276  
         {
 277  
             try
 278  
             {
 279  0
                 return Integer.valueOf( s ).intValue();
 280  
             }
 281  0
             catch ( NumberFormatException e )
 282  
             {
 283  0
                 if ( strict )
 284  
                 {
 285  0
                     throw new XmlPullParserException( "Unable to parse element '" + attribute + "', must be an integer", parser, null );
 286  
                 }
 287  
             }
 288  
         }
 289  0
         return 0;
 290  
     } //-- int getIntegerValue( String, String, XmlPullParser, boolean ) 
 291  
 
 292  
     /**
 293  
      * Method getLongValue.
 294  
      * 
 295  
      * @param s
 296  
      * @param strict
 297  
      * @param parser
 298  
      * @param attribute
 299  
      * @throws XmlPullParserException
 300  
      * @return long
 301  
      */
 302  
     public long getLongValue( String s, String attribute, XmlPullParser parser, boolean strict )
 303  
         throws XmlPullParserException
 304  
     {
 305  0
         if ( s != null )
 306  
         {
 307  
             try
 308  
             {
 309  0
                 return Long.valueOf( s ).longValue();
 310  
             }
 311  0
             catch ( NumberFormatException e )
 312  
             {
 313  0
                 if ( strict )
 314  
                 {
 315  0
                     throw new XmlPullParserException( "Unable to parse element '" + attribute + "', must be a long integer", parser, null );
 316  
                 }
 317  
             }
 318  
         }
 319  0
         return 0;
 320  
     } //-- long getLongValue( String, String, XmlPullParser, boolean ) 
 321  
 
 322  
     /**
 323  
      * Method getRequiredAttributeValue.
 324  
      * 
 325  
      * @param s
 326  
      * @param strict
 327  
      * @param parser
 328  
      * @param attribute
 329  
      * @throws XmlPullParserException
 330  
      * @return String
 331  
      */
 332  
     public String getRequiredAttributeValue( String s, String attribute, XmlPullParser parser, boolean strict )
 333  
         throws XmlPullParserException
 334  
     {
 335  0
         if ( s == null )
 336  
         {
 337  0
             if ( strict )
 338  
             {
 339  0
                 throw new XmlPullParserException( "Missing required value for attribute '" + attribute + "'", parser, null );
 340  
             }
 341  
         }
 342  0
         return s;
 343  
     } //-- String getRequiredAttributeValue( String, String, XmlPullParser, boolean ) 
 344  
 
 345  
     /**
 346  
      * Method getShortValue.
 347  
      * 
 348  
      * @param s
 349  
      * @param strict
 350  
      * @param parser
 351  
      * @param attribute
 352  
      * @throws XmlPullParserException
 353  
      * @return short
 354  
      */
 355  
     public short getShortValue( String s, String attribute, XmlPullParser parser, boolean strict )
 356  
         throws XmlPullParserException
 357  
     {
 358  0
         if ( s != null )
 359  
         {
 360  
             try
 361  
             {
 362  0
                 return Short.valueOf( s ).shortValue();
 363  
             }
 364  0
             catch ( NumberFormatException e )
 365  
             {
 366  0
                 if ( strict )
 367  
                 {
 368  0
                     throw new XmlPullParserException( "Unable to parse element '" + attribute + "', must be a short integer", parser, null );
 369  
                 }
 370  
             }
 371  
         }
 372  0
         return 0;
 373  
     } //-- short getShortValue( String, String, XmlPullParser, boolean ) 
 374  
 
 375  
     /**
 376  
      * Method getTrimmedValue.
 377  
      * 
 378  
      * @param s
 379  
      * @return String
 380  
      */
 381  
     public String getTrimmedValue( String s )
 382  
     {
 383  0
         if ( s != null )
 384  
         {
 385  0
             s = s.trim();
 386  
         }
 387  0
         return s;
 388  
     } //-- String getTrimmedValue( String ) 
 389  
 
 390  
     /**
 391  
      * Method parseMetadata.
 392  
      * 
 393  
      * @param tagName
 394  
      * @param strict
 395  
      * @param parser
 396  
      * @throws IOException
 397  
      * @throws XmlPullParserException
 398  
      * @return Metadata
 399  
      */
 400  
     private Metadata parseMetadata( String tagName, XmlPullParser parser, boolean strict )
 401  
         throws IOException, XmlPullParserException
 402  
     {
 403  0
         Metadata metadata = new Metadata();
 404  0
         java.util.Set parsed = new java.util.HashSet();
 405  0
         int eventType = parser.getEventType();
 406  0
         boolean foundRoot = false;
 407  0
         while ( eventType != XmlPullParser.END_DOCUMENT )
 408  
         {
 409  0
             if ( eventType == XmlPullParser.START_TAG )
 410  
             {
 411  0
                 if ( parser.getName().equals( tagName ) )
 412  
                 {
 413  0
                     foundRoot = true;
 414  
                 }
 415  0
                 else if ( parser.getName().equals( "groupId" )  )
 416  
                 {
 417  0
                     if ( parsed.contains( "groupId" ) )
 418  
                     {
 419  0
                         throw new XmlPullParserException( "Duplicated tag: '" + parser.getName() + "'", parser, null );
 420  
                     }
 421  0
                     parsed.add( "groupId" );
 422  0
                     metadata.setGroupId( getTrimmedValue( parser.nextText()) );
 423  
                 }
 424  0
                 else if ( parser.getName().equals( "artifactId" )  )
 425  
                 {
 426  0
                     if ( parsed.contains( "artifactId" ) )
 427  
                     {
 428  0
                         throw new XmlPullParserException( "Duplicated tag: '" + parser.getName() + "'", parser, null );
 429  
                     }
 430  0
                     parsed.add( "artifactId" );
 431  0
                     metadata.setArtifactId( getTrimmedValue( parser.nextText()) );
 432  
                 }
 433  0
                 else if ( parser.getName().equals( "version" )  )
 434  
                 {
 435  0
                     if ( parsed.contains( "version" ) )
 436  
                     {
 437  0
                         throw new XmlPullParserException( "Duplicated tag: '" + parser.getName() + "'", parser, null );
 438  
                     }
 439  0
                     parsed.add( "version" );
 440  0
                     metadata.setVersion( getTrimmedValue( parser.nextText()) );
 441  
                 }
 442  0
                 else if ( parser.getName().equals( "versioning" )  )
 443  
                 {
 444  0
                     if ( parsed.contains( "versioning" ) )
 445  
                     {
 446  0
                         throw new XmlPullParserException( "Duplicated tag: '" + parser.getName() + "'", parser, null );
 447  
                     }
 448  0
                     parsed.add( "versioning" );
 449  0
                     metadata.setVersioning( parseVersioning( "versioning", parser, strict ) );
 450  
                 }
 451  0
                 else if ( parser.getName().equals( "plugins" )  )
 452  
                 {
 453  0
                     if ( parsed.contains( "plugins" ) )
 454  
                     {
 455  0
                         throw new XmlPullParserException( "Duplicated tag: '" + parser.getName() + "'", parser, null );
 456  
                     }
 457  0
                     parsed.add( "plugins" );
 458  0
                     java.util.List plugins = new java.util.ArrayList();
 459  0
                     metadata.setPlugins( plugins );
 460  0
                     while ( parser.nextTag() == XmlPullParser.START_TAG )
 461  
                     {
 462  0
                         if ( parser.getName().equals( "plugin" ) )
 463  
                         {
 464  0
                             plugins.add( parsePlugin( "plugin", parser, strict ) );
 465  
                         }
 466  0
                         else if ( strict )
 467  
                         {
 468  0
                             throw new XmlPullParserException( "Unrecognised association: '" + parser.getName() + "'", parser, null );
 469  
                         }
 470  
                         else
 471  
                         {
 472  
                             // swallow up to end tag since this is not valid
 473  0
                             while ( parser.next() != XmlPullParser.END_TAG ) {}
 474  
                         }
 475  
                     }
 476  0
                 }
 477  0
                 else if ( strict )
 478  
                 {
 479  0
                     throw new XmlPullParserException( "Unrecognised tag: '" + parser.getName() + "'", parser, null );
 480  
                 }
 481  
             }
 482  0
             eventType = parser.next();
 483  
         }
 484  0
         return metadata;
 485  
     } //-- Metadata parseMetadata( String, XmlPullParser, boolean ) 
 486  
 
 487  
     /**
 488  
      * Method parsePlugin.
 489  
      * 
 490  
      * @param tagName
 491  
      * @param strict
 492  
      * @param parser
 493  
      * @throws IOException
 494  
      * @throws XmlPullParserException
 495  
      * @return Plugin
 496  
      */
 497  
     private Plugin parsePlugin( String tagName, XmlPullParser parser, boolean strict )
 498  
         throws IOException, XmlPullParserException
 499  
     {
 500  0
         Plugin plugin = new Plugin();
 501  0
         java.util.Set parsed = new java.util.HashSet();
 502  0
         while ( parser.nextTag() == XmlPullParser.START_TAG )
 503  
         {
 504  0
             if ( parser.getName().equals( "name" )  )
 505  
             {
 506  0
                 if ( parsed.contains( "name" ) )
 507  
                 {
 508  0
                     throw new XmlPullParserException( "Duplicated tag: '" + parser.getName() + "'", parser, null );
 509  
                 }
 510  0
                 parsed.add( "name" );
 511  0
                 plugin.setName( getTrimmedValue( parser.nextText()) );
 512  
             }
 513  0
             else if ( parser.getName().equals( "prefix" )  )
 514  
             {
 515  0
                 if ( parsed.contains( "prefix" ) )
 516  
                 {
 517  0
                     throw new XmlPullParserException( "Duplicated tag: '" + parser.getName() + "'", parser, null );
 518  
                 }
 519  0
                 parsed.add( "prefix" );
 520  0
                 plugin.setPrefix( getTrimmedValue( parser.nextText()) );
 521  
             }
 522  0
             else if ( parser.getName().equals( "artifactId" )  )
 523  
             {
 524  0
                 if ( parsed.contains( "artifactId" ) )
 525  
                 {
 526  0
                     throw new XmlPullParserException( "Duplicated tag: '" + parser.getName() + "'", parser, null );
 527  
                 }
 528  0
                 parsed.add( "artifactId" );
 529  0
                 plugin.setArtifactId( getTrimmedValue( parser.nextText()) );
 530  
             }
 531  
             else
 532  
             {
 533  0
                 if ( strict )
 534  
                 {
 535  0
                     throw new XmlPullParserException( "Unrecognised tag: '" + parser.getName() + "'", parser, null );
 536  
                 }
 537  
                 else
 538  
                 {
 539  
                     // swallow up to end tag since this is not valid
 540  0
                     while ( parser.next() != XmlPullParser.END_TAG ) {}
 541  
                 }
 542  
             }
 543  
         }
 544  0
         return plugin;
 545  
     } //-- Plugin parsePlugin( String, XmlPullParser, boolean ) 
 546  
 
 547  
     /**
 548  
      * Method parseSnapshot.
 549  
      * 
 550  
      * @param tagName
 551  
      * @param strict
 552  
      * @param parser
 553  
      * @throws IOException
 554  
      * @throws XmlPullParserException
 555  
      * @return Snapshot
 556  
      */
 557  
     private Snapshot parseSnapshot( String tagName, XmlPullParser parser, boolean strict )
 558  
         throws IOException, XmlPullParserException
 559  
     {
 560  0
         Snapshot snapshot = new Snapshot();
 561  0
         java.util.Set parsed = new java.util.HashSet();
 562  0
         while ( parser.nextTag() == XmlPullParser.START_TAG )
 563  
         {
 564  0
             if ( parser.getName().equals( "timestamp" )  )
 565  
             {
 566  0
                 if ( parsed.contains( "timestamp" ) )
 567  
                 {
 568  0
                     throw new XmlPullParserException( "Duplicated tag: '" + parser.getName() + "'", parser, null );
 569  
                 }
 570  0
                 parsed.add( "timestamp" );
 571  0
                 snapshot.setTimestamp( getTrimmedValue( parser.nextText()) );
 572  
             }
 573  0
             else if ( parser.getName().equals( "buildNumber" )  )
 574  
             {
 575  0
                 if ( parsed.contains( "buildNumber" ) )
 576  
                 {
 577  0
                     throw new XmlPullParserException( "Duplicated tag: '" + parser.getName() + "'", parser, null );
 578  
                 }
 579  0
                 parsed.add( "buildNumber" );
 580  0
                 snapshot.setBuildNumber( getIntegerValue( getTrimmedValue( parser.nextText()), "buildNumber", parser, strict ) );
 581  
             }
 582  0
             else if ( parser.getName().equals( "localCopy" )  )
 583  
             {
 584  0
                 if ( parsed.contains( "localCopy" ) )
 585  
                 {
 586  0
                     throw new XmlPullParserException( "Duplicated tag: '" + parser.getName() + "'", parser, null );
 587  
                 }
 588  0
                 parsed.add( "localCopy" );
 589  0
                 snapshot.setLocalCopy( getBooleanValue( getTrimmedValue( parser.nextText()), "localCopy", parser, "false" ) );
 590  
             }
 591  
             else
 592  
             {
 593  0
                 if ( strict )
 594  
                 {
 595  0
                     throw new XmlPullParserException( "Unrecognised tag: '" + parser.getName() + "'", parser, null );
 596  
                 }
 597  
                 else
 598  
                 {
 599  
                     // swallow up to end tag since this is not valid
 600  0
                     while ( parser.next() != XmlPullParser.END_TAG ) {}
 601  
                 }
 602  
             }
 603  
         }
 604  0
         return snapshot;
 605  
     } //-- Snapshot parseSnapshot( String, XmlPullParser, boolean ) 
 606  
 
 607  
     /**
 608  
      * Method parseVersioning.
 609  
      * 
 610  
      * @param tagName
 611  
      * @param strict
 612  
      * @param parser
 613  
      * @throws IOException
 614  
      * @throws XmlPullParserException
 615  
      * @return Versioning
 616  
      */
 617  
     private Versioning parseVersioning( String tagName, XmlPullParser parser, boolean strict )
 618  
         throws IOException, XmlPullParserException
 619  
     {
 620  0
         Versioning versioning = new Versioning();
 621  0
         java.util.Set parsed = new java.util.HashSet();
 622  0
         while ( parser.nextTag() == XmlPullParser.START_TAG )
 623  
         {
 624  0
             if ( parser.getName().equals( "latest" )  )
 625  
             {
 626  0
                 if ( parsed.contains( "latest" ) )
 627  
                 {
 628  0
                     throw new XmlPullParserException( "Duplicated tag: '" + parser.getName() + "'", parser, null );
 629  
                 }
 630  0
                 parsed.add( "latest" );
 631  0
                 versioning.setLatest( getTrimmedValue( parser.nextText()) );
 632  
             }
 633  0
             else if ( parser.getName().equals( "release" )  )
 634  
             {
 635  0
                 if ( parsed.contains( "release" ) )
 636  
                 {
 637  0
                     throw new XmlPullParserException( "Duplicated tag: '" + parser.getName() + "'", parser, null );
 638  
                 }
 639  0
                 parsed.add( "release" );
 640  0
                 versioning.setRelease( getTrimmedValue( parser.nextText()) );
 641  
             }
 642  0
             else if ( parser.getName().equals( "snapshot" )  )
 643  
             {
 644  0
                 if ( parsed.contains( "snapshot" ) )
 645  
                 {
 646  0
                     throw new XmlPullParserException( "Duplicated tag: '" + parser.getName() + "'", parser, null );
 647  
                 }
 648  0
                 parsed.add( "snapshot" );
 649  0
                 versioning.setSnapshot( parseSnapshot( "snapshot", parser, strict ) );
 650  
             }
 651  0
             else if ( parser.getName().equals( "versions" )  )
 652  
             {
 653  0
                 if ( parsed.contains( "versions" ) )
 654  
                 {
 655  0
                     throw new XmlPullParserException( "Duplicated tag: '" + parser.getName() + "'", parser, null );
 656  
                 }
 657  0
                 parsed.add( "versions" );
 658  0
                 java.util.List versions = new java.util.ArrayList();
 659  0
                 versioning.setVersions( versions );
 660  0
                 while ( parser.nextTag() == XmlPullParser.START_TAG )
 661  
                 {
 662  0
                     if ( parser.getName().equals( "version" ) )
 663  
                     {
 664  0
                         versions.add( getTrimmedValue( parser.nextText()) );
 665  
                     }
 666  0
                     else if ( strict )
 667  
                     {
 668  0
                         throw new XmlPullParserException( "Unrecognised association: '" + parser.getName() + "'", parser, null );
 669  
                     }
 670  
                     else
 671  
                     {
 672  
                         // swallow up to end tag since this is not valid
 673  0
                         while ( parser.next() != XmlPullParser.END_TAG ) {}
 674  
                     }
 675  
                 }
 676  0
             }
 677  0
             else if ( parser.getName().equals( "lastUpdated" )  )
 678  
             {
 679  0
                 if ( parsed.contains( "lastUpdated" ) )
 680  
                 {
 681  0
                     throw new XmlPullParserException( "Duplicated tag: '" + parser.getName() + "'", parser, null );
 682  
                 }
 683  0
                 parsed.add( "lastUpdated" );
 684  0
                 versioning.setLastUpdated( getTrimmedValue( parser.nextText()) );
 685  
             }
 686  
             else
 687  
             {
 688  0
                 if ( strict )
 689  
                 {
 690  0
                     throw new XmlPullParserException( "Unrecognised tag: '" + parser.getName() + "'", parser, null );
 691  
                 }
 692  
                 else
 693  
                 {
 694  
                     // swallow up to end tag since this is not valid
 695  0
                     while ( parser.next() != XmlPullParser.END_TAG ) {}
 696  
                 }
 697  
             }
 698  
         }
 699  0
         return versioning;
 700  
     } //-- Versioning parseVersioning( String, XmlPullParser, boolean ) 
 701  
 
 702  
     /**
 703  
      * @see ReaderFactory#newXmlReader
 704  
      * 
 705  
      * @param reader
 706  
      * @param strict
 707  
      * @throws IOException
 708  
      * @throws XmlPullParserException
 709  
      * @return Metadata
 710  
      */
 711  
     public Metadata read( Reader reader, boolean strict )
 712  
         throws IOException, XmlPullParserException
 713  
     {
 714  0
         XmlPullParser parser = new MXParser();
 715  
     
 716  0
         parser.setInput( reader );
 717  
     
 718  0
         if ( addDefaultEntities )
 719  
         {
 720  
             // ----------------------------------------------------------------------
 721  
             // Latin 1 entities
 722  
             // ----------------------------------------------------------------------
 723  
     
 724  0
             parser.defineEntityReplacementText( "nbsp", "\u00a0" );
 725  0
             parser.defineEntityReplacementText( "iexcl", "\u00a1" );
 726  0
             parser.defineEntityReplacementText( "cent", "\u00a2" );
 727  0
             parser.defineEntityReplacementText( "pound", "\u00a3" );
 728  0
             parser.defineEntityReplacementText( "curren", "\u00a4" );
 729  0
             parser.defineEntityReplacementText( "yen", "\u00a5" );
 730  0
             parser.defineEntityReplacementText( "brvbar", "\u00a6" );
 731  0
             parser.defineEntityReplacementText( "sect", "\u00a7" );
 732  0
             parser.defineEntityReplacementText( "uml", "\u00a8" );
 733  0
             parser.defineEntityReplacementText( "copy", "\u00a9" );
 734  0
             parser.defineEntityReplacementText( "ordf", "\u00aa" );
 735  0
             parser.defineEntityReplacementText( "laquo", "\u00ab" );
 736  0
             parser.defineEntityReplacementText( "not", "\u00ac" );
 737  0
             parser.defineEntityReplacementText( "shy", "\u00ad" );
 738  0
             parser.defineEntityReplacementText( "reg", "\u00ae" );
 739  0
             parser.defineEntityReplacementText( "macr", "\u00af" );
 740  0
             parser.defineEntityReplacementText( "deg", "\u00b0" );
 741  0
             parser.defineEntityReplacementText( "plusmn", "\u00b1" );
 742  0
             parser.defineEntityReplacementText( "sup2", "\u00b2" );
 743  0
             parser.defineEntityReplacementText( "sup3", "\u00b3" );
 744  0
             parser.defineEntityReplacementText( "acute", "\u00b4" );
 745  0
             parser.defineEntityReplacementText( "micro", "\u00b5" );
 746  0
             parser.defineEntityReplacementText( "para", "\u00b6" );
 747  0
             parser.defineEntityReplacementText( "middot", "\u00b7" );
 748  0
             parser.defineEntityReplacementText( "cedil", "\u00b8" );
 749  0
             parser.defineEntityReplacementText( "sup1", "\u00b9" );
 750  0
             parser.defineEntityReplacementText( "ordm", "\u00ba" );
 751  0
             parser.defineEntityReplacementText( "raquo", "\u00bb" );
 752  0
             parser.defineEntityReplacementText( "frac14", "\u00bc" );
 753  0
             parser.defineEntityReplacementText( "frac12", "\u00bd" );
 754  0
             parser.defineEntityReplacementText( "frac34", "\u00be" );
 755  0
             parser.defineEntityReplacementText( "iquest", "\u00bf" );
 756  0
             parser.defineEntityReplacementText( "Agrave", "\u00c0" );
 757  0
             parser.defineEntityReplacementText( "Aacute", "\u00c1" );
 758  0
             parser.defineEntityReplacementText( "Acirc", "\u00c2" );
 759  0
             parser.defineEntityReplacementText( "Atilde", "\u00c3" );
 760  0
             parser.defineEntityReplacementText( "Auml", "\u00c4" );
 761  0
             parser.defineEntityReplacementText( "Aring", "\u00c5" );
 762  0
             parser.defineEntityReplacementText( "AElig", "\u00c6" );
 763  0
             parser.defineEntityReplacementText( "Ccedil", "\u00c7" );
 764  0
             parser.defineEntityReplacementText( "Egrave", "\u00c8" );
 765  0
             parser.defineEntityReplacementText( "Eacute", "\u00c9" );
 766  0
             parser.defineEntityReplacementText( "Ecirc", "\u00ca" );
 767  0
             parser.defineEntityReplacementText( "Euml", "\u00cb" );
 768  0
             parser.defineEntityReplacementText( "Igrave", "\u00cc" );
 769  0
             parser.defineEntityReplacementText( "Iacute", "\u00cd" );
 770  0
             parser.defineEntityReplacementText( "Icirc", "\u00ce" );
 771  0
             parser.defineEntityReplacementText( "Iuml", "\u00cf" );
 772  0
             parser.defineEntityReplacementText( "ETH", "\u00d0" );
 773  0
             parser.defineEntityReplacementText( "Ntilde", "\u00d1" );
 774  0
             parser.defineEntityReplacementText( "Ograve", "\u00d2" );
 775  0
             parser.defineEntityReplacementText( "Oacute", "\u00d3" );
 776  0
             parser.defineEntityReplacementText( "Ocirc", "\u00d4" );
 777  0
             parser.defineEntityReplacementText( "Otilde", "\u00d5" );
 778  0
             parser.defineEntityReplacementText( "Ouml", "\u00d6" );
 779  0
             parser.defineEntityReplacementText( "times", "\u00d7" );
 780  0
             parser.defineEntityReplacementText( "Oslash", "\u00d8" );
 781  0
             parser.defineEntityReplacementText( "Ugrave", "\u00d9" );
 782  0
             parser.defineEntityReplacementText( "Uacute", "\u00da" );
 783  0
             parser.defineEntityReplacementText( "Ucirc", "\u00db" );
 784  0
             parser.defineEntityReplacementText( "Uuml", "\u00dc" );
 785  0
             parser.defineEntityReplacementText( "Yacute", "\u00dd" );
 786  0
             parser.defineEntityReplacementText( "THORN", "\u00de" );
 787  0
             parser.defineEntityReplacementText( "szlig", "\u00df" );
 788  0
             parser.defineEntityReplacementText( "agrave", "\u00e0" );
 789  0
             parser.defineEntityReplacementText( "aacute", "\u00e1" );
 790  0
             parser.defineEntityReplacementText( "acirc", "\u00e2" );
 791  0
             parser.defineEntityReplacementText( "atilde", "\u00e3" );
 792  0
             parser.defineEntityReplacementText( "auml", "\u00e4" );
 793  0
             parser.defineEntityReplacementText( "aring", "\u00e5" );
 794  0
             parser.defineEntityReplacementText( "aelig", "\u00e6" );
 795  0
             parser.defineEntityReplacementText( "ccedil", "\u00e7" );
 796  0
             parser.defineEntityReplacementText( "egrave", "\u00e8" );
 797  0
             parser.defineEntityReplacementText( "eacute", "\u00e9" );
 798  0
             parser.defineEntityReplacementText( "ecirc", "\u00ea" );
 799  0
             parser.defineEntityReplacementText( "euml", "\u00eb" );
 800  0
             parser.defineEntityReplacementText( "igrave", "\u00ec" );
 801  0
             parser.defineEntityReplacementText( "iacute", "\u00ed" );
 802  0
             parser.defineEntityReplacementText( "icirc", "\u00ee" );
 803  0
             parser.defineEntityReplacementText( "iuml", "\u00ef" );
 804  0
             parser.defineEntityReplacementText( "eth", "\u00f0" );
 805  0
             parser.defineEntityReplacementText( "ntilde", "\u00f1" );
 806  0
             parser.defineEntityReplacementText( "ograve", "\u00f2" );
 807  0
             parser.defineEntityReplacementText( "oacute", "\u00f3" );
 808  0
             parser.defineEntityReplacementText( "ocirc", "\u00f4" );
 809  0
             parser.defineEntityReplacementText( "otilde", "\u00f5" );
 810  0
             parser.defineEntityReplacementText( "ouml", "\u00f6" );
 811  0
             parser.defineEntityReplacementText( "divide", "\u00f7" );
 812  0
             parser.defineEntityReplacementText( "oslash", "\u00f8" );
 813  0
             parser.defineEntityReplacementText( "ugrave", "\u00f9" );
 814  0
             parser.defineEntityReplacementText( "uacute", "\u00fa" );
 815  0
             parser.defineEntityReplacementText( "ucirc", "\u00fb" );
 816  0
             parser.defineEntityReplacementText( "uuml", "\u00fc" );
 817  0
             parser.defineEntityReplacementText( "yacute", "\u00fd" );
 818  0
             parser.defineEntityReplacementText( "thorn", "\u00fe" );
 819  0
             parser.defineEntityReplacementText( "yuml", "\u00ff" );
 820  
     
 821  
             // ----------------------------------------------------------------------
 822  
             // Special entities
 823  
             // ----------------------------------------------------------------------
 824  
     
 825  0
             parser.defineEntityReplacementText( "OElig", "\u0152" );
 826  0
             parser.defineEntityReplacementText( "oelig", "\u0153" );
 827  0
             parser.defineEntityReplacementText( "Scaron", "\u0160" );
 828  0
             parser.defineEntityReplacementText( "scaron", "\u0161" );
 829  0
             parser.defineEntityReplacementText( "Yuml", "\u0178" );
 830  0
             parser.defineEntityReplacementText( "circ", "\u02c6" );
 831  0
             parser.defineEntityReplacementText( "tilde", "\u02dc" );
 832  0
             parser.defineEntityReplacementText( "ensp", "\u2002" );
 833  0
             parser.defineEntityReplacementText( "emsp", "\u2003" );
 834  0
             parser.defineEntityReplacementText( "thinsp", "\u2009" );
 835  0
             parser.defineEntityReplacementText( "zwnj", "\u200c" );
 836  0
             parser.defineEntityReplacementText( "zwj", "\u200d" );
 837  0
             parser.defineEntityReplacementText( "lrm", "\u200e" );
 838  0
             parser.defineEntityReplacementText( "rlm", "\u200f" );
 839  0
             parser.defineEntityReplacementText( "ndash", "\u2013" );
 840  0
             parser.defineEntityReplacementText( "mdash", "\u2014" );
 841  0
             parser.defineEntityReplacementText( "lsquo", "\u2018" );
 842  0
             parser.defineEntityReplacementText( "rsquo", "\u2019" );
 843  0
             parser.defineEntityReplacementText( "sbquo", "\u201a" );
 844  0
             parser.defineEntityReplacementText( "ldquo", "\u201c" );
 845  0
             parser.defineEntityReplacementText( "rdquo", "\u201d" );
 846  0
             parser.defineEntityReplacementText( "bdquo", "\u201e" );
 847  0
             parser.defineEntityReplacementText( "dagger", "\u2020" );
 848  0
             parser.defineEntityReplacementText( "Dagger", "\u2021" );
 849  0
             parser.defineEntityReplacementText( "permil", "\u2030" );
 850  0
             parser.defineEntityReplacementText( "lsaquo", "\u2039" );
 851  0
             parser.defineEntityReplacementText( "rsaquo", "\u203a" );
 852  0
             parser.defineEntityReplacementText( "euro", "\u20ac" );
 853  
     
 854  
             // ----------------------------------------------------------------------
 855  
             // Symbol entities
 856  
             // ----------------------------------------------------------------------
 857  
     
 858  0
             parser.defineEntityReplacementText( "fnof", "\u0192" );
 859  0
             parser.defineEntityReplacementText( "Alpha", "\u0391" );
 860  0
             parser.defineEntityReplacementText( "Beta", "\u0392" );
 861  0
             parser.defineEntityReplacementText( "Gamma", "\u0393" );
 862  0
             parser.defineEntityReplacementText( "Delta", "\u0394" );
 863  0
             parser.defineEntityReplacementText( "Epsilon", "\u0395" );
 864  0
             parser.defineEntityReplacementText( "Zeta", "\u0396" );
 865  0
             parser.defineEntityReplacementText( "Eta", "\u0397" );
 866  0
             parser.defineEntityReplacementText( "Theta", "\u0398" );
 867  0
             parser.defineEntityReplacementText( "Iota", "\u0399" );
 868  0
             parser.defineEntityReplacementText( "Kappa", "\u039a" );
 869  0
             parser.defineEntityReplacementText( "Lambda", "\u039b" );
 870  0
             parser.defineEntityReplacementText( "Mu", "\u039c" );
 871  0
             parser.defineEntityReplacementText( "Nu", "\u039d" );
 872  0
             parser.defineEntityReplacementText( "Xi", "\u039e" );
 873  0
             parser.defineEntityReplacementText( "Omicron", "\u039f" );
 874  0
             parser.defineEntityReplacementText( "Pi", "\u03a0" );
 875  0
             parser.defineEntityReplacementText( "Rho", "\u03a1" );
 876  0
             parser.defineEntityReplacementText( "Sigma", "\u03a3" );
 877  0
             parser.defineEntityReplacementText( "Tau", "\u03a4" );
 878  0
             parser.defineEntityReplacementText( "Upsilon", "\u03a5" );
 879  0
             parser.defineEntityReplacementText( "Phi", "\u03a6" );
 880  0
             parser.defineEntityReplacementText( "Chi", "\u03a7" );
 881  0
             parser.defineEntityReplacementText( "Psi", "\u03a8" );
 882  0
             parser.defineEntityReplacementText( "Omega", "\u03a9" );
 883  0
             parser.defineEntityReplacementText( "alpha", "\u03b1" );
 884  0
             parser.defineEntityReplacementText( "beta", "\u03b2" );
 885  0
             parser.defineEntityReplacementText( "gamma", "\u03b3" );
 886  0
             parser.defineEntityReplacementText( "delta", "\u03b4" );
 887  0
             parser.defineEntityReplacementText( "epsilon", "\u03b5" );
 888  0
             parser.defineEntityReplacementText( "zeta", "\u03b6" );
 889  0
             parser.defineEntityReplacementText( "eta", "\u03b7" );
 890  0
             parser.defineEntityReplacementText( "theta", "\u03b8" );
 891  0
             parser.defineEntityReplacementText( "iota", "\u03b9" );
 892  0
             parser.defineEntityReplacementText( "kappa", "\u03ba" );
 893  0
             parser.defineEntityReplacementText( "lambda", "\u03bb" );
 894  0
             parser.defineEntityReplacementText( "mu", "\u03bc" );
 895  0
             parser.defineEntityReplacementText( "nu", "\u03bd" );
 896  0
             parser.defineEntityReplacementText( "xi", "\u03be" );
 897  0
             parser.defineEntityReplacementText( "omicron", "\u03bf" );
 898  0
             parser.defineEntityReplacementText( "pi", "\u03c0" );
 899  0
             parser.defineEntityReplacementText( "rho", "\u03c1" );
 900  0
             parser.defineEntityReplacementText( "sigmaf", "\u03c2" );
 901  0
             parser.defineEntityReplacementText( "sigma", "\u03c3" );
 902  0
             parser.defineEntityReplacementText( "tau", "\u03c4" );
 903  0
             parser.defineEntityReplacementText( "upsilon", "\u03c5" );
 904  0
             parser.defineEntityReplacementText( "phi", "\u03c6" );
 905  0
             parser.defineEntityReplacementText( "chi", "\u03c7" );
 906  0
             parser.defineEntityReplacementText( "psi", "\u03c8" );
 907  0
             parser.defineEntityReplacementText( "omega", "\u03c9" );
 908  0
             parser.defineEntityReplacementText( "thetasym", "\u03d1" );
 909  0
             parser.defineEntityReplacementText( "upsih", "\u03d2" );
 910  0
             parser.defineEntityReplacementText( "piv", "\u03d6" );
 911  0
             parser.defineEntityReplacementText( "bull", "\u2022" );
 912  0
             parser.defineEntityReplacementText( "hellip", "\u2026" );
 913  0
             parser.defineEntityReplacementText( "prime", "\u2032" );
 914  0
             parser.defineEntityReplacementText( "Prime", "\u2033" );
 915  0
             parser.defineEntityReplacementText( "oline", "\u203e" );
 916  0
             parser.defineEntityReplacementText( "frasl", "\u2044" );
 917  0
             parser.defineEntityReplacementText( "weierp", "\u2118" );
 918  0
             parser.defineEntityReplacementText( "image", "\u2111" );
 919  0
             parser.defineEntityReplacementText( "real", "\u211c" );
 920  0
             parser.defineEntityReplacementText( "trade", "\u2122" );
 921  0
             parser.defineEntityReplacementText( "alefsym", "\u2135" );
 922  0
             parser.defineEntityReplacementText( "larr", "\u2190" );
 923  0
             parser.defineEntityReplacementText( "uarr", "\u2191" );
 924  0
             parser.defineEntityReplacementText( "rarr", "\u2192" );
 925  0
             parser.defineEntityReplacementText( "darr", "\u2193" );
 926  0
             parser.defineEntityReplacementText( "harr", "\u2194" );
 927  0
             parser.defineEntityReplacementText( "crarr", "\u21b5" );
 928  0
             parser.defineEntityReplacementText( "lArr", "\u21d0" );
 929  0
             parser.defineEntityReplacementText( "uArr", "\u21d1" );
 930  0
             parser.defineEntityReplacementText( "rArr", "\u21d2" );
 931  0
             parser.defineEntityReplacementText( "dArr", "\u21d3" );
 932  0
             parser.defineEntityReplacementText( "hArr", "\u21d4" );
 933  0
             parser.defineEntityReplacementText( "forall", "\u2200" );
 934  0
             parser.defineEntityReplacementText( "part", "\u2202" );
 935  0
             parser.defineEntityReplacementText( "exist", "\u2203" );
 936  0
             parser.defineEntityReplacementText( "empty", "\u2205" );
 937  0
             parser.defineEntityReplacementText( "nabla", "\u2207" );
 938  0
             parser.defineEntityReplacementText( "isin", "\u2208" );
 939  0
             parser.defineEntityReplacementText( "notin", "\u2209" );
 940  0
             parser.defineEntityReplacementText( "ni", "\u220b" );
 941  0
             parser.defineEntityReplacementText( "prod", "\u220f" );
 942  0
             parser.defineEntityReplacementText( "sum", "\u2211" );
 943  0
             parser.defineEntityReplacementText( "minus", "\u2212" );
 944  0
             parser.defineEntityReplacementText( "lowast", "\u2217" );
 945  0
             parser.defineEntityReplacementText( "radic", "\u221a" );
 946  0
             parser.defineEntityReplacementText( "prop", "\u221d" );
 947  0
             parser.defineEntityReplacementText( "infin", "\u221e" );
 948  0
             parser.defineEntityReplacementText( "ang", "\u2220" );
 949  0
             parser.defineEntityReplacementText( "and", "\u2227" );
 950  0
             parser.defineEntityReplacementText( "or", "\u2228" );
 951  0
             parser.defineEntityReplacementText( "cap", "\u2229" );
 952  0
             parser.defineEntityReplacementText( "cup", "\u222a" );
 953  0
             parser.defineEntityReplacementText( "int", "\u222b" );
 954  0
             parser.defineEntityReplacementText( "there4", "\u2234" );
 955  0
             parser.defineEntityReplacementText( "sim", "\u223c" );
 956  0
             parser.defineEntityReplacementText( "cong", "\u2245" );
 957  0
             parser.defineEntityReplacementText( "asymp", "\u2248" );
 958  0
             parser.defineEntityReplacementText( "ne", "\u2260" );
 959  0
             parser.defineEntityReplacementText( "equiv", "\u2261" );
 960  0
             parser.defineEntityReplacementText( "le", "\u2264" );
 961  0
             parser.defineEntityReplacementText( "ge", "\u2265" );
 962  0
             parser.defineEntityReplacementText( "sub", "\u2282" );
 963  0
             parser.defineEntityReplacementText( "sup", "\u2283" );
 964  0
             parser.defineEntityReplacementText( "nsub", "\u2284" );
 965  0
             parser.defineEntityReplacementText( "sube", "\u2286" );
 966  0
             parser.defineEntityReplacementText( "supe", "\u2287" );
 967  0
             parser.defineEntityReplacementText( "oplus", "\u2295" );
 968  0
             parser.defineEntityReplacementText( "otimes", "\u2297" );
 969  0
             parser.defineEntityReplacementText( "perp", "\u22a5" );
 970  0
             parser.defineEntityReplacementText( "sdot", "\u22c5" );
 971  0
             parser.defineEntityReplacementText( "lceil", "\u2308" );
 972  0
             parser.defineEntityReplacementText( "rceil", "\u2309" );
 973  0
             parser.defineEntityReplacementText( "lfloor", "\u230a" );
 974  0
             parser.defineEntityReplacementText( "rfloor", "\u230b" );
 975  0
             parser.defineEntityReplacementText( "lang", "\u2329" );
 976  0
             parser.defineEntityReplacementText( "rang", "\u232a" );
 977  0
             parser.defineEntityReplacementText( "loz", "\u25ca" );
 978  0
             parser.defineEntityReplacementText( "spades", "\u2660" );
 979  0
             parser.defineEntityReplacementText( "clubs", "\u2663" );
 980  0
             parser.defineEntityReplacementText( "hearts", "\u2665" );
 981  0
             parser.defineEntityReplacementText( "diams", "\u2666" );
 982  
     
 983  
         }
 984  
     
 985  0
         parser.next();
 986  0
         return parseMetadata( "metadata", parser, strict );
 987  
     } //-- Metadata read( Reader, boolean ) 
 988  
 
 989  
     /**
 990  
      * @see ReaderFactory#newXmlReader
 991  
      * 
 992  
      * @param reader
 993  
      * @throws IOException
 994  
      * @throws XmlPullParserException
 995  
      * @return Metadata
 996  
      */
 997  
     public Metadata read( Reader reader )
 998  
         throws IOException, XmlPullParserException
 999  
     {
 1000  0
         return read( reader, true );
 1001  
     } //-- Metadata read( Reader ) 
 1002  
 
 1003  
     /**
 1004  
      * Method read.
 1005  
      * 
 1006  
      * @param in
 1007  
      * @param strict
 1008  
      * @throws IOException
 1009  
      * @throws XmlPullParserException
 1010  
      * @return Metadata
 1011  
      */
 1012  
     public Metadata read( InputStream in, boolean strict )
 1013  
         throws IOException, XmlPullParserException
 1014  
     {
 1015  0
         Reader reader = ReaderFactory.newXmlReader( in );
 1016  
     
 1017  0
         return read( reader, strict );
 1018  
     } //-- Metadata read( InputStream, boolean ) 
 1019  
 
 1020  
     /**
 1021  
      * Method read.
 1022  
      * 
 1023  
      * @param in
 1024  
      * @throws IOException
 1025  
      * @throws XmlPullParserException
 1026  
      * @return Metadata
 1027  
      */
 1028  
     public Metadata read( InputStream in )
 1029  
         throws IOException, XmlPullParserException
 1030  
     {
 1031  0
         Reader reader = ReaderFactory.newXmlReader( in );
 1032  
     
 1033  0
         return read( reader );
 1034  
     } //-- Metadata read( InputStream ) 
 1035  
 
 1036  
     /**
 1037  
      * Sets the state of the "add default entities" flag.
 1038  
      * 
 1039  
      * @param addDefaultEntities
 1040  
      */
 1041  
     public void setAddDefaultEntities( boolean addDefaultEntities )
 1042  
     {
 1043  0
         this.addDefaultEntities = addDefaultEntities;
 1044  0
     } //-- void setAddDefaultEntities( boolean ) 
 1045  
 
 1046  
 
 1047  
 }