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 ga...@apache.org on 2004/11/22 19:11:13 UTC
cvs commit: ws-axis/java/src/org/apache/axis/transport/http ChunkedInputStream.java ChunkedOutputStream.java HTTPSender.java
gawor 2004/11/22 10:11:13
Modified: java/src/org/apache/axis/transport/http
ChunkedInputStream.java ChunkedOutputStream.java
HTTPSender.java
Log:
more small optimizations
Revision Changes Path
1.9 +34 -12 ws-axis/java/src/org/apache/axis/transport/http/ChunkedInputStream.java
Index: ChunkedInputStream.java
===================================================================
RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/transport/http/ChunkedInputStream.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- ChunkedInputStream.java 25 Feb 2004 14:02:45 -0000 1.8
+++ ChunkedInputStream.java 22 Nov 2004 18:11:13 -0000 1.9
@@ -38,12 +38,26 @@
super(is);
}
- public int read()
+ public synchronized int read()
throws IOException {
- byte[] d = new byte[1];
- int rc = read(d, 0, 1);
-
- return rc > 0 ? (d[0] & 0xFF) : rc;
+ if (closed) {
+ return -1;
+ }
+ try {
+ if (chunkSize < 1L) {
+ if (0l == getChunked()) {
+ return -1;
+ }
+ }
+ int rc = in.read();
+ if (rc > 0) {
+ chunkSize--;
+ }
+ return rc;
+ } catch (IOException e) {
+ closed = true;
+ throw e;
+ }
}
public int read(byte[] b)
@@ -52,11 +66,13 @@
}
public synchronized int read(byte[] b,
- int off,
- int len)
+ int off,
+ int len)
throws IOException {
- if (closed) return -1;
- int cs = (int) Math.min(Integer.MAX_VALUE, chunkSize);
+ if (closed) {
+ return -1;
+ }
+
int totalread = 0;
int bytesread = 0;
@@ -85,7 +101,9 @@
public long skip(final long n)
throws IOException {
- if (closed) return 0;
+ if (closed) {
+ return 0;
+ }
long skipped = 0l;
byte[] b = new byte[1024];
int bread = -1;
@@ -100,7 +118,9 @@
public int available()
throws IOException {
- if (closed) return 0;
+ if (closed) {
+ return 0;
+ }
int rc = (int) Math.min(chunkSize, Integer.MAX_VALUE);
return Math.min(rc, in.available());
@@ -151,7 +171,9 @@
public void close() throws IOException {
synchronized (this) {
- if (closed) return;
+ if (closed) {
+ return;
+ }
closed = true;
}
1.10 +5 -4 ws-axis/java/src/org/apache/axis/transport/http/ChunkedOutputStream.java
Index: ChunkedOutputStream.java
===================================================================
RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/transport/http/ChunkedOutputStream.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- ChunkedOutputStream.java 25 Feb 2004 14:02:45 -0000 1.9
+++ ChunkedOutputStream.java 22 Nov 2004 18:11:13 -0000 1.10
@@ -48,7 +48,8 @@
write(b, 0, b.length);
}
- static final byte[] crlf = "\r\n".getBytes();
+ static final byte[] CRLF = "\r\n".getBytes();
+ static final byte[] LAST_TOKEN = "0\r\n\r\n".getBytes();
public void write(byte[] b,
int off,
@@ -57,9 +58,9 @@
if (len == 0) return;
out.write((Integer.toHexString(len)).getBytes());
- out.write(crlf);
+ out.write(CRLF);
out.write(b, off, len);
- out.write(crlf);
+ out.write(CRLF);
}
/*
@@ -74,7 +75,7 @@
if (eos) return;
eos = true;
}
- out.write("0\r\n\r\n".getBytes());
+ out.write(LAST_TOKEN);
out.flush();
}
1.122 +78 -64 ws-axis/java/src/org/apache/axis/transport/http/HTTPSender.java
Index: HTTPSender.java
===================================================================
RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/transport/http/HTTPSender.java,v
retrieving revision 1.121
retrieving revision 1.122
diff -u -r1.121 -r1.122
--- HTTPSender.java 15 Nov 2004 18:14:54 -0000 1.121
+++ HTTPSender.java 22 Nov 2004 18:11:13 -0000 1.122
@@ -57,6 +57,53 @@
protected static Log log = LogFactory.getLog(HTTPSender.class.getName());
+ private static final String ACCEPT_HEADERS =
+ HTTPConstants.HEADER_ACCEPT + //Limit to the types that are meaningful to us.
+ ": " +
+ HTTPConstants.HEADER_ACCEPT_APPL_SOAP +
+ ", " +
+ HTTPConstants.HEADER_ACCEPT_APPLICATION_DIME +
+ ", " +
+ HTTPConstants.HEADER_ACCEPT_MULTIPART_RELATED +
+ ", " +
+ HTTPConstants.HEADER_ACCEPT_TEXT_ALL +
+ "\r\n" +
+ HTTPConstants.HEADER_USER_AGENT + //Tell who we are.
+ ": " +
+ Messages.getMessage("axisUserAgent") +
+ "\r\n";
+
+ private static final String CACHE_HEADERS =
+ HTTPConstants.HEADER_CACHE_CONTROL + //Stop caching proxies from caching SOAP reqeuest.
+ ": " +
+ HTTPConstants.HEADER_CACHE_CONTROL_NOCACHE +
+ "\r\n" +
+ HTTPConstants.HEADER_PRAGMA +
+ ": " +
+ HTTPConstants.HEADER_CACHE_CONTROL_NOCACHE +
+ "\r\n";
+
+ private static final String CHUNKED_HEADER =
+ HTTPConstants.HEADER_TRANSFER_ENCODING +
+ ": " +
+ HTTPConstants.HEADER_TRANSFER_ENCODING_CHUNKED +
+ "\r\n";
+
+ private static final String HEADER_CONTENT_TYPE_LC =
+ HTTPConstants.HEADER_CONTENT_TYPE.toLowerCase();
+
+ private static final String HEADER_LOCATION_LC =
+ HTTPConstants.HEADER_LOCATION.toLowerCase();
+
+ private static final String HEADER_CONTENT_LOCATION_LC =
+ HTTPConstants.HEADER_CONTENT_LOCATION.toLowerCase();
+
+ private static final String HEADER_CONTENT_LENGTH_LC =
+ HTTPConstants.HEADER_CONTENT_LENGTH.toLowerCase();
+
+ private static final String HEADER_TRANSFER_ENCODING_LC =
+ HTTPConstants.HEADER_TRANSFER_ENCODING.toLowerCase();
+
/**
* the url; used for error reporting
*/
@@ -284,11 +331,11 @@
MimeHeaders mimeHeaders = reqMessage.getMimeHeaders();
if (posting) {
- String contentType;
+ String contentType;
if (mimeHeaders.getHeader(HTTPConstants.HEADER_CONTENT_TYPE) != null) {
- contentType = mimeHeaders.getHeader(HTTPConstants.HEADER_CONTENT_TYPE)[0];
+ contentType = mimeHeaders.getHeader(HTTPConstants.HEADER_CONTENT_TYPE)[0];
} else {
- contentType = reqMessage.getContentType(msgContext.getSOAPConstants());
+ contentType = reqMessage.getContentType(msgContext.getSOAPConstants());
}
header2.append(HTTPConstants.HEADER_CONTENT_TYPE)
.append(": ")
@@ -296,33 +343,13 @@
.append("\r\n");
}
- header2.append( HTTPConstants.HEADER_ACCEPT ) //Limit to the types that are meaningful to us.
- .append( ": ")
- .append( HTTPConstants.HEADER_ACCEPT_APPL_SOAP)
- .append( ", ")
- .append( HTTPConstants.HEADER_ACCEPT_APPLICATION_DIME)
- .append( ", ")
- .append( HTTPConstants.HEADER_ACCEPT_MULTIPART_RELATED)
- .append( ", ")
- .append( HTTPConstants.HEADER_ACCEPT_TEXT_ALL)
- .append("\r\n")
- .append(HTTPConstants.HEADER_USER_AGENT) //Tell who we are.
- .append( ": ")
- .append(Messages.getMessage("axisUserAgent"))
- .append("\r\n")
+ header2.append(ACCEPT_HEADERS)
.append(HTTPConstants.HEADER_HOST) //used for virtual connections
.append(": ")
.append(host)
.append((port == -1)?(""):(":" + port))
.append("\r\n")
- .append(HTTPConstants.HEADER_CACHE_CONTROL) //Stop caching proxies from caching SOAP reqeuest.
- .append(": ")
- .append(HTTPConstants.HEADER_CACHE_CONTROL_NOCACHE)
- .append("\r\n")
- .append(HTTPConstants.HEADER_PRAGMA)
- .append(": ")
- .append(HTTPConstants.HEADER_CACHE_CONTROL_NOCACHE)
- .append("\r\n")
+ .append(CACHE_HEADERS)
.append(HTTPConstants.HEADER_SOAP_ACTION) //The SOAP action.
.append(": \"")
.append(action)
@@ -337,10 +364,7 @@
.append("\r\n");
} else {
//Do http chunking.
- header2.append(HTTPConstants.HEADER_TRANSFER_ENCODING)
- .append(": ")
- .append(HTTPConstants.HEADER_TRANSFER_ENCODING_CHUNKED)
- .append("\r\n");
+ header2.append(CHUNKED_HEADER);
}
}
@@ -351,7 +375,7 @@
String headerName = mimeHeader.getName();
if (headerName.equals(HTTPConstants.HEADER_CONTENT_TYPE)
|| headerName.equals(HTTPConstants.HEADER_SOAP_ACTION)) {
- continue;
+ continue;
}
header2.append(mimeHeader.getName())
.append(": ")
@@ -612,28 +636,24 @@
}
/* All HTTP headers have been read. */
- String contentType =
- (String) headers
- .get(HTTPConstants.HEADER_CONTENT_TYPE.toLowerCase());
+ String contentType = (String) headers.get(HEADER_CONTENT_TYPE_LC);
- contentType = (null == contentType)
+ contentType = (null == contentType)
? null
: contentType.trim();
- String location =
- (String) headers
- .get(HTTPConstants.HEADER_LOCATION.toLowerCase());
+ String location = (String) headers.get(HEADER_LOCATION_LC);
- location = (null == location)
+ location = (null == location)
? null
: location.trim();
- if ((returnCode > 199) && (returnCode < 300)) {
- if (returnCode == 202)
- return inp;
+ if ((returnCode > 199) && (returnCode < 300)) {
+ if (returnCode == 202)
+ return inp;
// SOAP return is OK - so fall through
} else if (msgContext.getSOAPConstants() ==
- SOAPConstants.SOAP12_CONSTANTS) {
+ SOAPConstants.SOAP12_CONSTANTS) {
// For now, if we're SOAP 1.2, fall through, since the range of
// valid result codes is much greater
} else if ((contentType != null) && !contentType.startsWith("text/html")
@@ -642,14 +662,14 @@
} else if ((location != null) && (returnCode == 307)) {
// Temporary Redirect (HTTP: 307)
// close old connection
- inp.close();
- socketHolder.getSocket().close();
+ inp.close();
+ socketHolder.getSocket().close();
// remove former result and set new target url
- msgContext.removeProperty(HTTPConstants.MC_HTTP_STATUS_CODE);
- msgContext.setProperty(MessageContext.TRANS_URL, location);
+ msgContext.removeProperty(HTTPConstants.MC_HTTP_STATUS_CODE);
+ msgContext.setProperty(MessageContext.TRANS_URL, location);
// next try
- invoke(msgContext);
- return inp;
+ invoke(msgContext);
+ return inp;
} else {
// Unknown return code - so wrap up the content into a
// SOAP Fault.
@@ -670,36 +690,30 @@
throw fault;
}
- String contentLocation =
- (String) headers
- .get(HTTPConstants.HEADER_CONTENT_LOCATION.toLowerCase());
+ String contentLocation =
+ (String) headers.get(HEADER_CONTENT_LOCATION_LC);
contentLocation = (null == contentLocation)
? null
: contentLocation.trim();
- String contentLength =
- (String) headers
- .get(HTTPConstants.HEADER_CONTENT_LENGTH.toLowerCase());
+ String contentLength =
+ (String) headers.get(HEADER_CONTENT_LENGTH_LC);
contentLength = (null == contentLength)
? null
: contentLength.trim();
String transferEncoding =
- (String) headers
- .get(HTTPConstants.HEADER_TRANSFER_ENCODING.toLowerCase());
+ (String) headers.get(HEADER_TRANSFER_ENCODING_LC);
if (null != transferEncoding) {
- transferEncoding = transferEncoding.toLowerCase();
- }
-
- if (null != transferEncoding
- && transferEncoding.trim()
- .equals(HTTPConstants.HEADER_TRANSFER_ENCODING_CHUNKED)) {
- inp = new ChunkedInputStream(inp);
+ transferEncoding = transferEncoding.trim().toLowerCase();
+ if (transferEncoding.equals(
+ HTTPConstants.HEADER_TRANSFER_ENCODING_CHUNKED)) {
+ inp = new ChunkedInputStream(inp);
+ }
}
-
outMsg = new Message( new SocketInputStream(inp, socketHolder.getSocket()), false,
contentType, contentLocation);