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 gd...@apache.org on 2006/02/02 20:46:04 UTC
svn commit: r374476 - in /webservices/axis/trunk/java: src/org/apache/axis/
src/org/apache/axis/message/ src/org/apache/axis/providers/java/
src/org/apache/axis/transport/http/ test/functional/ test/soap/
Author: gdaniels
Date: Thu Feb 2 11:45:52 2006
New Revision: 374476
URL: http://svn.apache.org/viewcvs?rev=374476&view=rev
Log:
- Clean up mustUnderstand defaulting, only send if it's true
- Little bits of code cleanup
- Add ability to mark Handler option to receive onFault() calls for self-generated faults
- Accept 0 content length on 2XX codes
- Make sure SimpleAxisServer sends back the same HTTP version it receives
Modified:
webservices/axis/trunk/java/src/org/apache/axis/Handler.java
webservices/axis/trunk/java/src/org/apache/axis/SimpleChain.java
webservices/axis/trunk/java/src/org/apache/axis/message/RPCElement.java
webservices/axis/trunk/java/src/org/apache/axis/message/SOAPHeaderElement.java
webservices/axis/trunk/java/src/org/apache/axis/providers/java/JavaProvider.java
webservices/axis/trunk/java/src/org/apache/axis/providers/java/RPCProvider.java
webservices/axis/trunk/java/src/org/apache/axis/transport/http/HTTPSender.java
webservices/axis/trunk/java/src/org/apache/axis/transport/http/SimpleAxisWorker.java
webservices/axis/trunk/java/test/functional/TestAutoTypes.java
webservices/axis/trunk/java/test/soap/TestHeaderAttrs.java
Modified: webservices/axis/trunk/java/src/org/apache/axis/Handler.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/src/org/apache/axis/Handler.java?rev=374476&r1=374475&r2=374476&view=diff
==============================================================================
--- webservices/axis/trunk/java/src/org/apache/axis/Handler.java (original)
+++ webservices/axis/trunk/java/src/org/apache/axis/Handler.java Thu Feb 2 11:45:52 2006
@@ -31,6 +31,13 @@
*/
public interface Handler extends Serializable {
/**
+ * If this option is set, then we will receive an onFault() call after
+ * our own invoke() fails. Otherwise we only get onFault() for later
+ * Handlers.
+ */
+ static final String OPT_CATCH_OWN_FAULTS = "handler.catchOwnFaults";
+
+ /**
* Init is called when the chain containing this Handler object
* is instantiated.
*/
Modified: webservices/axis/trunk/java/src/org/apache/axis/SimpleChain.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/src/org/apache/axis/SimpleChain.java?rev=374476&r1=374475&r2=374476&view=diff
==============================================================================
--- webservices/axis/trunk/java/src/org/apache/axis/SimpleChain.java (original)
+++ webservices/axis/trunk/java/src/org/apache/axis/SimpleChain.java Thu Feb 2 11:45:52 2006
@@ -131,8 +131,16 @@
msgContext.setResponseMessage(respMsg);
msgContext.setProperty(CAUGHTFAULT_PROPERTY, Boolean.TRUE);
}
- while( --i >= 0 )
- ((Handler) handlers.elementAt( i )).onFault( msgContext );
+ // Unless this handler would like to catch its own fault, dec
+ // the index
+ Handler h = (Handler)handlers.elementAt(i);
+ Boolean catchOwn = (Boolean)h.getOption(OPT_CATCH_OWN_FAULTS);
+ if (catchOwn == null || !catchOwn.booleanValue()) {
+ i--;
+ }
+ while( i >= 0 ) {
+ ((Handler) handlers.elementAt( i-- )).onFault( msgContext );
+ }
throw f;
}
}
Modified: webservices/axis/trunk/java/src/org/apache/axis/message/RPCElement.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/src/org/apache/axis/message/RPCElement.java?rev=374476&r1=374475&r2=374476&view=diff
==============================================================================
--- webservices/axis/trunk/java/src/org/apache/axis/message/RPCElement.java (original)
+++ webservices/axis/trunk/java/src/org/apache/axis/message/RPCElement.java Thu Feb 2 11:45:52 2006
@@ -233,7 +233,7 @@
context.setCurElement(this);
}
- publishToHandler((org.xml.sax.ContentHandler) context);
+ publishToHandler(context);
// If parameter values are located in headers,
// get the information and publish the header
Modified: webservices/axis/trunk/java/src/org/apache/axis/message/SOAPHeaderElement.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/src/org/apache/axis/message/SOAPHeaderElement.java?rev=374476&r1=374475&r2=374476&view=diff
==============================================================================
--- webservices/axis/trunk/java/src/org/apache/axis/message/SOAPHeaderElement.java (original)
+++ webservices/axis/trunk/java/src/org/apache/axis/message/SOAPHeaderElement.java Thu Feb 2 11:45:52 2006
@@ -43,7 +43,7 @@
protected boolean processed = false;
- protected String actor = "http://schemas.xmlsoap.org/soap/actor/next";
+ protected String actor;
protected boolean mustUnderstand = false;
protected boolean relay = false;
@@ -240,10 +240,12 @@
else
val = mustUnderstand ? "1" : "0";
- setAttribute(soapVer.getEnvelopeURI(),
+ if (mustUnderstand) {
+ setAttribute(soapVer.getEnvelopeURI(),
Constants.ATTR_MUST_UNDERSTAND,
val);
-
+ }
+
if (soapVer == SOAPConstants.SOAP12_CONSTANTS && relay) {
setAttribute(soapVer.getEnvelopeURI(), Constants.ATTR_RELAY,
"true");
Modified: webservices/axis/trunk/java/src/org/apache/axis/providers/java/JavaProvider.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/src/org/apache/axis/providers/java/JavaProvider.java?rev=374476&r1=374475&r2=374476&view=diff
==============================================================================
--- webservices/axis/trunk/java/src/org/apache/axis/providers/java/JavaProvider.java (original)
+++ webservices/axis/trunk/java/src/org/apache/axis/providers/java/JavaProvider.java Thu Feb 2 11:45:52 2006
@@ -167,7 +167,7 @@
String serviceName,
MessageContext msgContext,
String clsName) throws Exception {
- Object obj = null;
+ Object obj;
boolean makeNewObject = false;
// This is a little tricky.
@@ -276,7 +276,9 @@
if ((clsName == null) || clsName.equals("")) {
throw new AxisFault("Server.NoClassForService",
- Messages.getMessage("noOption00", getServiceClassNameOptionName(), serviceName),
+ Messages.getMessage("noOption00",
+ getServiceClassNameOptionName(),
+ serviceName),
null, null);
}
@@ -284,7 +286,10 @@
Object serviceObject = null;
try {
- serviceObject = getServiceObject(msgContext, service, clsName, scope);
+ serviceObject = getServiceObject(msgContext,
+ service,
+ clsName,
+ scope);
SOAPEnvelope resEnv = null;
@@ -429,8 +434,8 @@
SOAPService service,
MessageContext msgContext)
throws AxisFault {
- ClassLoader cl = null;
- Class serviceClass = null;
+ ClassLoader cl;
+ Class serviceClass;
AxisEngine engine = service.getEngine();
// If we have a message context, use that to get classloader
Modified: webservices/axis/trunk/java/src/org/apache/axis/providers/java/RPCProvider.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/src/org/apache/axis/providers/java/RPCProvider.java?rev=374476&r1=374475&r2=374476&view=diff
==============================================================================
--- webservices/axis/trunk/java/src/org/apache/axis/providers/java/RPCProvider.java (original)
+++ webservices/axis/trunk/java/src/org/apache/axis/providers/java/RPCProvider.java Thu Feb 2 11:45:52 2006
@@ -76,7 +76,7 @@
ServiceDesc serviceDesc = service.getServiceDescription();
RPCElement body = getBody(reqEnv, msgContext);
- Vector args = null;
+ Vector args;
try {
args = body.getParams();
} catch (SAXException e) {
@@ -181,7 +181,7 @@
}
// OK! Now we can invoke the method
- Object objRes = null;
+ Object objRes;
try {
objRes = invokeMethod(msgContext,
operation.getMethod(),
@@ -212,7 +212,9 @@
if (OperationType.ONE_WAY.equals(operation.getMep()))
return;
- RPCElement resBody = createResponseBody(body, msgContext, operation, serviceDesc, objRes, resEnv, outs);
+ RPCElement resBody = createResponseBody(body, msgContext, operation,
+ serviceDesc, objRes, resEnv,
+ outs);
resEnv.addBodyElement(resBody);
}
@@ -283,7 +285,9 @@
return body;
}
- protected OperationDesc getOperationDesc(MessageContext msgContext, RPCElement body) throws SAXException, AxisFault {
+ protected OperationDesc getOperationDesc(MessageContext msgContext,
+ RPCElement body)
+ throws SAXException, AxisFault {
SOAPService service = msgContext.getService();
ServiceDesc serviceDesc = service.getServiceDescription();
String methodName = body.getMethodName();
@@ -292,34 +296,43 @@
OperationDesc operation = msgContext.getOperation();
if (operation == null) {
QName qname = new QName(body.getNamespaceURI(),
- body.getName());
+ body.getName());
operation = serviceDesc.getOperationByElementQName(qname);
- if (operation == null) {
- SOAPConstants soapConstants = msgContext == null ?
- SOAPConstants.SOAP11_CONSTANTS :
- msgContext.getSOAPConstants();
- if (soapConstants == SOAPConstants.SOAP12_CONSTANTS) {
- AxisFault fault =
- new AxisFault(Constants.FAULT_SOAP12_SENDER,
- Messages.getMessage("noSuchOperation",
- methodName),
- null,
- null);
- fault.addFaultSubCode(Constants.FAULT_SUBCODE_PROC_NOT_PRESENT);
- throw new SAXException(fault);
- } else {
- throw new AxisFault(Constants.FAULT_CLIENT, Messages.getMessage("noSuchOperation", methodName),
- null, null);
- }
+ if (operation == null) {
+ SOAPConstants soapConstants = msgContext == null ?
+ SOAPConstants.SOAP11_CONSTANTS :
+ msgContext.getSOAPConstants();
+ if (soapConstants == SOAPConstants.SOAP12_CONSTANTS) {
+ AxisFault fault =
+ new AxisFault(Constants.FAULT_SOAP12_SENDER,
+ Messages.getMessage("noSuchOperation",
+ methodName),
+ null,
+ null);
+ fault.addFaultSubCode(
+ Constants.FAULT_SUBCODE_PROC_NOT_PRESENT);
+ throw new SAXException(fault);
+ } else {
+ throw new AxisFault(Constants.FAULT_CLIENT,
+ Messages.getMessage(
+ "noSuchOperation", methodName),
+ null, null);
+ }
} else {
- msgContext.setOperation(operation);
+ msgContext.setOperation(operation);
}
}
return operation;
}
- protected RPCElement createResponseBody(RPCElement body, MessageContext msgContext, OperationDesc operation, ServiceDesc serviceDesc, Object objRes, SOAPEnvelope resEnv, ArrayList outs) throws Exception
+ protected RPCElement createResponseBody(RPCElement body,
+ MessageContext msgContext,
+ OperationDesc operation,
+ ServiceDesc serviceDesc,
+ Object objRes,
+ SOAPEnvelope resEnv,
+ ArrayList outs) throws Exception
{
String methodName = body.getMethodName();
/* Now put the result in the result SOAPEnvelope */
Modified: webservices/axis/trunk/java/src/org/apache/axis/transport/http/HTTPSender.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/src/org/apache/axis/transport/http/HTTPSender.java?rev=374476&r1=374475&r2=374476&view=diff
==============================================================================
--- webservices/axis/trunk/java/src/org/apache/axis/transport/http/HTTPSender.java (original)
+++ webservices/axis/trunk/java/src/org/apache/axis/transport/http/HTTPSender.java Thu Feb 2 11:45:52 2006
@@ -701,9 +701,20 @@
location = (null == location)
? null
: location.trim();
-
+
+ String contentLength =
+ (String) headers.get(HEADER_CONTENT_LENGTH_LC);
+
+ contentLength = (null == contentLength)
+ ? null
+ : contentLength.trim();
+ int length = -1;
+ if (contentLength != null) {
+ length = Integer.parseInt(contentLength);
+ }
+
if ((returnCode > 199) && (returnCode < 300)) {
- if (returnCode == 202) {
+ if (returnCode == 202 || length == 0) {
return inp;
}
// SOAP return is OK - so fall through
@@ -757,13 +768,6 @@
contentLocation = (null == contentLocation)
? null
: contentLocation.trim();
-
- String contentLength =
- (String) headers.get(HEADER_CONTENT_LENGTH_LC);
-
- contentLength = (null == contentLength)
- ? null
- : contentLength.trim();
String transferEncoding =
(String) headers.get(HEADER_TRANSFER_ENCODING_LC);
Modified: webservices/axis/trunk/java/src/org/apache/axis/transport/http/SimpleAxisWorker.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/src/org/apache/axis/transport/http/SimpleAxisWorker.java?rev=374476&r1=374475&r2=374476&view=diff
==============================================================================
--- webservices/axis/trunk/java/src/org/apache/axis/transport/http/SimpleAxisWorker.java (original)
+++ webservices/axis/trunk/java/src/org/apache/axis/transport/http/SimpleAxisWorker.java Thu Feb 2 11:45:52 2006
@@ -37,6 +37,7 @@
import javax.xml.soap.MimeHeader;
import javax.xml.soap.MimeHeaders;
import javax.xml.soap.SOAPMessage;
+import javax.xml.rpc.holders.StringHolder;
import java.io.OutputStream;
import java.io.ByteArrayInputStream;
@@ -63,7 +64,7 @@
private static byte ISE[] = ("500 " + Messages.getMessage("internalError01")).getBytes();
// HTTP prefix
- private static byte HTTP[] = "HTTP/1.0 ".getBytes();
+ private static byte HTTP[] = "HTTP/".getBytes();
// Standard MIME headers for XML payload
private static byte XML_MIME_STUFF[] =
@@ -177,6 +178,7 @@
// buffers for the headers we care about
StringBuffer soapAction = new StringBuffer();
StringBuffer httpRequest = new StringBuffer();
+ String httpVersion = "1.0";
StringBuffer fileName = new StringBuffer();
StringBuffer cookie = new StringBuffer();
StringBuffer cookie2 = new StringBuffer();
@@ -221,10 +223,15 @@
is.setInputStream(socket.getInputStream());
// parse all headers into hashtable
MimeHeaders requestHeaders = new MimeHeaders();
+ StringHolder httpVersionHolder = new StringHolder();
int contentLength = parseHeaders(is, buf, contentType,
contentLocation, soapAction,
httpRequest, fileName,
- cookie, cookie2, authInfo, requestHeaders);
+ cookie, cookie2, authInfo, requestHeaders,
+ httpVersionHolder);
+ if (httpVersionHolder.value != null) {
+ httpVersion = httpVersionHolder.value;
+ }
is.setContentLength(contentLength);
int paramIdx = fileName.toString().indexOf('?');
@@ -303,6 +310,8 @@
OutputStream out = socket.getOutputStream();
out.write(HTTP);
+ out.write(httpVersion.getBytes());
+ out.write(' ');
if(fileName.length()==0) {
out.write("301 Redirect\nLocation: /axis/\n\n".getBytes());
out.flush();
@@ -357,7 +366,7 @@
sb.append("<ul>\n");
for (Iterator it = operations.iterator(); it.hasNext();) {
OperationDesc desc = (OperationDesc) it.next();
- sb.append("<li>" + desc.getName());
+ sb.append("<li>").append(desc.getName());
}
sb.append("</ul>\n");
}
@@ -477,6 +486,8 @@
// Send it on its way...
OutputStream out = socket.getOutputStream();
out.write(HTTP);
+ out.write(httpVersion.getBytes());
+ out.write(' ');
out.write(status);
if (responseMsg != null) {
@@ -561,7 +572,8 @@
StringBuffer cookie,
StringBuffer cookie2,
StringBuffer authInfo,
- MimeHeaders headers)
+ MimeHeaders headers,
+ StringHolder httpVersion)
throws java.io.IOException {
int n;
int len = 0;
@@ -591,11 +603,16 @@
return 0;
} else if (buf[0] == postHeader[0]) {
httpRequest.append("POST");
- for (int i = 0; i < n - 6; i++) {
+ int i = 0;
+ for (; i < n - 6; i++) {
char c = (char) (buf[i + 6] & 0x7f);
if (c == ' ')
break;
fileName.append(c);
+ }
+ // Might have HTTP version here!
+ if (i + 14 < n) {
+ httpVersion.value = new String(buf, i + 12, 3);
}
log.debug(Messages.getMessage("filename01", "SimpleAxisServer", fileName.toString()));
} else {
Modified: webservices/axis/trunk/java/test/functional/TestAutoTypes.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/test/functional/TestAutoTypes.java?rev=374476&r1=374475&r2=374476&view=diff
==============================================================================
--- webservices/axis/trunk/java/test/functional/TestAutoTypes.java (original)
+++ webservices/axis/trunk/java/test/functional/TestAutoTypes.java Thu Feb 2 11:45:52 2006
@@ -90,7 +90,8 @@
}
public void testEchoBeanArray() throws Exception {
- SimpleBean[] beans = (SimpleBean[]) getSimpleProxy().echoBeanArray(new SimpleBean[]{
+ IAutoTypes simpleProxy = getSimpleProxy();
+ SimpleBean[] beans = (SimpleBean[]) simpleProxy.echoBeanArray(new SimpleBean[]{
new SimpleBean(), new SimpleBean(),
new SimpleBean(), new SimpleBean(), new SimpleBean(),
new SimpleBean()});
Modified: webservices/axis/trunk/java/test/soap/TestHeaderAttrs.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/test/soap/TestHeaderAttrs.java?rev=374476&r1=374475&r2=374476&view=diff
==============================================================================
--- webservices/axis/trunk/java/test/soap/TestHeaderAttrs.java (original)
+++ webservices/axis/trunk/java/test/soap/TestHeaderAttrs.java Thu Feb 2 11:45:52 2006
@@ -49,12 +49,9 @@
static final String ACTOR = "http://some.actor/";
- static SOAPHeaderElement goodHeader =
- new SOAPHeaderElement(GOOD_HEADER_NS,
- GOOD_HEADER_NAME);
- static SOAPHeaderElement badHeader =
- new SOAPHeaderElement(BAD_HEADER_NS,
- BAD_HEADER_NAME);
+ SOAPHeaderElement goodHeader;
+ SOAPHeaderElement badHeader;
+
private SimpleProvider provider = new SimpleProvider();
private AxisServer engine = new AxisServer(provider);
@@ -76,7 +73,9 @@
public void setUp() throws Exception {
engine.init();
localTransport.setUrl(localURL);
-
+ goodHeader = new SOAPHeaderElement(GOOD_HEADER_NS, GOOD_HEADER_NAME);
+ badHeader = new SOAPHeaderElement(BAD_HEADER_NS, BAD_HEADER_NAME);
+
SOAPService service = new SOAPService(new TestHandler(),
new RPCProvider(),
null);