You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by fa...@apache.org on 2022/01/06 17:54:31 UTC
svn commit: r1896764 [1/7] - in /xmlbeans/trunk/src: main/java/org/apache/xmlbeans/ main/java/org/apache/xmlbeans/impl/inst2xsd/ main/java/org/apache/xmlbeans/impl/inst2xsd/util/ main/java/org/apache/xmlbeans/impl/schema/ main/java/org/apache/xmlbeans/...
Author: fanningpj
Date: Thu Jan 6 17:54:30 2022
New Revision: 1896764
URL: http://svn.apache.org/viewvc?rev=1896764&view=rev
Log:
[XMLBEANS-582] Make XmlCursor Autocloseable. Thanks to Robert Marcano. This closes #4
Added:
xmlbeans/trunk/src/test/java/xmlcursor/checkin/CloseTest.java (with props)
Removed:
xmlbeans/trunk/src/test/java/xmlcursor/checkin/DisposeTest.java
Modified:
xmlbeans/trunk/src/main/java/org/apache/xmlbeans/XmlCursor.java
xmlbeans/trunk/src/main/java/org/apache/xmlbeans/XmlError.java
xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/inst2xsd/RussianDollStrategy.java
xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/inst2xsd/util/TypeSystemHolder.java
xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/schema/SchemaAnnotationImpl.java
xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/schema/SchemaParticleImpl.java
xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeImpl.java
xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/schema/StscComplexTypeResolver.java
xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/schema/StscSimpleTypeResolver.java
xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/schema/StscTranslator.java
xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/store/Cursor.java
xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/tool/SchemaCopy.java
xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/tool/SchemaResourceManager.java
xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/values/NamespaceContext.java
xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/values/XmlComplexContentImpl.java
xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/values/XmlObjectBase.java
xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/xpathgen/XPathGenerator.java
xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/xsd2inst/SampleXmlUtil.java
xmlbeans/trunk/src/test/java/ValidatingXSRTests/checkin/ValidatingXMLStreamReaderTests.java
xmlbeans/trunk/src/test/java/compile/scomp/checkin/CompilationTests.java
xmlbeans/trunk/src/test/java/dom/checkin/DirtyCacheTests.java
xmlbeans/trunk/src/test/java/dom/checkin/DomTests.java
xmlbeans/trunk/src/test/java/misc/checkin/RuntimeSchemaLoaderTest.java
xmlbeans/trunk/src/test/java/misc/detailed/JiraRegression1_50Test.java
xmlbeans/trunk/src/test/java/misc/detailed/JiraRegression50_100Test.java
xmlbeans/trunk/src/test/java/random/common/Random.java
xmlbeans/trunk/src/test/java/scomp/attributes/detailed/AttrGroupTest.java
xmlbeans/trunk/src/test/java/scomp/attributes/detailed/LocalAttrForm.java
xmlbeans/trunk/src/test/java/scomp/contentType/complex/detailed/AnonymousTest.java
xmlbeans/trunk/src/test/java/scomp/contentType/complex/detailed/ElementOnlyContentTest.java
xmlbeans/trunk/src/test/java/scomp/contentType/complex/detailed/EmptyContentTest.java
xmlbeans/trunk/src/test/java/scomp/contentType/complex/detailed/MixedContentTest.java
xmlbeans/trunk/src/test/java/scomp/contentType/complex/detailed/NamedTest.java
xmlbeans/trunk/src/test/java/scomp/contentType/complex/modelGroup/detailed/ChoiceTest.java
xmlbeans/trunk/src/test/java/scomp/derivation/extension/detailed/MixedContentExtension.java
xmlbeans/trunk/src/test/java/scomp/derivation/restriction/detailed/EmptyContentRestriction.java
xmlbeans/trunk/src/test/java/scomp/derivation/restriction/detailed/MixedContentRestriction.java
xmlbeans/trunk/src/test/java/scomp/namespace/checkin/PreserveNamespaces.java
xmlbeans/trunk/src/test/java/scomp/substGroup/detailed/UserReportedTest.java
xmlbeans/trunk/src/test/java/scomp/substGroup/restriction/detailed/Block.java
xmlbeans/trunk/src/test/java/tools/xml/XmlComparator.java
xmlbeans/trunk/src/test/java/xmlcursor/checkin/AddToSelectionTest.java
xmlbeans/trunk/src/test/java/xmlcursor/checkin/AnnotationsTests.java
xmlbeans/trunk/src/test/java/xmlcursor/checkin/ComparePositionTest.java
xmlbeans/trunk/src/test/java/xmlcursor/checkin/CopyTest.java
xmlbeans/trunk/src/test/java/xmlcursor/checkin/CopyXmlContentsTest.java
xmlbeans/trunk/src/test/java/xmlcursor/checkin/IsAtSamePositionAsTest.java
xmlbeans/trunk/src/test/java/xmlcursor/checkin/IsInSameDocumentTest.java
xmlbeans/trunk/src/test/java/xmlcursor/checkin/MoveCharsTest.java
xmlbeans/trunk/src/test/java/xmlcursor/checkin/MoveTest.java
xmlbeans/trunk/src/test/java/xmlcursor/checkin/StoreTests.java
xmlbeans/trunk/src/test/java/xmlcursor/checkin/ToCursorTest.java
xmlbeans/trunk/src/test/java/xmlcursor/checkin/ToLastChildElementTest.java
xmlbeans/trunk/src/test/java/xmlcursor/checkin/ToNextBookmarkTest.java
xmlbeans/trunk/src/test/java/xmlcursor/checkin/ToNextSelectionTest.java
xmlbeans/trunk/src/test/java/xmlcursor/checkin/ToPrevBookmarkTest.java
xmlbeans/trunk/src/test/java/xmlcursor/checkin/ToPrevElementTest.java
xmlbeans/trunk/src/test/java/xmlcursor/common/BasicCursorTestCase.java
xmlbeans/trunk/src/test/java/xmlcursor/detailed/CopyCharsTest.java
xmlbeans/trunk/src/test/java/xmlcursor/detailed/CopyTest.java
xmlbeans/trunk/src/test/java/xmlcursor/detailed/CursorGeneratedTypedObjectTest.java
xmlbeans/trunk/src/test/java/xmlcursor/detailed/CursorLocations.java
xmlbeans/trunk/src/test/java/xmlcursor/detailed/CursorVsObjectAttributeTest.java
xmlbeans/trunk/src/test/java/xmlcursor/detailed/CursorVsObjectInsertRemoveTest.java
xmlbeans/trunk/src/test/java/xmlcursor/detailed/CursorVsObjectSetGetTextTest.java
xmlbeans/trunk/src/test/java/xmlcursor/detailed/MoveXmlTest2.java
xmlbeans/trunk/src/test/java/xmlcursor/detailed/MultipleCopyFromCursorTest.java
xmlbeans/trunk/src/test/java/xmlcursor/detailed/MultipleCopyTest.java
xmlbeans/trunk/src/test/java/xmlcursor/detailed/MultipleCursorSetTest.java
xmlbeans/trunk/src/test/java/xmlcursor/detailed/ObjectCursorInteractionTest.java
xmlbeans/trunk/src/test/java/xmlcursor/detailed/SelectionsTest.java
xmlbeans/trunk/src/test/java/xmlcursor/detailed/ToBookmarkTest.java
xmlbeans/trunk/src/test/java/xmlcursor/detailed/XmlLineNumberTest.java
xmlbeans/trunk/src/test/java/xmlcursor/jsr173/common/CharactersTest.java
xmlbeans/trunk/src/test/java/xmlcursor/jsr173/common/GeneralMethodsTest.java
xmlbeans/trunk/src/test/java/xmlcursor/jsr173/common/IsXXXTest.java
xmlbeans/trunk/src/test/java/xmlcursor/jsr173/common/NamespaceTest.java
xmlbeans/trunk/src/test/java/xmlcursor/jsr173/common/PITest.java
xmlbeans/trunk/src/test/java/xmlcursor/xpath/common/XPathCommon.java
xmlbeans/trunk/src/test/java/xmlcursor/xpath/common/XPathFunctionAuxTest.java
xmlbeans/trunk/src/test/java/xmlcursor/xpath/common/XPathFunctionTest.java
xmlbeans/trunk/src/test/java/xmlcursor/xpath/complex/checkin/ContainerCommentTest.java
xmlbeans/trunk/src/test/java/xmlcursor/xpath/complex/checkin/XPathTests.java
xmlbeans/trunk/src/test/java/xmlcursor/xpath/complex/checkin/XPathTestsMisc.java
xmlbeans/trunk/src/test/java/xmlcursor/xpath/complex/detailed/DeclareNamespaceTest.java
xmlbeans/trunk/src/test/java/xmlcursor/xpath/complex/detailed/NodeCopyTest.java
xmlbeans/trunk/src/test/java/xmlcursor/xpath/complex/detailed/XPathExpressionTestImpl.java
xmlbeans/trunk/src/test/java/xmlcursor/xpath/complex/detailed/XPathFunctionAuxTest.java
xmlbeans/trunk/src/test/java/xmlcursor/xpath/complex/detailed/XPathNodeTest.java
xmlbeans/trunk/src/test/java/xmlcursor/xpath/complex/detailed/XPathTest.java
xmlbeans/trunk/src/test/java/xmlcursor/xpath/xbean_xpath/detailed/AxesTest.java
xmlbeans/trunk/src/test/java/xmlcursor/xpath/xbean_xpath/detailed/NodeTest.java
xmlbeans/trunk/src/test/java/xmlcursor/xquery/detailed/StoreTestsXqrl.java
xmlbeans/trunk/src/test/java/xmlcursor/xquery/detailed/XQueryTest.java
xmlbeans/trunk/src/test/java/xmlcursor/xquery/detailed/XQueryVariableBindingTest.java
xmlbeans/trunk/src/test/java/xmlobject/checkin/AssortedTests.java
xmlbeans/trunk/src/test/java/xmlobject/checkin/InstanceValidationTests.java
xmlbeans/trunk/src/test/java/xmlobject/checkin/XPathTest.java
xmlbeans/trunk/src/test/java/xmlobject/common/StringXmlReader.java
xmlbeans/trunk/src/test/java/xmlobject/detailed/CompareToTest.java
xmlbeans/trunk/src/test/java/xmlobject/detailed/SetIdentityTest.java
xmlbeans/trunk/src/test/java/xmlobject/detailed/TypedObjectCursor.java
xmlbeans/trunk/src/test/java/xmlobject/detailed/TypedSettersTests.java
xmlbeans/trunk/src/test/java/xmlobject/schematypes/checkin/QNameTests.java
xmlbeans/trunk/src/test/java/xmlobject/schematypes/checkin/SchemaTypesTests.java
xmlbeans/trunk/src/test/java/xmlobject/xmlloader/detailed/XmlStreamBeanReader.java
xmlbeans/trunk/src/test/java/xmltokensource/detailed/NewDomNodeTest.java
xmlbeans/trunk/src/test/java/xmltokensource/detailed/PrettyPrintNamespaceTest.java
xmlbeans/trunk/src/test/java/xmltokensource/detailed/RoundTripLoaderTest.java
xmlbeans/trunk/src/test/java/xmltokensource/detailed/XmlTextTest.java
Modified: xmlbeans/trunk/src/main/java/org/apache/xmlbeans/XmlCursor.java
URL: http://svn.apache.org/viewvc/xmlbeans/trunk/src/main/java/org/apache/xmlbeans/XmlCursor.java?rev=1896764&r1=1896763&r2=1896764&view=diff
==============================================================================
--- xmlbeans/trunk/src/main/java/org/apache/xmlbeans/XmlCursor.java (original)
+++ xmlbeans/trunk/src/main/java/org/apache/xmlbeans/XmlCursor.java Thu Jan 6 17:54:30 2022
@@ -128,7 +128,7 @@ import java.util.Map;
* creating a brand new instance of an empty document. Also note that
* attributes may only follow container tokens (STARTDOC or START)
*/
-public interface XmlCursor extends XmlTokenSource {
+public interface XmlCursor extends XmlTokenSource, AutoCloseable {
/**
* An enumeration that identifies the type of an XML token.
*/
@@ -335,11 +335,29 @@ public interface XmlCursor extends XmlTo
* So, explicitly disposing a cursor allows the underlying implementation
* to release its responsibility of maintaining its position.
* <p>
- * After a cursor has been disposed, it may not be used again. It can
+ * After a cursor has been closed, it may not be used again. It can
* throw IllegalStateException or NullPointerException if used after
* disposal.
+ * <p>
+ * XmlCursor implements <code>java.lang.AutoCloseable</code> and the
+ * try-with-resources pattern is recommended.<br/><br/>
+ * <p>
+ * Note: Future major release will remove this default implementation.
+ */
+
+ default void close() {
+ this.dispose();
+ }
+
+ /**
+ * Deallocates resources needed to manage the cursor. For details see
+ * {@link #close()}. XmlCursor implements <code>java.lang.AutoCloseable</code>
+ * and the try-with-resources pattern is recommended.
+ *
+ * @see #close()
*/
+ @Deprecated
void dispose();
/**
Modified: xmlbeans/trunk/src/main/java/org/apache/xmlbeans/XmlError.java
URL: http://svn.apache.org/viewvc/xmlbeans/trunk/src/main/java/org/apache/xmlbeans/XmlError.java?rev=1896764&r1=1896763&r2=1896764&view=diff
==============================================================================
--- xmlbeans/trunk/src/main/java/org/apache/xmlbeans/XmlError.java (original)
+++ xmlbeans/trunk/src/main/java/org/apache/xmlbeans/XmlError.java Thu Jan 6 17:54:30 2022
@@ -104,22 +104,20 @@ public class XmlError implements java.io
// Hunt down the line/column/offset
source = cursor.documentProperties().getSourceName();
- XmlCursor c = cursor.newCursor();
-
- XmlLineNumber ln =
- (XmlLineNumber) c.getBookmark(XmlLineNumber.class);
-
- if (ln == null) {
- ln = (XmlLineNumber) c.toPrevBookmark(XmlLineNumber.class);
+ try (XmlCursor c = cursor.newCursor()) {
+ XmlLineNumber ln =
+ (XmlLineNumber) c.getBookmark(XmlLineNumber.class);
+
+ if (ln == null) {
+ ln = (XmlLineNumber) c.toPrevBookmark(XmlLineNumber.class);
+ }
+
+ if (ln != null) {
+ line = ln.getLine();
+ column = ln.getColumn();
+ offset = ln.getOffset();
+ }
}
-
- if (ln != null) {
- line = ln.getLine();
- column = ln.getColumn();
- offset = ln.getOffset();
- }
-
- c.dispose();
}
_message = message;
Modified: xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/inst2xsd/RussianDollStrategy.java
URL: http://svn.apache.org/viewvc/xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/inst2xsd/RussianDollStrategy.java?rev=1896764&r1=1896763&r2=1896764&view=diff
==============================================================================
--- xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/inst2xsd/RussianDollStrategy.java (original)
+++ xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/inst2xsd/RussianDollStrategy.java Thu Jan 6 17:54:30 2022
@@ -38,25 +38,27 @@ public class RussianDollStrategy
public void processDoc(XmlObject[] instances, Inst2XsdOptions options, TypeSystemHolder typeSystemHolder) {
for (XmlObject instance : instances) {
- XmlCursor xc = instance.newCursor();
- // xc on start doc
+ try (XmlCursor xc = instance.newCursor()) {
+ // xc on start doc
- StringBuilder comment = new StringBuilder();
+ StringBuilder comment = new StringBuilder();
- while (!xc.isStart()) {
- xc.toNextToken();
- if (xc.isComment()) {
- comment.append(xc.getTextValue());
- } else if (xc.isEnddoc()) {
- return;
+ while (!xc.isStart()) {
+ xc.toNextToken();
+ if (xc.isComment()) {
+ comment.append(xc.getTextValue());
+ } else if (xc.isEnddoc()) {
+ return;
+ }
}
- }
- // xc now on the root element
- Element withElem = processElement(xc, comment.toString(), options, typeSystemHolder);
- withElem.setGlobal(true);
+ // xc now on the root element
+
+ Element withElem = processElement(xc, comment.toString(), options, typeSystemHolder);
+ withElem.setGlobal(true);
- addGlobalElement(withElem, typeSystemHolder, options);
+ addGlobalElement(withElem, typeSystemHolder, options);
+ }
}
}
@@ -164,27 +166,27 @@ public class RussianDollStrategy
} else {
// simple content
// hack workaround for being able to call xc.getNamespaceForPrefix()
- XmlCursor xcForNamespaces = xc.newCursor();
- xcForNamespaces.toParent();
-
- if (attributes.size() > 0) {
- elemType.setContentType(Type.COMPLEX_TYPE_SIMPLE_CONTENT);
+ try (XmlCursor xcForNamespaces = xc.newCursor()) {
+ xcForNamespaces.toParent();
- Type extendedType = Type.createNamedType(
- processSimpleContentType(textBuff.toString(), options, xcForNamespaces), Type.SIMPLE_TYPE_SIMPLE_CONTENT);
- elemType.setExtensionType(extendedType);
+ if (attributes.size() > 0) {
+ elemType.setContentType(Type.COMPLEX_TYPE_SIMPLE_CONTENT);
- processAttributesInComplexType(elemType, attributes);
- } else {
- elemType.setContentType(Type.SIMPLE_TYPE_SIMPLE_CONTENT);
- elemType.setName(processSimpleContentType(textBuff.toString(), options, xcForNamespaces));
-
- // add enumeration value
- String enumValue = XmlString.type.getName().equals(elemType.getName()) ? textBuff.toString() : collapsedText;
- elemType.addEnumerationValue(enumValue, xcForNamespaces);
+ Type extendedType = Type.createNamedType(
+ processSimpleContentType(textBuff.toString(), options, xcForNamespaces), Type.SIMPLE_TYPE_SIMPLE_CONTENT);
+ elemType.setExtensionType(extendedType);
+
+ processAttributesInComplexType(elemType, attributes);
+ } else {
+ elemType.setContentType(Type.SIMPLE_TYPE_SIMPLE_CONTENT);
+ elemType.setName(processSimpleContentType(textBuff.toString(), options, xcForNamespaces));
+
+ // add enumeration value
+ String enumValue = XmlString.type.getName().equals(elemType.getName()) ? textBuff.toString() : collapsedText;
+ elemType.addEnumerationValue(enumValue, xcForNamespaces);
+ }
+ // end hack
}
-
- xcForNamespaces.dispose(); // end hack
}
checkIfReferenceToGlobalTypeIsNeeded(element, typeSystemHolder, options);
@@ -267,13 +269,13 @@ public class RussianDollStrategy
attribute.setName(attName);
- XmlCursor parent = xc.newCursor();
- parent.toParent();
+ Type simpleContentType;
+ try (XmlCursor parent = xc.newCursor()) {
+ parent.toParent();
- Type simpleContentType = Type.createNamedType(
- processSimpleContentType(xc.getTextValue(), options, parent), Type.SIMPLE_TYPE_SIMPLE_CONTENT);
-
- parent.dispose();
+ simpleContentType = Type.createNamedType(
+ processSimpleContentType(xc.getTextValue(), options, parent), Type.SIMPLE_TYPE_SIMPLE_CONTENT);
+ }
attribute.setType(simpleContentType);
Modified: xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/inst2xsd/util/TypeSystemHolder.java
URL: http://svn.apache.org/viewvc/xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/inst2xsd/util/TypeSystemHolder.java?rev=1896764&r1=1896763&r2=1896764&view=diff
==============================================================================
--- xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/inst2xsd/util/TypeSystemHolder.java (original)
+++ xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/inst2xsd/util/TypeSystemHolder.java Thu Jan 6 17:54:30 2022
@@ -234,10 +234,11 @@ public class TypeSystemHolder
XmlQName xqname = XmlQName.Factory.newValue(value);
org.apache.xmlbeans.impl.xb.xsdschema.NoFixedFacet enumSElem = restriction.addNewEnumeration();
- XmlCursor xc = enumSElem.newCursor();
- String newPrefix = xc.prefixForNamespace(value.getNamespaceURI());
- xc.dispose();
+ String newPrefix;
+ try (XmlCursor xc = enumSElem.newCursor()) {
+ newPrefix = xc.prefixForNamespace(value.getNamespaceURI());
+ }
enumSElem.setValue( XmlQName.Factory.newValue(
new QName(value.getNamespaceURI(), value.getLocalPart(), newPrefix)));
Modified: xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/schema/SchemaAnnotationImpl.java
URL: http://svn.apache.org/viewvc/xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/schema/SchemaAnnotationImpl.java?rev=1896764&r1=1896763&r2=1896764&view=diff
==============================================================================
--- xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/schema/SchemaAnnotationImpl.java (original)
+++ xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/schema/SchemaAnnotationImpl.java Thu Jan 6 17:54:30 2022
@@ -85,7 +85,7 @@ public class SchemaAnnotationImpl implem
for (int i = 0; i < n; i++)
{
String doc = _documentationAsXml[i];
- try
+ try
{
_documentation[i] = DocumentationDocument.Factory.
parse(doc).getDocumentation();
@@ -154,7 +154,7 @@ public class SchemaAnnotationImpl implem
// Now the attributes on the annotation element
addNoSchemaAttributes(ann, attrArray);
}
-
+
result._attributes =
(AttributeImpl[]) attrArray.toArray(new AttributeImpl[attrArray.size()]);
return result;
@@ -162,33 +162,33 @@ public class SchemaAnnotationImpl implem
private static void addNoSchemaAttributes(XmlObject elem, List attrList)
{
- XmlCursor cursor = elem.newCursor();
- boolean hasAttributes = cursor.toFirstAttribute();
- while (hasAttributes)
- {
- QName name = cursor.getName();
- String namespaceURI = name.getNamespaceURI();
- if ("".equals(namespaceURI) ||
- "http://www.w3.org/2001/XMLSchema".equals(namespaceURI))
- ; // no nothing
- else
+ try (XmlCursor cursor = elem.newCursor()) {
+ boolean hasAttributes = cursor.toFirstAttribute();
+ while (hasAttributes)
{
- String attValue = cursor.getTextValue();
- String valUri;
- String prefix;
- if (attValue.indexOf(':') > 0)
- prefix = attValue.substring(0, attValue.indexOf(':'));
+ QName name = cursor.getName();
+ String namespaceURI = name.getNamespaceURI();
+ if ("".equals(namespaceURI) ||
+ "http://www.w3.org/2001/XMLSchema".equals(namespaceURI))
+ ; // no nothing
else
- prefix = "";
- cursor.push();
- cursor.toParent();
- valUri = cursor.namespaceForPrefix(prefix);
- cursor.pop();
- attrList.add(new AttributeImpl(name, attValue, valUri)); //add the attribute
+ {
+ String attValue = cursor.getTextValue();
+ String valUri;
+ String prefix;
+ if (attValue.indexOf(':') > 0)
+ prefix = attValue.substring(0, attValue.indexOf(':'));
+ else
+ prefix = "";
+ cursor.push();
+ cursor.toParent();
+ valUri = cursor.namespaceForPrefix(prefix);
+ cursor.pop();
+ attrList.add(new AttributeImpl(name, attValue, valUri)); //add the attribute
+ }
+ hasAttributes = cursor.toNextAttribute();
}
- hasAttributes = cursor.toNextAttribute();
}
- cursor.dispose();
}
private SchemaAnnotationImpl(SchemaContainer c)
Modified: xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/schema/SchemaParticleImpl.java
URL: http://svn.apache.org/viewvc/xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/schema/SchemaParticleImpl.java?rev=1896764&r1=1896763&r2=1896764&view=diff
==============================================================================
--- xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/schema/SchemaParticleImpl.java (original)
+++ xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/schema/SchemaParticleImpl.java Thu Jan 6 17:54:30 2022
@@ -307,8 +307,9 @@ public class SchemaParticleImpl implemen
Documentation[] docArray = a.getDocumentationArray();
StringBuilder sb = new StringBuilder();
for (Documentation documentation : docArray) {
- XmlCursor c = documentation.newCursor();
- sb.append(c.getTextValue());
+ try (XmlCursor c = documentation.newCursor()) {
+ sb.append(c.getTextValue());
+ }
}
return sb.toString();
}
Modified: xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeImpl.java
URL: http://svn.apache.org/viewvc/xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeImpl.java?rev=1896764&r1=1896763&r2=1896764&view=diff
==============================================================================
--- xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeImpl.java (original)
+++ xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeImpl.java Thu Jan 6 17:54:30 2022
@@ -2419,13 +2419,10 @@ public final class SchemaTypeImpl implem
StringBuilder docBody = new StringBuilder();
for (Documentation documentation : ann.getDocumentationArray()) {
- XmlCursor c = documentation.newCursor();
- try {
+ try (XmlCursor c = documentation.newCursor()) {
if (c.getChars() != null) {
docBody.append(c.getTextValue());
}
- } finally {
- c.dispose();
}
}
return docBody.toString();
Modified: xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/schema/StscComplexTypeResolver.java
URL: http://svn.apache.org/viewvc/xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/schema/StscComplexTypeResolver.java?rev=1896764&r1=1896763&r2=1896764&view=diff
==============================================================================
--- xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/schema/StscComplexTypeResolver.java (original)
+++ xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/schema/StscComplexTypeResolver.java Thu Jan 6 17:54:30 2022
@@ -48,9 +48,7 @@ public class StscComplexTypeResolver {
}
static Schema getSchema(XmlObject o) {
- XmlCursor c = o.newCursor();
-
- try {
+ try (XmlCursor c = o.newCursor()) {
while (c.toParent()) {
o = c.getObject();
@@ -58,8 +56,6 @@ public class StscComplexTypeResolver {
return (Schema) o;
}
}
- } finally {
- c.dispose();
}
return null;
@@ -823,176 +819,176 @@ public class StscComplexTypeResolver {
baseModel = baseType.getAttributeModel();
}
- XmlCursor cur = parseTree.newCursor();
+ try (XmlCursor cur = parseTree.newCursor()) {
+ for (boolean more = cur.toFirstChild(); more; more = cur.toNextSibling()) {
+ switch (translateAttributeCode(cur.getName())) {
+ case ATTRIBUTE_CODE: {
+ Attribute xsdattr = (Attribute) cur.getObject();
+
+ SchemaLocalAttribute sAttr = StscTranslator.translateAttribute(xsdattr, targetNamespace, formDefault, chameleon, anonymousTypes, outerType, baseModel, true);
+ if (sAttr == null) {
+ continue;
+ }
- for (boolean more = cur.toFirstChild(); more; more = cur.toNextSibling()) {
- switch (translateAttributeCode(cur.getName())) {
- case ATTRIBUTE_CODE: {
- Attribute xsdattr = (Attribute) cur.getObject();
+ if (seenAttributes.contains(sAttr.getName())) {
+ state.error(XmlErrorCodes.COMPLEX_TYPE_PROPERTIES$DUPLICATE_ATTRIBUTE,
+ new Object[]{QNameHelper.pretty(sAttr.getName()), QNameHelper.pretty(outerType.getName())},
+ xsdattr.xgetName());
+ continue; // ignore the duplicate attr
+ }
- SchemaLocalAttribute sAttr = StscTranslator.translateAttribute(xsdattr, targetNamespace, formDefault, chameleon, anonymousTypes, outerType, baseModel, true);
- if (sAttr == null) {
- continue;
- }
+ seenAttributes.add(sAttr.getName());
- if (seenAttributes.contains(sAttr.getName())) {
- state.error(XmlErrorCodes.COMPLEX_TYPE_PROPERTIES$DUPLICATE_ATTRIBUTE,
- new Object[]{QNameHelper.pretty(sAttr.getName()), QNameHelper.pretty(outerType.getName())},
- xsdattr.xgetName());
- continue; // ignore the duplicate attr
- }
-
- seenAttributes.add(sAttr.getName());
-
- if (baseModel != null) {
- SchemaLocalAttribute baseAttr = baseModel.getAttribute(sAttr.getName());
- if (baseAttr == null) {
- if (!extension) {
- if (!baseModel.getWildcardSet().contains(sAttr.getName())) {
- state.error(XmlErrorCodes.COMPLEX_TYPE_RESTRICTION$ATTR_IN_BASE_WILDCARD_SET,
- new Object[]{QNameHelper.pretty(sAttr.getName()), QNameHelper.pretty(outerType.getName())}, xsdattr);
- }
- }
- } else {
- if (extension) {
- // KHK: cos-ct-extends.1.2?
- if (sAttr.getUse() == SchemaLocalAttribute.PROHIBITED) {
- state.error("An extension cannot prohibit an attribute from the base type; use restriction instead.", XmlErrorCodes.DUPLICATE_ATTRIBUTE_NAME, xsdattr.xgetUse());
- }
- } else {
- if (sAttr.getUse() != SchemaLocalAttribute.REQUIRED) {
- if (baseAttr.getUse() == SchemaLocalAttribute.REQUIRED) {
- state.error(XmlErrorCodes.COMPLEX_TYPE_RESTRICTION$ATTR_REQUIRED,
+ if (baseModel != null) {
+ SchemaLocalAttribute baseAttr = baseModel.getAttribute(sAttr.getName());
+ if (baseAttr == null) {
+ if (!extension) {
+ if (!baseModel.getWildcardSet().contains(sAttr.getName())) {
+ state.error(XmlErrorCodes.COMPLEX_TYPE_RESTRICTION$ATTR_IN_BASE_WILDCARD_SET,
new Object[]{QNameHelper.pretty(sAttr.getName()), QNameHelper.pretty(outerType.getName())}, xsdattr);
}
-
+ }
+ } else {
+ if (extension) {
+ // KHK: cos-ct-extends.1.2?
if (sAttr.getUse() == SchemaLocalAttribute.PROHIBITED) {
- result.removeProhibitedAttribute(sAttr.getName());
+ state.error("An extension cannot prohibit an attribute from the base type; use restriction instead.", XmlErrorCodes.DUPLICATE_ATTRIBUTE_NAME, xsdattr.xgetUse());
+ }
+ } else {
+ if (sAttr.getUse() != SchemaLocalAttribute.REQUIRED) {
+ if (baseAttr.getUse() == SchemaLocalAttribute.REQUIRED) {
+ state.error(XmlErrorCodes.COMPLEX_TYPE_RESTRICTION$ATTR_REQUIRED,
+ new Object[]{QNameHelper.pretty(sAttr.getName()), QNameHelper.pretty(outerType.getName())}, xsdattr);
+ }
+
+ if (sAttr.getUse() == SchemaLocalAttribute.PROHIBITED) {
+ result.removeProhibitedAttribute(sAttr.getName());
+ }
}
}
}
}
- }
- if (sAttr.getUse() != SchemaLocalAttribute.PROHIBITED) {
- result.addAttribute(sAttr);
- } else {
- // attribute is prohibited. If it has an anonymous type remove
- // it from the list (this will prevent inclusion of any anonymous
- // types defined within the prohibited attribute which would
- // otherwise attempt to refer to the prohibited attribute at
- // save() time)
- SchemaType attrType = sAttr.getType();
- if (anonymousTypes != null) {
- anonymousTypes.remove(attrType);
+ if (sAttr.getUse() != SchemaLocalAttribute.PROHIBITED) {
+ result.addAttribute(sAttr);
+ } else {
+ // attribute is prohibited. If it has an anonymous type remove
+ // it from the list (this will prevent inclusion of any anonymous
+ // types defined within the prohibited attribute which would
+ // otherwise attempt to refer to the prohibited attribute at
+ // save() time)
+ SchemaType attrType = sAttr.getType();
+ if (anonymousTypes != null) {
+ anonymousTypes.remove(attrType);
+ }
}
- }
- if (sAttr.getDefaultText() != null && !sAttr.isFixed()) {
- if (sAttr.getUse() != SchemaLocalAttribute.OPTIONAL) {
- state.error(XmlErrorCodes.SCHEMA_ATTR$DEFAULT_AND_USE_OPTIONAL,
- new Object[]{QNameHelper.pretty(sAttr.getName())}, xsdattr);
+ if (sAttr.getDefaultText() != null && !sAttr.isFixed()) {
+ if (sAttr.getUse() != SchemaLocalAttribute.OPTIONAL) {
+ state.error(XmlErrorCodes.SCHEMA_ATTR$DEFAULT_AND_USE_OPTIONAL,
+ new Object[]{QNameHelper.pretty(sAttr.getName())}, xsdattr);
+ }
}
- }
- break;
- }
- case ANY_ATTRIBUTE_CODE: {
- Wildcard xsdwc = (Wildcard) cur.getObject();
- if (seenWildcard) {
- // KHK: ?
- state.error("Only one attribute wildcard allowed", XmlErrorCodes.DUPLICATE_ANY_ATTRIBUTE, xsdwc);
- continue; // ignore the extra wildcard
- }
- seenWildcard = true;
- NamespaceList nsList = xsdwc.xgetNamespace();
- String nsText;
- if (nsList == null) {
- nsText = "##any";
- } else {
- nsText = nsList.getStringValue();
+ break;
}
- QNameSet wcset = QNameSet.forWildcardNamespaceString(nsText, targetNamespace);
-
- if (baseModel != null && !extension) {
- if (baseModel.getWildcardSet() == null) {
- state.error(XmlErrorCodes.COMPLEX_TYPE_RESTRICTION$BASE_HAS_ATTR_WILDCARD, null, xsdwc);
+ case ANY_ATTRIBUTE_CODE: {
+ Wildcard xsdwc = (Wildcard) cur.getObject();
+ if (seenWildcard) {
+ // KHK: ?
+ state.error("Only one attribute wildcard allowed", XmlErrorCodes.DUPLICATE_ANY_ATTRIBUTE, xsdwc);
continue; // ignore the extra wildcard
- } else if (!baseModel.getWildcardSet().containsAll(wcset)) {
- state.error(XmlErrorCodes.COMPLEX_TYPE_RESTRICTION$ATTR_WILDCARD_SUBSET,
- new Object[]{nsText}, xsdwc);
- continue; // ignore the restriction
}
- }
+ seenWildcard = true;
+ NamespaceList nsList = xsdwc.xgetNamespace();
+ String nsText;
+ if (nsList == null) {
+ nsText = "##any";
+ } else {
+ nsText = nsList.getStringValue();
+ }
+ QNameSet wcset = QNameSet.forWildcardNamespaceString(nsText, targetNamespace);
- int wcprocess = translateWildcardProcess(xsdwc.xgetProcessContents());
- if (result.getWildcardProcess() == SchemaAttributeModel.NONE) {
- result.setWildcardSet(wcset);
- result.setWildcardProcess(wcprocess);
- } else {
- if (extension) {
- result.setWildcardSet(wcset.union(result.getWildcardSet()));
+ if (baseModel != null && !extension) {
+ if (baseModel.getWildcardSet() == null) {
+ state.error(XmlErrorCodes.COMPLEX_TYPE_RESTRICTION$BASE_HAS_ATTR_WILDCARD, null, xsdwc);
+ continue; // ignore the extra wildcard
+ } else if (!baseModel.getWildcardSet().containsAll(wcset)) {
+ state.error(XmlErrorCodes.COMPLEX_TYPE_RESTRICTION$ATTR_WILDCARD_SUBSET,
+ new Object[]{nsText}, xsdwc);
+ continue; // ignore the restriction
+ }
+ }
+
+ int wcprocess = translateWildcardProcess(xsdwc.xgetProcessContents());
+ if (result.getWildcardProcess() == SchemaAttributeModel.NONE) {
+ result.setWildcardSet(wcset);
result.setWildcardProcess(wcprocess);
} else {
- result.setWildcardSet(wcset.intersect(result.getWildcardSet()));
- // keep old process
+ if (extension) {
+ result.setWildcardSet(wcset.union(result.getWildcardSet()));
+ result.setWildcardProcess(wcprocess);
+ } else {
+ result.setWildcardSet(wcset.intersect(result.getWildcardSet()));
+ // keep old process
+ }
}
+ break;
}
- break;
- }
- case ATTRIBUTE_GROUP_CODE: {
- AttributeGroupRef xsdag = (AttributeGroupRef) cur.getObject();
- QName ref = xsdag.getRef();
- if (ref == null) {
- // KHK: s4s
- state.error("Attribute group reference must have a ref attribute", XmlErrorCodes.ATTRIBUTE_GROUP_MISSING_REF, xsdag);
- continue;
- }
- SchemaAttributeGroupImpl group;
- if (redefinitionFor != null) {
- group = state.findRedefinedAttributeGroup(ref, chameleon ? targetNamespace : null, redefinitionFor);
- if (group != null &&
- redefinitionFor.getName().equals(group.getName())) {
- if (seenRedefinition) {
- state.error(XmlErrorCodes.SCHEMA_REDEFINE$ATTR_GROUP_SELF_REF,
- new Object[]{QNameHelper.pretty(redefinitionFor.getName())}, xsdag);
+ case ATTRIBUTE_GROUP_CODE: {
+ AttributeGroupRef xsdag = (AttributeGroupRef) cur.getObject();
+ QName ref = xsdag.getRef();
+ if (ref == null) {
+ // KHK: s4s
+ state.error("Attribute group reference must have a ref attribute", XmlErrorCodes.ATTRIBUTE_GROUP_MISSING_REF, xsdag);
+ continue;
+ }
+ SchemaAttributeGroupImpl group;
+ if (redefinitionFor != null) {
+ group = state.findRedefinedAttributeGroup(ref, chameleon ? targetNamespace : null, redefinitionFor);
+ if (group != null &&
+ redefinitionFor.getName().equals(group.getName())) {
+ if (seenRedefinition) {
+ state.error(XmlErrorCodes.SCHEMA_REDEFINE$ATTR_GROUP_SELF_REF,
+ new Object[]{QNameHelper.pretty(redefinitionFor.getName())}, xsdag);
+ }
+ seenRedefinition = true;
}
- seenRedefinition = true;
+ } else {
+ group = state.findAttributeGroup(ref, chameleon ? targetNamespace : null, targetNamespace);
}
- } else {
- group = state.findAttributeGroup(ref, chameleon ? targetNamespace : null, targetNamespace);
- }
- if (group == null) {
- state.notFoundError(ref, SchemaType.ATTRIBUTE_GROUP, xsdag.xgetRef(), true);
- continue;
- }
- if (state.isProcessing(group)) {
- state.error(XmlErrorCodes.SCHEMA_ATTR_GROUP$SELF_REF,
- new Object[]{QNameHelper.pretty(group.getName())}, group.getParseObject());
- continue;
+ if (group == null) {
+ state.notFoundError(ref, SchemaType.ATTRIBUTE_GROUP, xsdag.xgetRef(), true);
+ continue;
+ }
+ if (state.isProcessing(group)) {
+ state.error(XmlErrorCodes.SCHEMA_ATTR_GROUP$SELF_REF,
+ new Object[]{QNameHelper.pretty(group.getName())}, group.getParseObject());
+ continue;
+ }
+ String subTargetNamespace = targetNamespace;
+ if (group.getTargetNamespace() != null) {
+ subTargetNamespace = group.getTargetNamespace();
+ chameleon = group.getChameleonNamespace() != null;
+ }
+
+ state.startProcessing(group);
+ SchemaAttributeGroupImpl nestedRedefinitionFor = null;
+ if (group.isRedefinition()) {
+ nestedRedefinitionFor = group;
+ }
+ translateAttributeModel(group.getParseObject(), subTargetNamespace, chameleon,
+ group.getFormDefault(),
+ anonymousTypes, outerType, seenAttributes, result, baseType,
+ extension, nestedRedefinitionFor);
+ state.finishProcessing(group);
+ break;
}
- String subTargetNamespace = targetNamespace;
- if (group.getTargetNamespace() != null) {
- subTargetNamespace = group.getTargetNamespace();
- chameleon = group.getChameleonNamespace() != null;
- }
-
- state.startProcessing(group);
- SchemaAttributeGroupImpl nestedRedefinitionFor = null;
- if (group.isRedefinition()) {
- nestedRedefinitionFor = group;
- }
- translateAttributeModel(group.getParseObject(), subTargetNamespace, chameleon,
- group.getFormDefault(),
- anonymousTypes, outerType, seenAttributes, result, baseType,
- extension, nestedRedefinitionFor);
- state.finishProcessing(group);
- break;
+ default:
+ // skip things that are not part of the attribute model.
+ break;
}
- default:
- // skip things that are not part of the attribute model.
- break;
}
}
// If this is restriction and no wildcard was present, then
@@ -1180,12 +1176,13 @@ public class StscComplexTypeResolver {
}
// no go to the child.
- XmlCursor cur = group.getParseObject().newCursor();
- for (boolean more = cur.toFirstChild(); more; more = cur.toNextSibling()) {
- particleCode = translateParticleCode(cur.getName());
- if (particleCode != 0) {
- parseTree = cur.getObject();
- break;
+ try (XmlCursor cur = group.getParseObject().newCursor()) {
+ for (boolean more = cur.toFirstChild(); more; more = cur.toNextSibling()) {
+ particleCode = translateParticleCode(cur.getName());
+ if (particleCode != 0) {
+ parseTree = cur.getObject();
+ break;
+ }
}
}
if (particleCode == 0) {
@@ -1246,22 +1243,22 @@ public class StscComplexTypeResolver {
}
if (hasChildren) {
- XmlCursor cur = parseTree.newCursor();
List<SchemaParticle> accumulate = new ArrayList<>();
- for (boolean more = cur.toFirstChild(); more; more = cur.toNextSibling()) {
- int code = translateParticleCode(cur.getName());
- if (code == 0) {
- continue;
- }
- addMinusPointlessParticles(accumulate,
- translateContentModel(outerType,
- cur.getObject(), targetNamespace, chameleon,
- elemFormDefault, attFormDefault, code,
- anonymousTypes, elementModel, true, redefinitionFor),
- sPart.getParticleType());
+ try (XmlCursor cur = parseTree.newCursor()) {
+ for (boolean more = cur.toFirstChild(); more; more = cur.toNextSibling()) {
+ int code = translateParticleCode(cur.getName());
+ if (code == 0) {
+ continue;
+ }
+ addMinusPointlessParticles(accumulate,
+ translateContentModel(outerType,
+ cur.getObject(), targetNamespace, chameleon,
+ elemFormDefault, attFormDefault, code,
+ anonymousTypes, elementModel, true, redefinitionFor),
+ sPart.getParticleType());
+ }
}
sPart.setParticleChildren(accumulate.toArray(new SchemaParticle[0]));
- cur.dispose();
}
@@ -1880,7 +1877,9 @@ public class StscComplexTypeResolver {
if (parseEg == null) {
return 0;
}
- return translateParticleCode(parseEg.newCursor().getName());
+ try (XmlCursor c = parseEg.newCursor()) {
+ return translateParticleCode(c.getName());
+ }
}
private static int translateParticleCode(QName name) {
Modified: xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/schema/StscSimpleTypeResolver.java
URL: http://svn.apache.org/viewvc/xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/schema/StscSimpleTypeResolver.java?rev=1896764&r1=1896763&r2=1896764&view=diff
==============================================================================
--- xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/schema/StscSimpleTypeResolver.java (original)
+++ xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/schema/StscSimpleTypeResolver.java Thu Jan 6 17:54:30 2022
@@ -584,272 +584,273 @@ public class StscSimpleTypeResolver {
List<RegularExpression> patterns = null;
if (restriction != null) {
- XmlCursor cur = restriction.newCursor();
- for (boolean more = cur.toFirstChild(); more; more = cur.toNextSibling()) {
- QName facetQName = cur.getName();
- String facetName = facetQName.getLocalPart();
- int code = translateFacetCode(facetQName);
- if (code == -1) {
- continue;
- }
+ try (XmlCursor cur = restriction.newCursor()) {
+ for (boolean more = cur.toFirstChild(); more; more = cur.toNextSibling()) {
+ QName facetQName = cur.getName();
+ String facetName = facetQName.getLocalPart();
+ int code = translateFacetCode(facetQName);
+ if (code == -1) {
+ continue;
+ }
+
+ Facet facet = (Facet) cur.getObject();
+
+ if (!facetAppliesToType(code, baseImpl)) {
+ state.error(XmlErrorCodes.FACETS_APPLICABLE,
+ new Object[]{facetName, QNameHelper.pretty(baseImpl.getName())}, facet);
+ continue;
+ } else if (baseImpl.getSimpleVariety() == SchemaType.ATOMIC &&
+ baseImpl.getPrimitiveType().getBuiltinTypeCode() == SchemaType.BTC_NOTATION
+ && (code == SchemaType.FACET_LENGTH || code == SchemaType.FACET_MIN_LENGTH ||
+ code == SchemaType.FACET_MAX_LENGTH)) {
+ state.warning(XmlErrorCodes.FACETS_DEPRECATED_NOTATION,
+ new Object[]{facetName, QNameHelper.pretty(baseImpl.getName())}, facet);
+ }
+ if (seenFacet[code] && !isMultipleFacet(code)) {
+ state.error(XmlErrorCodes.DATATYPE_SINGLE_FACET_VALUE, null, facet);
+ continue;
+ }
+ seenFacet[code] = true;
+
+ switch (code) {
+ case SchemaType.FACET_LENGTH:
+// if (myFacets[SchemaType.FACET_MIN_LENGTH] != null ||
+// myFacets[SchemaType.FACET_MAX_LENGTH] != null)
+// {
+// state.error(XmlErrorCodes.DATATYPE_LENGTH, null, facet);
+// continue;
+// }
+ XmlInteger len = StscTranslator.buildNnInteger(facet.getValue());
+ if (len == null) {
+ state.error("Must be a nonnegative integer", XmlErrorCodes.FACET_VALUE_MALFORMED, facet);
+ continue;
+ }
+ if (fixedFacets[code] && !myFacets[code].valueEquals(len)) {
+ state.error(XmlErrorCodes.FACET_FIXED, new Object[]{facetName}, facet);
+ continue;
+ }
+ if (myFacets[SchemaType.FACET_MIN_LENGTH] != null) {
+ // An error for 'length' and 'minLength' to be specified at the same time
+ // except if the base type had the same value for 'minLength' also
+ XmlAnySimpleType baseMinLength = baseImpl.getFacet(SchemaType.FACET_MIN_LENGTH);
+ if (!(baseMinLength != null &&
+ baseMinLength.valueEquals(myFacets[SchemaType.FACET_MIN_LENGTH]) &&
+ baseMinLength.compareValue(len) <= 0)) {
+ state.error(XmlErrorCodes.DATATYPE_LENGTH, null, facet);
+ continue;
+ }
+ }
+ if (myFacets[SchemaType.FACET_MAX_LENGTH] != null) {
+ // An error for 'length' and 'maxLength' to be specified at the same time
+ // except if the base type had the same value for 'maxLength' also
+ XmlAnySimpleType baseMaxLength = baseImpl.getFacet(SchemaType.FACET_MAX_LENGTH);
+ if (!(baseMaxLength != null &&
+ baseMaxLength.valueEquals(myFacets[SchemaType.FACET_MAX_LENGTH]) &&
+ baseMaxLength.compareValue(len) >= 0)) {
+ state.error(XmlErrorCodes.DATATYPE_LENGTH, null, facet);
+ continue;
+ }
+ }
+ myFacets[code] = len;
+ break;
- Facet facet = (Facet) cur.getObject();
+ case SchemaType.FACET_MIN_LENGTH:
+ case SchemaType.FACET_MAX_LENGTH:
+ XmlInteger mlen = StscTranslator.buildNnInteger(facet.getValue());
+ if (mlen == null) {
+ state.error("Must be a nonnegative integer", XmlErrorCodes.FACET_VALUE_MALFORMED, facet);
+ continue;
+ }
+ if (fixedFacets[code] && !myFacets[code].valueEquals(mlen)) {
+ state.error(XmlErrorCodes.FACET_FIXED, new Object[]{facetName}, facet);
+ continue;
+ }
+ if (myFacets[SchemaType.FACET_LENGTH] != null) {
+ // It's an error for 'length' and 'minLength'/'maxLength' to be
+ // specified at the same time, except for the case when
+ // the base type had the same value for 'minLength'/'maxLength'
+ // and the two values are consistent
+ XmlAnySimpleType baseMinMaxLength = baseImpl.getFacet(code);
+ if (!(baseMinMaxLength != null &&
+ baseMinMaxLength.valueEquals(mlen) &&
+ (code == SchemaType.FACET_MIN_LENGTH ?
+ baseMinMaxLength.compareTo(myFacets[SchemaType.FACET_LENGTH]) <= 0 :
+ baseMinMaxLength.compareTo(myFacets[SchemaType.FACET_LENGTH]) >= 0))) {
+ state.error(XmlErrorCodes.DATATYPE_LENGTH, null, facet);
+ continue;
+ }
+ }
+ if (myFacets[SchemaType.FACET_MAX_LENGTH] != null) {
+ if (mlen.compareValue(myFacets[SchemaType.FACET_MAX_LENGTH]) > 0) {
+ state.error(XmlErrorCodes.DATATYPE_MAX_LENGTH_RESTRICTION, null, facet);
+ continue;
+ }
+ }
+ if (myFacets[SchemaType.FACET_MIN_LENGTH] != null) {
+ if (mlen.compareValue(myFacets[SchemaType.FACET_MIN_LENGTH]) < 0) {
+ state.error(XmlErrorCodes.DATATYPE_MIN_LENGTH_RESTRICTION, null, facet);
+ continue;
+ }
+ }
+ myFacets[code] = mlen;
+ break;
- if (!facetAppliesToType(code, baseImpl)) {
- state.error(XmlErrorCodes.FACETS_APPLICABLE,
- new Object[]{facetName, QNameHelper.pretty(baseImpl.getName())}, facet);
- continue;
- } else if (baseImpl.getSimpleVariety() == SchemaType.ATOMIC &&
- baseImpl.getPrimitiveType().getBuiltinTypeCode() == SchemaType.BTC_NOTATION
- && (code == SchemaType.FACET_LENGTH || code == SchemaType.FACET_MIN_LENGTH ||
- code == SchemaType.FACET_MAX_LENGTH)) {
- state.warning(XmlErrorCodes.FACETS_DEPRECATED_NOTATION,
- new Object[]{facetName, QNameHelper.pretty(baseImpl.getName())}, facet);
- }
- if (seenFacet[code] && !isMultipleFacet(code)) {
- state.error(XmlErrorCodes.DATATYPE_SINGLE_FACET_VALUE, null, facet);
- continue;
- }
- seenFacet[code] = true;
+ case SchemaType.FACET_TOTAL_DIGITS:
+ XmlPositiveInteger dig = StscTranslator.buildPosInteger(facet.getValue());
+ if (dig == null) {
+ state.error("Must be a positive integer", XmlErrorCodes.FACET_VALUE_MALFORMED, facet);
+ break;
+ }
+ if (fixedFacets[code] && !myFacets[code].valueEquals(dig)) {
+ state.error(XmlErrorCodes.FACET_FIXED, new Object[]{facetName}, facet);
+ continue;
+ }
+ if (myFacets[SchemaType.FACET_TOTAL_DIGITS] != null) {
+ if (dig.compareValue(myFacets[SchemaType.FACET_TOTAL_DIGITS]) > 0) {
+ state.error(XmlErrorCodes.DATATYPE_TOTAL_DIGITS_RESTRICTION, null, facet);
+ }
+ }
+ myFacets[code] = dig;
+ break;
+
+ case SchemaType.FACET_FRACTION_DIGITS:
+ XmlNonNegativeInteger fdig = StscTranslator.buildNnInteger(facet.getValue());
+ if (fdig == null) {
+ state.error("Must be a nonnegative integer", XmlErrorCodes.FACET_VALUE_MALFORMED, facet);
+ break;
+ }
+ if (fixedFacets[code] && !myFacets[code].valueEquals(fdig)) {
+ state.error(XmlErrorCodes.FACET_FIXED, new Object[]{facetName}, facet);
+ continue;
+ }
+ if (myFacets[SchemaType.FACET_FRACTION_DIGITS] != null) {
+ if (fdig.compareValue(myFacets[SchemaType.FACET_FRACTION_DIGITS]) > 0) {
+ state.error(XmlErrorCodes.DATATYPE_FRACTION_DIGITS_RESTRICTION, null, facet);
+ }
+ }
+ if (myFacets[SchemaType.FACET_TOTAL_DIGITS] != null) {
+ if (fdig.compareValue(myFacets[SchemaType.FACET_TOTAL_DIGITS]) > 0) {
+ state.error(XmlErrorCodes.DATATYPE_FRACTION_DIGITS_LE_TOTAL_DIGITS, null, facet);
+ }
+ }
+ myFacets[code] = fdig;
+ break;
+
+ case SchemaType.FACET_MIN_EXCLUSIVE:
+ case SchemaType.FACET_MIN_INCLUSIVE:
+ case SchemaType.FACET_MAX_INCLUSIVE:
+ case SchemaType.FACET_MAX_EXCLUSIVE:
- switch (code) {
- case SchemaType.FACET_LENGTH:
-// if (myFacets[SchemaType.FACET_MIN_LENGTH] != null ||
-// myFacets[SchemaType.FACET_MAX_LENGTH] != null)
-// {
-// state.error(XmlErrorCodes.DATATYPE_LENGTH, null, facet);
-// continue;
-// }
- XmlInteger len = StscTranslator.buildNnInteger(facet.getValue());
- if (len == null) {
- state.error("Must be a nonnegative integer", XmlErrorCodes.FACET_VALUE_MALFORMED, facet);
- continue;
- }
- if (fixedFacets[code] && !myFacets[code].valueEquals(len)) {
- state.error(XmlErrorCodes.FACET_FIXED, new Object[]{facetName}, facet);
- continue;
- }
- if (myFacets[SchemaType.FACET_MIN_LENGTH] != null) {
- // An error for 'length' and 'minLength' to be specified at the same time
- // except if the base type had the same value for 'minLength' also
- XmlAnySimpleType baseMinLength = baseImpl.getFacet(SchemaType.FACET_MIN_LENGTH);
- if (!(baseMinLength != null &&
- baseMinLength.valueEquals(myFacets[SchemaType.FACET_MIN_LENGTH]) &&
- baseMinLength.compareValue(len) <= 0)) {
- state.error(XmlErrorCodes.DATATYPE_LENGTH, null, facet);
- continue;
- }
- }
- if (myFacets[SchemaType.FACET_MAX_LENGTH] != null) {
- // An error for 'length' and 'maxLength' to be specified at the same time
- // except if the base type had the same value for 'maxLength' also
- XmlAnySimpleType baseMaxLength = baseImpl.getFacet(SchemaType.FACET_MAX_LENGTH);
- if (!(baseMaxLength != null &&
- baseMaxLength.valueEquals(myFacets[SchemaType.FACET_MAX_LENGTH]) &&
- baseMaxLength.compareValue(len) >= 0)) {
- state.error(XmlErrorCodes.DATATYPE_LENGTH, null, facet);
- continue;
- }
- }
- myFacets[code] = len;
- break;
-
- case SchemaType.FACET_MIN_LENGTH:
- case SchemaType.FACET_MAX_LENGTH:
- XmlInteger mlen = StscTranslator.buildNnInteger(facet.getValue());
- if (mlen == null) {
- state.error("Must be a nonnegative integer", XmlErrorCodes.FACET_VALUE_MALFORMED, facet);
- continue;
- }
- if (fixedFacets[code] && !myFacets[code].valueEquals(mlen)) {
- state.error(XmlErrorCodes.FACET_FIXED, new Object[]{facetName}, facet);
- continue;
- }
- if (myFacets[SchemaType.FACET_LENGTH] != null) {
- // It's an error for 'length' and 'minLength'/'maxLength' to be
- // specified at the same time, except for the case when
- // the base type had the same value for 'minLength'/'maxLength'
- // and the two values are consistent
- XmlAnySimpleType baseMinMaxLength = baseImpl.getFacet(code);
- if (!(baseMinMaxLength != null &&
- baseMinMaxLength.valueEquals(mlen) &&
- (code == SchemaType.FACET_MIN_LENGTH ?
- baseMinMaxLength.compareTo(myFacets[SchemaType.FACET_LENGTH]) <= 0 :
- baseMinMaxLength.compareTo(myFacets[SchemaType.FACET_LENGTH]) >= 0))) {
- state.error(XmlErrorCodes.DATATYPE_LENGTH, null, facet);
- continue;
- }
- }
- if (myFacets[SchemaType.FACET_MAX_LENGTH] != null) {
- if (mlen.compareValue(myFacets[SchemaType.FACET_MAX_LENGTH]) > 0) {
- state.error(XmlErrorCodes.DATATYPE_MAX_LENGTH_RESTRICTION, null, facet);
- continue;
- }
- }
- if (myFacets[SchemaType.FACET_MIN_LENGTH] != null) {
- if (mlen.compareValue(myFacets[SchemaType.FACET_MIN_LENGTH]) < 0) {
- state.error(XmlErrorCodes.DATATYPE_MIN_LENGTH_RESTRICTION, null, facet);
- continue;
- }
- }
- myFacets[code] = mlen;
- break;
-
- case SchemaType.FACET_TOTAL_DIGITS:
- XmlPositiveInteger dig = StscTranslator.buildPosInteger(facet.getValue());
- if (dig == null) {
- state.error("Must be a positive integer", XmlErrorCodes.FACET_VALUE_MALFORMED, facet);
+ if (seenFacet[other_similar_limit(code)]) {
+ state.error("Cannot define both inclusive and exclusive limit in the same restriciton", XmlErrorCodes.FACET_DUPLICATED, facet);
+ continue;
+ }
+ boolean ismin = (code == SchemaType.FACET_MIN_EXCLUSIVE || code == SchemaType.FACET_MIN_INCLUSIVE);
+ boolean isexclusive = (code == SchemaType.FACET_MIN_EXCLUSIVE || code == SchemaType.FACET_MAX_EXCLUSIVE);
+
+ XmlAnySimpleType limit;
+ try {
+ limit = baseImpl.newValue(facet.getValue(), true);
+ } catch (XmlValueOutOfRangeException e) {
+ // note: this guarantees that the limit is a valid number in the
+ // base data type!!
+ switch (code) {
+ case SchemaType.FACET_MIN_EXCLUSIVE:
+ state.error(XmlErrorCodes.DATATYPE_MIN_EXCLUSIVE_RESTRICTION,
+ new Object[]{e.getMessage()}, facet);
+ break;
+ case SchemaType.FACET_MIN_INCLUSIVE:
+ state.error(XmlErrorCodes.DATATYPE_MIN_INCLUSIVE_RESTRICTION,
+ new Object[]{e.getMessage()}, facet);
+ break;
+ case SchemaType.FACET_MAX_INCLUSIVE:
+ state.error(XmlErrorCodes.DATATYPE_MAX_INCLUSIVE_RESTRICTION,
+ new Object[]{e.getMessage()}, facet);
+ break;
+ case SchemaType.FACET_MAX_EXCLUSIVE:
+ state.error(XmlErrorCodes.DATATYPE_MAX_EXCLUSIVE_RESTRICTION,
+ new Object[]{e.getMessage()}, facet);
+ break;
+ }
+
+ // BUGBUG: if there are actual schemas that redefine min/maxExclusive,
+ // they will need this rule relaxed for them!!
+ continue;
+ }
+ if (fixedFacets[code] && !myFacets[code].valueEquals(limit)) {
+ state.error(XmlErrorCodes.FACET_FIXED, new Object[]{facetName}, facet);
+ continue;
+ }
+ if (myFacets[code] != null) {
+ SchemaType limitSType = limit.schemaType();
+ if (limitSType != null && !limitSType.isSimpleType() &&
+ limitSType.getContentType() == SchemaType.SIMPLE_CONTENT) {
+ // in the case of complex types with simple content that has facets
+ // we need to compare values based on the content type
+ limit = baseImpl.getContentBasedOnType().newValue(facet.getValue());
+ }
+
+ int comparison = limit.compareValue(myFacets[code]);
+ if (comparison == 2 || comparison == (ismin ? -1 : 1)) {
+ state.error(ismin ?
+ (isexclusive ?
+ "Must be greater than or equal to previous minExclusive" :
+ "Must be greater than or equal to previous minInclusive") :
+ (isexclusive ?
+ "Must be less than or equal to previous maxExclusive" :
+ "Must be less than or equal to previous maxInclusive"),
+ XmlErrorCodes.FACET_VALUE_MALFORMED, facet);
+ continue;
+ }
+ }
+ myFacets[code] = limit;
+ myFacets[other_similar_limit(code)] = null;
break;
- }
- if (fixedFacets[code] && !myFacets[code].valueEquals(dig)) {
- state.error(XmlErrorCodes.FACET_FIXED, new Object[]{facetName}, facet);
- continue;
- }
- if (myFacets[SchemaType.FACET_TOTAL_DIGITS] != null) {
- if (dig.compareValue(myFacets[SchemaType.FACET_TOTAL_DIGITS]) > 0) {
- state.error(XmlErrorCodes.DATATYPE_TOTAL_DIGITS_RESTRICTION, null, facet);
- }
- }
- myFacets[code] = dig;
- break;
-
- case SchemaType.FACET_FRACTION_DIGITS:
- XmlNonNegativeInteger fdig = StscTranslator.buildNnInteger(facet.getValue());
- if (fdig == null) {
- state.error("Must be a nonnegative integer", XmlErrorCodes.FACET_VALUE_MALFORMED, facet);
+
+ case SchemaType.FACET_WHITE_SPACE:
+ wsr = translateWhitespaceCode(facet.getValue());
+ if (baseImpl.getWhiteSpaceRule() > wsr) {
+ wsr = SchemaType.WS_UNSPECIFIED;
+ state.error(XmlErrorCodes.DATATYPE_WHITESPACE_RESTRICTION, null, facet);
+ continue;
+ }
+ myFacets[code] = StscState.build_wsstring(wsr).get();
break;
- }
- if (fixedFacets[code] && !myFacets[code].valueEquals(fdig)) {
- state.error(XmlErrorCodes.FACET_FIXED, new Object[]{facetName}, facet);
- continue;
- }
- if (myFacets[SchemaType.FACET_FRACTION_DIGITS] != null) {
- if (fdig.compareValue(myFacets[SchemaType.FACET_FRACTION_DIGITS]) > 0) {
- state.error(XmlErrorCodes.DATATYPE_FRACTION_DIGITS_RESTRICTION, null, facet);
- }
- }
- if (myFacets[SchemaType.FACET_TOTAL_DIGITS] != null) {
- if (fdig.compareValue(myFacets[SchemaType.FACET_TOTAL_DIGITS]) > 0) {
- state.error(XmlErrorCodes.DATATYPE_FRACTION_DIGITS_LE_TOTAL_DIGITS, null, facet);
- }
- }
- myFacets[code] = fdig;
- break;
-
- case SchemaType.FACET_MIN_EXCLUSIVE:
- case SchemaType.FACET_MIN_INCLUSIVE:
- case SchemaType.FACET_MAX_INCLUSIVE:
- case SchemaType.FACET_MAX_EXCLUSIVE:
-
- if (seenFacet[other_similar_limit(code)]) {
- state.error("Cannot define both inclusive and exclusive limit in the same restriciton", XmlErrorCodes.FACET_DUPLICATED, facet);
- continue;
- }
- boolean ismin = (code == SchemaType.FACET_MIN_EXCLUSIVE || code == SchemaType.FACET_MIN_INCLUSIVE);
- boolean isexclusive = (code == SchemaType.FACET_MIN_EXCLUSIVE || code == SchemaType.FACET_MAX_EXCLUSIVE);
-
- XmlAnySimpleType limit;
- try {
- limit = baseImpl.newValue(facet.getValue(), true);
- } catch (XmlValueOutOfRangeException e) {
- // note: this guarantees that the limit is a valid number in the
- // base data type!!
- switch (code) {
- case SchemaType.FACET_MIN_EXCLUSIVE:
- state.error(XmlErrorCodes.DATATYPE_MIN_EXCLUSIVE_RESTRICTION,
- new Object[]{e.getMessage()}, facet);
- break;
- case SchemaType.FACET_MIN_INCLUSIVE:
- state.error(XmlErrorCodes.DATATYPE_MIN_INCLUSIVE_RESTRICTION,
- new Object[]{e.getMessage()}, facet);
- break;
- case SchemaType.FACET_MAX_INCLUSIVE:
- state.error(XmlErrorCodes.DATATYPE_MAX_INCLUSIVE_RESTRICTION,
- new Object[]{e.getMessage()}, facet);
- break;
- case SchemaType.FACET_MAX_EXCLUSIVE:
- state.error(XmlErrorCodes.DATATYPE_MAX_EXCLUSIVE_RESTRICTION,
- new Object[]{e.getMessage()}, facet);
- break;
- }
-
- // BUGBUG: if there are actual schemas that redefine min/maxExclusive,
- // they will need this rule relaxed for them!!
- continue;
- }
- if (fixedFacets[code] && !myFacets[code].valueEquals(limit)) {
- state.error(XmlErrorCodes.FACET_FIXED, new Object[]{facetName}, facet);
- continue;
- }
- if (myFacets[code] != null) {
- SchemaType limitSType = limit.schemaType();
- if (limitSType != null && !limitSType.isSimpleType() &&
- limitSType.getContentType() == SchemaType.SIMPLE_CONTENT) {
- // in the case of complex types with simple content that has facets
- // we need to compare values based on the content type
- limit = baseImpl.getContentBasedOnType().newValue(facet.getValue());
- }
-
- int comparison = limit.compareValue(myFacets[code]);
- if (comparison == 2 || comparison == (ismin ? -1 : 1)) {
- state.error(ismin ?
- (isexclusive ?
- "Must be greater than or equal to previous minExclusive" :
- "Must be greater than or equal to previous minInclusive") :
- (isexclusive ?
- "Must be less than or equal to previous maxExclusive" :
- "Must be less than or equal to previous maxInclusive"),
- XmlErrorCodes.FACET_VALUE_MALFORMED, facet);
- continue;
- }
- }
- myFacets[code] = limit;
- myFacets[other_similar_limit(code)] = null;
- break;
-
- case SchemaType.FACET_WHITE_SPACE:
- wsr = translateWhitespaceCode(facet.getValue());
- if (baseImpl.getWhiteSpaceRule() > wsr) {
- wsr = SchemaType.WS_UNSPECIFIED;
- state.error(XmlErrorCodes.DATATYPE_WHITESPACE_RESTRICTION, null, facet);
- continue;
- }
- myFacets[code] = StscState.build_wsstring(wsr).get();
- break;
-
- case SchemaType.FACET_ENUMERATION:
- XmlAnySimpleType enumval;
- try {
- enumval = baseImpl.newValue(facet.getValue(), true);
- // enumval.set(facet.getValue());
- // ((XmlObjectBase)enumval).setImmutable();
- } catch (XmlValueOutOfRangeException e) {
- state.error(XmlErrorCodes.DATATYPE_ENUM_RESTRICTION, new Object[]{facet.getValue().getStringValue(), e.getMessage()}, facet);
- continue;
- }
- if (enumeratedValues == null) {
- enumeratedValues = new ArrayList<>();
- }
- enumeratedValues.add(enumval);
- break;
-
- case SchemaType.FACET_PATTERN:
- RegularExpression p;
- try {
- p = new RegularExpression(facet.getValue().getStringValue(), "X");
- } catch (ParseException e) {
- state.error(XmlErrorCodes.PATTERN_REGEX, new Object[]{facet.getValue().getStringValue(), e.getMessage()}, facet);
- continue;
- }
- if (patterns == null) {
- patterns = new ArrayList<>();
- }
- patterns.add(p);
- break;
- }
- if (facet.getFixed()) {
- fixedFacets[code] = true;
+ case SchemaType.FACET_ENUMERATION:
+ XmlAnySimpleType enumval;
+ try {
+ enumval = baseImpl.newValue(facet.getValue(), true);
+ // enumval.set(facet.getValue());
+ // ((XmlObjectBase)enumval).setImmutable();
+ } catch (XmlValueOutOfRangeException e) {
+ state.error(XmlErrorCodes.DATATYPE_ENUM_RESTRICTION, new Object[]{facet.getValue().getStringValue(), e.getMessage()}, facet);
+ continue;
+ }
+ if (enumeratedValues == null) {
+ enumeratedValues = new ArrayList<>();
+ }
+ enumeratedValues.add(enumval);
+ break;
+
+ case SchemaType.FACET_PATTERN:
+ RegularExpression p;
+ try {
+ p = new RegularExpression(facet.getValue().getStringValue(), "X");
+ } catch (ParseException e) {
+ state.error(XmlErrorCodes.PATTERN_REGEX, new Object[]{facet.getValue().getStringValue(), e.getMessage()}, facet);
+ continue;
+ }
+ if (patterns == null) {
+ patterns = new ArrayList<>();
+ }
+ patterns.add(p);
+ break;
+ }
+
+ if (facet.getFixed()) {
+ fixedFacets[code] = true;
+ }
}
}
}
Modified: xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/schema/StscTranslator.java
URL: http://svn.apache.org/viewvc/xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/schema/StscTranslator.java?rev=1896764&r1=1896763&r2=1896764&view=diff
==============================================================================
--- xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/schema/StscTranslator.java (original)
+++ xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/schema/StscTranslator.java Thu Jan 6 17:54:30 2022
@@ -697,13 +697,14 @@ public class StscTranslator {
}
static FormChoice findElementFormDefault(XmlObject obj) {
- XmlCursor cur = obj.newCursor();
- while (cur.getObject().schemaType() != Schema.type) {
- if (!cur.toParent()) {
- return null;
+ try (XmlCursor cur = obj.newCursor()) {
+ while (cur.getObject().schemaType() != Schema.type) {
+ if (!cur.toParent()) {
+ return null;
+ }
}
+ return ((Schema) cur.getObject()).xgetElementFormDefault();
}
- return ((Schema) cur.getObject()).xgetElementFormDefault();
}
public static boolean uriMatch(String s1, String s2) {
@@ -993,9 +994,10 @@ public class StscTranslator {
}
SOAPArrayType wat = null;
- XmlCursor c = xsdElt.newCursor();
- String arrayType = c.getAttributeText(WSDL_ARRAYTYPE_NAME);
- c.dispose();
+ String arrayType;
+ try (XmlCursor c = xsdElt.newCursor()) {
+ arrayType = c.getAttributeText(WSDL_ARRAYTYPE_NAME);
+ }
if (arrayType != null) {
try {
wat = new SOAPArrayType(arrayType, new NamespaceContext(xsdElt));
@@ -1206,13 +1208,12 @@ public class StscTranslator {
ic.setUserData(getUserData(parseIC));
// Set the ns map
- XmlCursor c = parseIC.newCursor();
Map<String, String> nsMap = new HashMap<>();
-
- c.getAllNamespaces(nsMap);
+ try (XmlCursor c = parseIC.newCursor()) {
+ c.getAllNamespaces(nsMap);
+ }
nsMap.remove(""); // Remove the default mapping. This cannot be used by the xpath expressions.
ic.setNSMap(nsMap);
- c.dispose();
String[] fields = new String[fieldElts.length];
for (int j = 0; j < fields.length; j++) {
@@ -1271,13 +1272,14 @@ public class StscTranslator {
}
static FormChoice findAttributeFormDefault(XmlObject obj) {
- XmlCursor cur = obj.newCursor();
- while (cur.getObject().schemaType() != Schema.type) {
- if (!cur.toParent()) {
- return null;
+ try (XmlCursor cur = obj.newCursor()) {
+ while (cur.getObject().schemaType() != Schema.type) {
+ if (!cur.toParent()) {
+ return null;
+ }
}
+ return ((Schema) cur.getObject()).xgetAttributeFormDefault();
}
- return ((Schema) cur.getObject()).xgetAttributeFormDefault();
}
static SchemaLocalAttributeImpl translateAttribute(
@@ -1461,9 +1463,10 @@ public class StscTranslator {
}
SOAPArrayType wat = null;
- XmlCursor c = xsdAttr.newCursor();
- String arrayType = c.getAttributeText(WSDL_ARRAYTYPE_NAME);
- c.dispose();
+ String arrayType;
+ try (XmlCursor c = xsdAttr.newCursor()) {
+ arrayType = c.getAttributeText(WSDL_ARRAYTYPE_NAME);
+ }
if (arrayType != null) {
try {
wat = new SOAPArrayType(arrayType, new NamespaceContext(xsdAttr));
@@ -1551,7 +1554,10 @@ public class StscTranslator {
private static Object getUserData(XmlObject pos) {
- XmlCursor.XmlBookmark b = pos.newCursor().getBookmark(SchemaBookmark.class);
+ XmlCursor.XmlBookmark b;
+ try (XmlCursor c = pos.newCursor()) {
+ b = c.getBookmark(SchemaBookmark.class);
+ }
if (b instanceof SchemaBookmark) {
return ((SchemaBookmark) b).getValue();
} else {
@@ -1560,10 +1566,9 @@ public class StscTranslator {
}
private static boolean isEmptySchema(Schema schema) {
- XmlCursor cursor = schema.newCursor();
- boolean result = !cursor.toFirstChild();
- cursor.dispose();
- return result;
+ try (XmlCursor cursor = schema.newCursor()) {
+ return !cursor.toFirstChild();
+ }
}
private static boolean isReservedTypeName(QName name) {
Modified: xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/store/Cursor.java
URL: http://svn.apache.org/viewvc/xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/store/Cursor.java?rev=1896764&r1=1896763&r2=1896764&view=diff
==============================================================================
--- xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/store/Cursor.java (original)
+++ xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/store/Cursor.java Thu Jan 6 17:54:30 2022
@@ -614,10 +614,9 @@ public final class Cursor implements Xml
boolean seenElement = false;
- XmlCursor c = newCursor();
- int token = c.toNextToken().intValue();
+ try (XmlCursor c = newCursor()) {
+ int token = c.toNextToken().intValue();
- try {
LOOP:
for (; ; ) {
switch (token) {
@@ -655,8 +654,6 @@ public final class Cursor implements Xml
break LOOP;
}
}
- } finally {
- c.dispose();
}
return !seenElement;
@@ -1908,12 +1905,19 @@ public final class Cursor implements Xml
return _cur._locale.noSync();
}
- public void dispose() {
+ @Override
+ public void close() {
if (_cur != null) {
syncWrap(this::_dispose);
}
}
+ @Override
+ @Deprecated
+ public void dispose() {
+ close();
+ }
+
public Object monitor() {
return syncWrap(this::_monitor);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org