From 06942a3a38de5bf28302ccbf79dc83552ecf7d96 Mon Sep 17 00:00:00 2001 From: nash Date: Tue, 24 Aug 2010 19:12:29 +0000 Subject: Merge revision 921286 from trunk into the 1.6.1 branch git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@988675 13f79535-47bb-0310-9956-ffa450edef68 --- .../processor/BaseStAXArtifactProcessor.java | 65 ++++++++++++++++++++++ 1 file changed, 65 insertions(+) (limited to 'sca-java-1.x/branches/sca-java-1.6.1/modules/contribution/src/main/java/org/apache/tuscany') diff --git a/sca-java-1.x/branches/sca-java-1.6.1/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/BaseStAXArtifactProcessor.java b/sca-java-1.x/branches/sca-java-1.6.1/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/BaseStAXArtifactProcessor.java index a451316883..023c678617 100644 --- a/sca-java-1.x/branches/sca-java-1.6.1/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/BaseStAXArtifactProcessor.java +++ b/sca-java-1.x/branches/sca-java-1.6.1/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: + * + * + * + * + * + * + * The 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 -- cgit v1.2.3