diff options
author | slaws <slaws@13f79535-47bb-0310-9956-ffa450edef68> | 2010-03-10 10:23:42 +0000 |
---|---|---|
committer | slaws <slaws@13f79535-47bb-0310-9956-ffa450edef68> | 2010-03-10 10:23:42 +0000 |
commit | bdffee9de1a3cbb551d65e108a26956152c4eb70 (patch) | |
tree | f79a232d16ac0d81583a09d870113f3341e6f772 /sca-java-1.x/trunk/modules/contribution | |
parent | 1303bb654471a586be4049978daba5a8fe221d71 (diff) |
TUSCANY-242 add URI specific processing wherever we read an anyURI attribute
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@921286 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'sca-java-1.x/trunk/modules/contribution')
-rw-r--r-- | sca-java-1.x/trunk/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/BaseStAXArtifactProcessor.java | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/sca-java-1.x/trunk/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/BaseStAXArtifactProcessor.java b/sca-java-1.x/trunk/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/BaseStAXArtifactProcessor.java index a451316883..023c678617 100644 --- a/sca-java-1.x/trunk/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/BaseStAXArtifactProcessor.java +++ b/sca-java-1.x/trunk/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/BaseStAXArtifactProcessor.java @@ -123,6 +123,71 @@ public abstract class BaseStAXArtifactProcessor { protected String getString(XMLStreamReader reader, String name) { return reader.getAttributeValue(null, name); } + + /** + * TUSCANY-242 + * + * Returns the URI value of an attribute as a string and first applies the + * URI whitespace processing as defined in section 4.3.6 of XML Schema Part2: Datatypes + * [http://www.w3.org/TR/xmlschema-2/#rf-facets]. anyURI is defined with the following + * XSD: + * <xs:simpleType name="anyURI" id="anyURI"> + * <xs:restriction base="xs:anySimpleType"> + * <xs:whiteSpace value="collapse" fixed="true" id="anyURI.whiteSpace"/> + * </xs:restriction> + * </xs:simpleType> + * + * The <xs:whiteSpace value="collapse"/> constraining facet is defined as follows + * + * replace + * All occurrences of #x9 (tab), #xA (line feed) and #xD (carriage return) are replaced with #x20 (space) + * collapse + * After the processing implied by replace, contiguous sequences of #x20's are collapsed to a single #x20, + * and leading and trailing #x20's are removed + * + * It seems that the StAX parser does apply this rule so we do it here. + * + * @param reader + * @param name + * @return + */ + public static String getURIString(XMLStreamReader reader, String name) { + // get the basic string value + String uri = reader.getAttributeValue(null, name); + + // apply the "collapse" rule + if (uri != null){ + // turn tabs, line feeds and carriage returns into spaces + uri = uri.replace('\t', ' '); + uri = uri.replace('\n', ' '); + uri = uri.replace('\r', ' '); + + // remote leading and trailing spaces. Other whitespace + // has already been converted to spaces above + uri = uri.trim(); + + // collapse any contiguous spaces into a single space + StringBuilder sb= new StringBuilder(uri.length()); + boolean spaceFound= false; + for(int i=0; i< uri.length(); ++i){ + char c= uri.charAt(i); + if(c == ' '){ + if(!spaceFound){ + sb.append(c); + spaceFound = true; + } else { + // collapse the space by ignoring it + } + }else{ + sb.append(c); + spaceFound= false; + } + } + uri = sb.toString(); + } + + return uri; + } /** * Test if an attribute is explicitly set |