You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by di...@apache.org on 2006/12/27 04:39:57 UTC
svn commit: r490437 -
/webservices/axis2/trunk/java/modules/integration/src/test/soap12testing/client/MessageComparator.java
Author: dims
Date: Tue Dec 26 19:39:57 2006
New Revision: 490437
URL: http://svn.apache.org/viewvc?view=rev&rev=490437
Log:
oops! forgot to commit
Modified:
webservices/axis2/trunk/java/modules/integration/src/test/soap12testing/client/MessageComparator.java
Modified: webservices/axis2/trunk/java/modules/integration/src/test/soap12testing/client/MessageComparator.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/integration/src/test/soap12testing/client/MessageComparator.java?view=diff&rev=490437&r1=490436&r2=490437
==============================================================================
--- webservices/axis2/trunk/java/modules/integration/src/test/soap12testing/client/MessageComparator.java (original)
+++ webservices/axis2/trunk/java/modules/integration/src/test/soap12testing/client/MessageComparator.java Tue Dec 26 19:39:57 2006
@@ -16,24 +16,27 @@
package test.soap12testing.client;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.HashMap;
+
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+
import org.apache.axiom.om.OMXMLParserWrapper;
-import org.apache.axiom.om.util.StAXUtils;
import org.apache.axiom.om.impl.exception.XMLComparisonException;
+import org.apache.axiom.om.util.StAXUtils;
import org.apache.axiom.soap.SOAPEnvelope;
import org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder;
import org.apache.axis2.AxisFault;
-import org.apache.axis2.transport.http.HTTPTransportReceiver;
+import org.apache.axis2.i18n.Messages;
+import org.apache.axis2.transport.http.HTTPConstants;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import javax.xml.stream.XMLInputFactory;
-import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamReader;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileReader;
-import java.io.InputStream;
-
public class MessageComparator {
//public static final String TEST_MAIN_DIR = "./modules/samples/";
public static final String TEST_MAIN_DIR = "./";
@@ -45,9 +48,8 @@
try {
File file = new File(TEST_MAIN_DIR+"test-resources/SOAP12Testing/ReplyMessages/SOAP12ResT" + testNumber + ".xml");
- HTTPTransportReceiver receiver = new HTTPTransportReceiver();
//This step is needed to skip the headers :)
- receiver.parseTheHeaders(replyMessage, false);
+ parseTheHeaders(replyMessage, false);
XMLStreamReader requiredMessageParser = StAXUtils.createXMLStreamReader(new FileReader(file));
OMXMLParserWrapper requiredMessageBuilder = new StAXSOAPModelBuilder(requiredMessageParser,null);
@@ -82,4 +84,242 @@
}
return false;
}
+
+
+ /**
+ * Field BEFORE_SEPARATOR
+ */
+ private static final int BEFORE_SEPARATOR = 3;
+
+ /**
+ * Field AFTER_SEPARATOR
+ */
+ private static final int AFTER_SEPARATOR = 4;
+
+ /**
+ * Field lastRead
+ */
+ private int lastRead = -1;
+
+ /**
+ * Field index
+ */
+ int index = 0;
+
+ /**
+ * Field buf
+ */
+ private byte[] buf = new byte[1024];
+
+ /**
+ * Field length
+ */
+ int length = 0;
+
+ /**
+ * Field done
+ */
+ private boolean done = false;
+
+ /**
+ * Parses following two styles of HTTP stuff
+ * Server Side
+ * POST /axis2/services/echo HTTP/1.0
+ * Content-Type: text/xml; charset=utf-8
+ * Accept: application/soap+xml, application/dime, multipart/related, text
+ * User-Agent: Axis/1.2RC1
+ * Host: 127.0.0.1:8081
+ * Cache-Control: no-cache
+ * Pragma: no-cache
+ * SOAPAction: ""
+ * Content-Length: 73507
+ * HTTP/1.1 200 OK
+ * Content-Type: text/xml;charset=utf-8
+ * Date: Sat, 12 Feb 2005 10:39:39 GMT
+ * Server: Apache-Coyote/1.1
+ * Connection: close
+ *
+ * @param in
+ * @param serverSide
+ * @return Returns HashMap.
+ * @throws AxisFault
+ */
+ public HashMap parseTheHeaders(InputStream in, boolean serverSide) throws AxisFault {
+ HashMap map = new HashMap();
+
+ try {
+ StringBuffer str = new StringBuffer();
+ int state = BEFORE_SEPARATOR;
+ String key = null;
+ String value = null;
+
+ length = readLine(in, buf);
+
+ if (serverSide) {
+ if ((buf[0] == 'P') && (buf[1] == 'O') && (buf[2] == 'S') && (buf[3] == 'T')) {
+ map.put(HTTPConstants.HTTP_REQ_TYPE, HTTPConstants.HEADER_POST);
+ index = 5;
+ } else if ((buf[0] == 'G') && (buf[1] == 'E') && (buf[2] == 'T')) {
+ map.put(HTTPConstants.HTTP_REQ_TYPE, HTTPConstants.HEADER_GET);
+ index = 4;
+ } else {
+ throw new AxisFault(
+ "Unsupported HTTP request type: Only GET and POST is supported");
+ }
+
+ value = readFirstLineArg(' ');
+ map.put(HTTPConstants.REQUEST_URI, value);
+ value = readFirstLineArg('\n');
+ map.put(HTTPConstants.PROTOCOL_VERSION, value);
+ } else {
+ index = 0;
+ value = readFirstLineArg(' ');
+
+ if ((value != null) && (value.indexOf("HTTP") >= 0)) {
+ map.put(HTTPConstants.PROTOCOL_VERSION, value);
+ value = readFirstLineArg(' ');
+ map.put(HTTPConstants.RESPONSE_CODE, value);
+ } else {
+ map.put(HTTPConstants.RESPONSE_CODE, value);
+ }
+
+ value = readFirstLineArg('\n');
+ map.put(HTTPConstants.RESPONSE_WORD, value);
+ }
+
+ state = BEFORE_SEPARATOR;
+
+ while (!done) {
+ length = readLine(in, buf);
+
+ if (length <= 0) {
+ throw new AxisFault(Messages.getMessage("preatureEOS"));
+ }
+
+ for (int i = 0; i < length; i++) {
+ switch (state) {
+ case BEFORE_SEPARATOR :
+ if (buf[i] == ':') {
+ key = str.toString();
+ str = new StringBuffer();
+ state = AFTER_SEPARATOR;
+
+ if (buf[i + 1] == ' ') {
+ i++; // ignore next space
+ }
+ } else {
+ str.append((char) buf[i]);
+ }
+
+ break;
+
+ case AFTER_SEPARATOR :
+ if (buf[i] == '\n') {
+ value = str.toString();
+ map.put(key, value);
+ str = new StringBuffer();
+ i = length;
+ } else {
+ str.append((char) buf[i]);
+ }
+
+ break;
+
+ default :
+ throw new AxisFault("Error Occured Unknown state " + state);
+ }
+ }
+
+ state = BEFORE_SEPARATOR;
+ }
+ } catch (IOException e) {
+ throw new AxisFault(e.getMessage(), e);
+ }
+
+ return map;
+ }
+
+ /**
+ * Method readFirstLineArg.
+ *
+ * @param terminal
+ * @return Returns String.
+ * @throws org.apache.axis2.AxisFault
+ */
+ private String readFirstLineArg(char terminal) throws AxisFault {
+ StringBuffer str = new StringBuffer();
+
+ try {
+ while ((buf[index] != terminal) && (index < length)) {
+ str.append((char) buf[index]);
+ index++;
+ }
+
+ index++;
+
+ return str.toString();
+ } catch (Exception e) {
+ throw new AxisFault(e.getMessage(), e);
+ }
+ }
+
+ /**
+ * Reads a single line from the input stream.
+ *
+ * @param is inputstream to read from
+ * @param b byte array to read into
+ * @return Returns int.
+ * @throws java.io.IOException
+ */
+ protected int readLine(InputStream is, byte[] b) throws java.io.IOException {
+ int count = 0, c;
+
+ if (lastRead == -1) {
+ c = is.read();
+ } else {
+ c = lastRead;
+ }
+
+ int off = 0;
+
+ while (c != -1) {
+ if ((c != '\n') && (c != '\r')) {
+ b[off++] = (byte) c;
+ count++;
+ c = is.read();
+ } else {
+ if ('\n' == c) {
+ c = is.read();
+
+ if (c == '\r') {
+ c = is.read();
+ }
+
+ // If the next line begins with tab or space then this is a continuation.
+ if ((c != ' ') && (c != '\t')) {
+ if (c == '\n') {
+ done = true;
+ }
+
+ lastRead = c;
+ b[off++] = '\n';
+ count++;
+
+ break;
+ }
+ } else {
+ c = is.read();
+ }
+ }
+ }
+
+ if (c == -1) {
+ throw new AxisFault("Every line should ends with the \\n, unexpected End of stream");
+ } else {
+ return (count > 0)
+ ? count
+ : -1;
+ }
+ }
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org