465 int mMaxElementDepth = 1000;
466 long mMaxElementCount = Long.MAX_VALUE;
467 long mMaxCharacters = Long.MAX_VALUE;
468 */
469
470 private int maxAttributesPerElement = DEFAULT_MAX_ATTRIBUTES_PER_ELEMENT;
471 private int maxAttributeSize = DEFAULT_MAX_ATTRIBUTE_SIZE;
472 private int maxChildrenPerElement = DEFAULT_MAX_CHILDREN_PER_ELEMENT;
473 private int maxElementDepth = DEFAULT_MAX_ELEMENT_DEPTH;
474 private long maxElementCount = DEFAULT_MAX_ELEMENT_COUNT;
475 private long maxCharacters = DEFAULT_MAX_CHARACTERS;
476
477 // Note: this is a copy from com.ctc.wstx.api.WstxInputProperties, to be removed in the future
478 private static final java.lang.String P_MAX_ATTRIBUTES_PER_ELEMENT = "com.ctc.wstx.maxAttributesPerElement";
479 private static final java.lang.String P_MAX_ATTRIBUTE_SIZE = "com.ctc.wstx.maxAttributeSize";
480 private static final java.lang.String P_MAX_CHILDREN_PER_ELEMENT = "com.ctc.wstx.maxChildrenPerElement";
481 private static final java.lang.String P_MAX_ELEMENT_COUNT = "com.ctc.wstx.maxElementCount";
482 private static final java.lang.String P_MAX_ELEMENT_DEPTH = "com.ctc.wstx.maxElementDepth";
483 private static final java.lang.String P_MAX_CHARACTERS = "com.ctc.wstx.maxCharacters";
484 private static final java.lang.String P_INTERN_NSURIS = "org.codehaus.stax2.internNsUris";
485
486 public Woodstox(XMLInputFactory xif) {
487 super(xif);
488
489 if (xif.isPropertySupported(P_INTERN_NSURIS)) {
490 xif.setProperty(P_INTERN_NSURIS, true);
491 if (LOGGER.isLoggable(Level.FINE)) {
492 LOGGER.log(Level.FINE, P_INTERN_NSURIS + " is {0}", true);
493 }
494 }
495
496 if (xif.isPropertySupported(P_MAX_ATTRIBUTES_PER_ELEMENT)) {
497 maxAttributesPerElement = Integer.valueOf(buildIntegerValue(
498 PROPERTY_MAX_ATTRIBUTES_PER_ELEMENT, DEFAULT_MAX_ATTRIBUTES_PER_ELEMENT)
499 );
500 xif.setProperty(P_MAX_ATTRIBUTES_PER_ELEMENT, maxAttributesPerElement);
501 if (LOGGER.isLoggable(Level.FINE)) {
502 LOGGER.log(Level.FINE, P_MAX_ATTRIBUTES_PER_ELEMENT + " is {0}", maxAttributesPerElement);
503 }
504 }
535
536 if (xif.isPropertySupported(P_MAX_ELEMENT_COUNT)) {
537 maxElementCount = Long.valueOf(buildLongValue(
538 PROPERTY_MAX_ELEMENT_COUNT, DEFAULT_MAX_ELEMENT_COUNT)
539 );
540 xif.setProperty(P_MAX_ELEMENT_COUNT, maxElementCount);
541 if (LOGGER.isLoggable(Level.FINE)) {
542 LOGGER.log(Level.FINE, P_MAX_ELEMENT_COUNT + " is {0}", maxElementCount);
543 }
544 }
545
546 if (xif.isPropertySupported(P_MAX_CHARACTERS)) {
547 maxCharacters = Long.valueOf(buildLongValue(
548 PROPERTY_MAX_CHARACTERS, DEFAULT_MAX_CHARACTERS)
549 );
550 xif.setProperty(P_MAX_CHARACTERS, maxCharacters);
551 if (LOGGER.isLoggable(Level.FINE)) {
552 LOGGER.log(Level.FINE, P_MAX_CHARACTERS + " is {0}", maxCharacters);
553 }
554 }
555 }
556
557 @Override
558 public XMLStreamReader doCreate(String systemId, InputStream in, boolean rejectDTDs) {
559 return super.doCreate(systemId, in, rejectDTDs);
560 }
561
562 @Override
563 public XMLStreamReader doCreate(String systemId, Reader in, boolean rejectDTDs) {
564 return super.doCreate(systemId, in, rejectDTDs);
565 }
566 }
567
568 private static int buildIntegerValue(String propertyName, int defaultValue) {
569 String propVal = System.getProperty(propertyName);
570 if (propVal != null && propVal.length() > 0) {
571 try {
572 Integer value = Integer.parseInt(propVal);
573 if (value > 0) {
574 // return with the value in System property
|
465 int mMaxElementDepth = 1000;
466 long mMaxElementCount = Long.MAX_VALUE;
467 long mMaxCharacters = Long.MAX_VALUE;
468 */
469
470 private int maxAttributesPerElement = DEFAULT_MAX_ATTRIBUTES_PER_ELEMENT;
471 private int maxAttributeSize = DEFAULT_MAX_ATTRIBUTE_SIZE;
472 private int maxChildrenPerElement = DEFAULT_MAX_CHILDREN_PER_ELEMENT;
473 private int maxElementDepth = DEFAULT_MAX_ELEMENT_DEPTH;
474 private long maxElementCount = DEFAULT_MAX_ELEMENT_COUNT;
475 private long maxCharacters = DEFAULT_MAX_CHARACTERS;
476
477 // Note: this is a copy from com.ctc.wstx.api.WstxInputProperties, to be removed in the future
478 private static final java.lang.String P_MAX_ATTRIBUTES_PER_ELEMENT = "com.ctc.wstx.maxAttributesPerElement";
479 private static final java.lang.String P_MAX_ATTRIBUTE_SIZE = "com.ctc.wstx.maxAttributeSize";
480 private static final java.lang.String P_MAX_CHILDREN_PER_ELEMENT = "com.ctc.wstx.maxChildrenPerElement";
481 private static final java.lang.String P_MAX_ELEMENT_COUNT = "com.ctc.wstx.maxElementCount";
482 private static final java.lang.String P_MAX_ELEMENT_DEPTH = "com.ctc.wstx.maxElementDepth";
483 private static final java.lang.String P_MAX_CHARACTERS = "com.ctc.wstx.maxCharacters";
484 private static final java.lang.String P_INTERN_NSURIS = "org.codehaus.stax2.internNsUris";
485 private static final java.lang.String P_RETURN_NULL_FOR_DEFAULT_NAMESPACE = "com.ctc.wstx.returnNullForDefaultNamespace";
486
487 public Woodstox(XMLInputFactory xif) {
488 super(xif);
489
490 if (xif.isPropertySupported(P_INTERN_NSURIS)) {
491 xif.setProperty(P_INTERN_NSURIS, true);
492 if (LOGGER.isLoggable(Level.FINE)) {
493 LOGGER.log(Level.FINE, P_INTERN_NSURIS + " is {0}", true);
494 }
495 }
496
497 if (xif.isPropertySupported(P_MAX_ATTRIBUTES_PER_ELEMENT)) {
498 maxAttributesPerElement = Integer.valueOf(buildIntegerValue(
499 PROPERTY_MAX_ATTRIBUTES_PER_ELEMENT, DEFAULT_MAX_ATTRIBUTES_PER_ELEMENT)
500 );
501 xif.setProperty(P_MAX_ATTRIBUTES_PER_ELEMENT, maxAttributesPerElement);
502 if (LOGGER.isLoggable(Level.FINE)) {
503 LOGGER.log(Level.FINE, P_MAX_ATTRIBUTES_PER_ELEMENT + " is {0}", maxAttributesPerElement);
504 }
505 }
536
537 if (xif.isPropertySupported(P_MAX_ELEMENT_COUNT)) {
538 maxElementCount = Long.valueOf(buildLongValue(
539 PROPERTY_MAX_ELEMENT_COUNT, DEFAULT_MAX_ELEMENT_COUNT)
540 );
541 xif.setProperty(P_MAX_ELEMENT_COUNT, maxElementCount);
542 if (LOGGER.isLoggable(Level.FINE)) {
543 LOGGER.log(Level.FINE, P_MAX_ELEMENT_COUNT + " is {0}", maxElementCount);
544 }
545 }
546
547 if (xif.isPropertySupported(P_MAX_CHARACTERS)) {
548 maxCharacters = Long.valueOf(buildLongValue(
549 PROPERTY_MAX_CHARACTERS, DEFAULT_MAX_CHARACTERS)
550 );
551 xif.setProperty(P_MAX_CHARACTERS, maxCharacters);
552 if (LOGGER.isLoggable(Level.FINE)) {
553 LOGGER.log(Level.FINE, P_MAX_CHARACTERS + " is {0}", maxCharacters);
554 }
555 }
556 //Using try/catch instead of isPropertySupported because Woodstox
557 //isPropertySupported is not always reliable
558 try {
559 //this is needed to make sure Woodstox behavior is spec compliant for
560 //calls to XMLStreamReader.getNamespacePrefix
561 xif.setProperty(P_RETURN_NULL_FOR_DEFAULT_NAMESPACE, Boolean.TRUE);
562 if (LOGGER.isLoggable(Level.FINE)) {
563 LOGGER.log(Level.FINE, P_RETURN_NULL_FOR_DEFAULT_NAMESPACE + " is {0}", xif.getProperty(P_RETURN_NULL_FOR_DEFAULT_NAMESPACE));
564 }
565 } catch (Throwable t) {
566 //ignore - this should not happen Woodstox 4.1.2 or later (maybe older version of Woodstox).
567 LOGGER.log(Level.WARNING, "Expected property not found in Woodstox input factory: '{0}'", P_RETURN_NULL_FOR_DEFAULT_NAMESPACE);
568 }
569 }
570
571 @Override
572 public XMLStreamReader doCreate(String systemId, InputStream in, boolean rejectDTDs) {
573 return super.doCreate(systemId, in, rejectDTDs);
574 }
575
576 @Override
577 public XMLStreamReader doCreate(String systemId, Reader in, boolean rejectDTDs) {
578 return super.doCreate(systemId, in, rejectDTDs);
579 }
580 }
581
582 private static int buildIntegerValue(String propertyName, int defaultValue) {
583 String propVal = System.getProperty(propertyName);
584 if (propVal != null && propVal.length() > 0) {
585 try {
586 Integer value = Integer.parseInt(propVal);
587 if (value > 0) {
588 // return with the value in System property
|