diff --git a/saaj-ri/src/java/com/sun/xml/messaging/saaj/soap/SOAPPartImpl.java b/saaj-ri/src/java/com/sun/xml/messaging/saaj/soap/SOAPPartImpl.java index f365b08..2368fe5 100644 --- a/saaj-ri/src/java/com/sun/xml/messaging/saaj/soap/SOAPPartImpl.java +++ b/saaj-ri/src/java/com/sun/xml/messaging/saaj/soap/SOAPPartImpl.java @@ -747,7 +747,7 @@ protected XMLDeclarationParser lookForXmlDecl() throws SOAPException { } if (reader != null) { PushbackReader pushbackReader = - new PushbackReader(reader, 4096); //some size to unread + new PushbackReader(reader, 12); //some size to unread XMLDeclarationParser ev = new XMLDeclarationParser(pushbackReader); try { diff --git a/saaj-ri/src/java/com/sun/xml/messaging/saaj/util/XMLDeclarationParser.java b/saaj-ri/src/java/com/sun/xml/messaging/saaj/util/XMLDeclarationParser.java index 0b47108..5955448 100644 --- a/saaj-ri/src/java/com/sun/xml/messaging/saaj/util/XMLDeclarationParser.java +++ b/saaj-ri/src/java/com/sun/xml/messaging/saaj/util/XMLDeclarationParser.java @@ -59,10 +59,12 @@ public class XMLDeclarationParser { private String xmlDecl = null; static String gt16 = null; static String utf16Decl = null; + static int maxDeclPrefixLength; static { try { gt16 = new String(">".getBytes("utf-16")); utf16Decl = new String(" -1) { + utf16 = true; + } else { + xmlIndex = xmlDeclStr.indexOf(" -1) { + utf8 = true; + } + } + // no XML decl + if (!utf16 && !utf8) { + int len = index; + m_pushbackReader.unread(xmlDeclStr.toString().toCharArray(), 0, len); + return; + } + } if (c == '>') { break; } @@ -102,24 +124,16 @@ public void parse() throws TransformerException, IOException int len = index; String decl = xmlDeclStr.toString(); - boolean utf16 = false; - boolean utf8 = false; - - int xmlIndex = decl.indexOf(utf16Decl); - if (xmlIndex > -1) { - utf16 = true; - } else { - xmlIndex = decl.indexOf(" -1) { + if (len < maxDeclPrefixLength) { + xmlIndex = xmlDeclStr.indexOf(" XMLDeclarationParser ev = new XMLDeclarationParser(pushbackReader);