Hello, I have prepared patch for using predefined const ContentType, similar to patch was done to MimeType . I have traced MimeBodyPart.isMimeType implementation...
Please find attached Best regards, Pavel
Index: Call.java =================================================================== RCS file: /home/cvspublic/xml-soap/java/src/org/apache/soap/rpc/Call.java,v retrieving revision 1.19 diff -u -r1.19 Call.java --- Call.java 11 Nov 2002 14:34:47 -0000 1.19 +++ Call.java 11 Nov 2002 17:32:58 -0000 @@ -73,6 +73,8 @@ import org.apache.soap.server.*; import javax.mail.MessagingException; import javax.mail.internet.MimeBodyPart; +import javax.mail.internet.ContentType; +import javax.mail.internet.ParseException; /** * A <code>Call</code> object represents an <em>RPC</em> call. Both the @@ -269,7 +271,14 @@ String payloadStr = null; MimeBodyPart rootPart = respCtx.getRootPart(); - if (rootPart.isMimeType("text/*")) { + String ctype = rootPart.getContentType(); + ContentType type = null; + try { + type = new ContentType(ctype); + } + catch (ParseException e) {} + + if (type != null && Constants.CTYPE_TEXT_ALL.match(type)) { // Get the input stream to read the response envelope from. in = st.receive(); payloadStr = IOUtils.getStringFromReader(in); @@ -277,10 +286,10 @@ // Check Content-Type of root part of response to see if it's // consistent with a SOAP envelope (text/xml). - if (!rootPart.isMimeType(Constants.HEADERVAL_CONTENT_TYPE)) { + if (type == null || !Constants.CTYPE_TEXT_XML.match(type)) { throw new SOAPException(Constants.FAULT_CODE_PROTOCOL, "Unsupported response content type \"" + - rootPart.getContentType() + "\", must be: \"" + + ctype + "\", must be: \"" + Constants.HEADERVAL_CONTENT_TYPE + "\"." + (payloadStr == null ? "" : " Response was:\n" + payloadStr)); } Index: Constants.java =================================================================== RCS file: /home/cvspublic/xml-soap/java/src/org/apache/soap/Constants.java,v retrieving revision 1.26 diff -u -r1.26 Constants.java --- Constants.java 28 Jun 2002 03:07:36 -0000 1.26 +++ Constants.java 11 Nov 2002 17:34:10 -0000 @@ -58,6 +58,7 @@ package org.apache.soap; import org.apache.soap.util.xml.QName; +import javax.mail.internet.ContentType; /** * <em>SOAP</em> constants. @@ -83,7 +84,7 @@ "http://schemas.xmlsoap.org/soap/envelope/"; public static final String NS_URI_SOAP_ENC = "http://schemas.xmlsoap.org/soap/encoding/"; - + public static final String NS_URI_1999_SCHEMA_XSI = "http://www.w3.org/1999/XMLSchema-instance"; public static final String NS_URI_1999_SCHEMA_XSD = @@ -137,7 +138,7 @@ HEADERVAL_MULTIPART_CONTENT_SUBTYPE; // XML Declaration string - public static final String XML_DECL = + public static final String XML_DECL = "<?xml version='1.0' encoding='UTF-8'?>\r\n"; // Element names. @@ -301,4 +302,10 @@ new QName(Constants.NS_URI_2001_SCHEMA_XSD, "dateTime"); public static final QName object2001QName = new QName(Constants.NS_URI_2001_SCHEMA_XSD, "anyType"); + + public static final ContentType CTYPE_TEXT_ALL = new ContentType("text", "*", null); + public static final ContentType CTYPE_TEXT_XML = new ContentType("text", "xml", +null); + public static final ContentType CTYPE_MULTIPART = + new ContentType(HEADERVAL_CONTENT_TYPE_MULTIPART_PRIMARY, "*", null); + } Index: TransportMessage.java =================================================================== RCS file: /home/cvspublic/xml-soap/java/src/org/apache/soap/transport/TransportMessage.java,v retrieving revision 1.16 diff -u -r1.16 TransportMessage.java --- TransportMessage.java 6 Sep 2002 17:02:58 -0000 1.16 +++ TransportMessage.java 11 Nov 2002 17:47:30 -0000 @@ -256,8 +256,7 @@ MimeBodyPart rootPart; ContentType rootContentType; byte[] rootBytes; - if (cType.match(Constants.HEADERVAL_CONTENT_TYPE_MULTIPART_PRIMARY + - "/*")) { + if (Constants.CTYPE_MULTIPART.match(cType)) { // Parse multipart request. ByteArrayDataSource ds = new ByteArrayDataSource(bytes, contentType); @@ -286,7 +285,7 @@ // If the root part is text, extract it as a String. // Note that we could use JAF's help to do this (see getEnvelope()) // but implementing it ourselves is safer and faster. - if (rootContentType.match("text/*")) { + if (Constants.CTYPE_TEXT_ALL.match( rootContentType)) { String charset = rootContentType.getParameter("charset"); // Hmm, risky, the default charset is transport-specific... if (charset == null || charset.equals("")) @@ -435,11 +434,19 @@ public String getEnvelope() throws MessagingException, IOException { if (envelope == null) { MimeBodyPart rootPart = ctx.getRootPart(); - if (rootPart != null) - if (rootPart.isMimeType("text/*")) { + if (rootPart != null) { + String ctype = rootPart.getContentType(); + ContentType type = null; + try { + type = new ContentType(ctype); + } + catch (ParseException e) {} + + if (type != null && Constants.CTYPE_TEXT_ALL.match(type)) { ByteArrayDataSource ds = new ByteArrayDataSource( - rootPart.getInputStream(), rootPart.getContentType()); + rootPart.getInputStream(), ctype); envelope = ds.getText(); + } } } return envelope;
-- To unsubscribe, e-mail: <mailto:soap-dev-unsubscribe@;xml.apache.org> For additional commands, e-mail: <mailto:soap-dev-help@;xml.apache.org>