Hello I prepared short patch for the client side only - but didn't had possibility to test it.
Pavel > -----Original Message----- > From: Scott Nichol [mailto:[EMAIL PROTECTED]] > Sent: Saturday, November 09, 2002 11:21 PM > To: [EMAIL PROTECTED] > Subject: Re: Apache SOAP and request only Web Services. > > > It is not a lot of code to change to support this on both the > client and > the server, and for that matter, for both messaging and RPC. However, > no one working on Apache SOAP has chosen to do this with the limited > time they spend on the project. > > Scott Nichol > > ----- Original Message ----- > From: "Ashutosh Arora" <[EMAIL PROTECTED]> > To: <[EMAIL PROTECTED]> > Cc: <[EMAIL PROTECTED]> > Sent: Saturday, November 09, 2002 2:55 PM > Subject: Re: Apache SOAP and request only Web Services. > > > > > > For client side is it possible to provide this support in > Apache SOAP. > > Assuming I do not want to go for rpc invocation. I create my soap > message > > using Apache SOAP. I want to invoke a Web Service using the messge > oriented > > technique given in the Apache SOAP messaging sample. > > > > This Web Service is a SOAP/HTTP request only Web Service. > Based on my > > understanding with existing Web Services implementations, a request > only > > SOAP/HTTP Web Service will respond back with HTTP STatus > code of "202 > > Accepted". If we can provide some support in > > org.apache.soap.messaging.Message class, so that if it sees HTTP > status > > code of 202 accepted it will not try to create SOAPEnvelope. I think > this > > support will be very helpful for people using Apache SOAP > client-only > API, > > in consuming request only web services. > > > > Just a suggestion. > > Thanks > > -Ashutosh > > > > > > > > > > > > > > > > > > > > |---------+-----------------------------> > > | | Scott Nichol | > > | | <snicholnews@scott| > > | | nichol.com> | > > | | | > > | | 11/07/2002 08:46 | > > | | PM | > > | | Please respond to | > > | | soap-dev | > > | | | > > |---------+-----------------------------> > > > >------------------------------------------------------------- > ---------- > -------------------------------------------------------------- > --------| > > | > | > > | To: [EMAIL PROTECTED] > | > > | cc: > | > > | Subject: Re: Apache SOAP and request only Web Services. > | > > | > | > > | > | > > > >------------------------------------------------------------- > ---------- > -------------------------------------------------------------- > --------| > > > > > > > > Apache SOAP does not currently implement something equivalent the > > one-way ports specified in WSDL > > (http://www.w3.org/TR/wsdl.html#_one-way). I am not certain what > > specification says how to implement this on HTTP. Microsoft has the > > server respond with an empty (no entity) HTTP response with > some magic > > status like "216 Received" after the SOAP request is validated, but > > before the service is actually executed. I would like to > have this in > > Apache SOAP, but have not yet had time to add it. > > > > The current Apache SOAP code (1) always executes the service before > > transmitting an HTTP response and (2) always transmits a > SOAP envelope > > as the HTTP entity. The closest thing to one-way operations is any > > service with a void return type. > > > > Scott Nichol > > > > ----- Original Message ----- > > From: "Ashutosh Arora" <[EMAIL PROTECTED]> > > To: <[EMAIL PROTECTED]> > > Sent: Thursday, November 07, 2002 5:20 PM > > Subject: Apache SOAP and request only Web Services. > > > > > > > Hi, > > > > > > Is it possible to invoke request only Web Services using Apache > SOAP? > > I > > > want to use SOAP/HTTP to invoke a request only Web > SErvice. Is there > > any > > > way I can leverage Apache SOAP to do that? Is there any > sample code > > that I > > > can refer to? > > > Any help will be greatly appreciated. > > > > > > Thanks > > > -Ashutosh > > > > > > > > > > > > > > > -- > > > To unsubscribe, e-mail: > <mailto:[EMAIL PROTECTED]> > > > For additional commands, e-mail: > <mailto:[EMAIL PROTECTED]> > > > > > > > > > > > > -- > > To unsubscribe, e-mail: > <mailto:[EMAIL PROTECTED]> > > For additional commands, e-mail: > <mailto:[EMAIL PROTECTED]> > > > > > > > > > > > > > > -- > > To unsubscribe, e-mail: > <mailto:[EMAIL PROTECTED]> > > For additional commands, e-mail: > <mailto:[EMAIL PROTECTED]> > > > > > > > -- > To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> > For additional commands, e-mail: <mailto:[EMAIL PROTECTED]> >
Index: HTTPUtils.java =================================================================== RCS file: /home/cvspublic/xml-soap/java/src/org/apache/soap/util/net/HTTPUtils.java,v retrieving revision 1.36 diff -u -r1.36 HTTPUtils.java --- HTTPUtils.java 12 Nov 2002 14:15:38 -0000 1.36 +++ HTTPUtils.java 16 Nov 2002 11:58:46 -0000 @@ -506,7 +506,7 @@ int codeStart = -1; int codeEnd = -1; int stringStart = -1; - + for (count = 0, b = bInStream.read(); b != '\n' && b != -1; b = bInStream.read()) { if (b != '\r') { if (b == ' ') { @@ -615,7 +615,14 @@ return post(newURL, request, timeout, httpProxyHost, httpProxyPort, outputBufferSize, tcpNoDelay, null, responseCopy, numRedirects); } + } else if (statusCode == HttpURLConnection.HTTP_ACCEPTED) { + // One way message support - no further processing necessary + bOutStream.close(); + bInStream.close(); + s.close(); + return null; } + // TODO: process differently depending on statusCode and respContentLength // (TransportMessage does not even get statusCode) Index: SOAPHTTPConnection.java =================================================================== RCS file: /home/cvspublic/xml-soap/java/src/org/apache/soap/transport/http/SOAPHTTPConnection.java,v retrieving revision 1.29 diff -u -r1.29 SOAPHTTPConnection.java --- SOAPHTTPConnection.java 12 Nov 2002 14:15:38 -0000 1.29 +++ SOAPHTTPConnection.java 16 Nov 2002 12:00:39 -0000 @@ -2,7 +2,7 @@ * The Apache Software License, Version 1.1 * * - * Copyright (c) 2000 The Apache Software Foundation. All rights + * Copyright (c) 2000 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -10,7 +10,7 @@ * are met: * * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. + * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in @@ -18,7 +18,7 @@ * distribution. * * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: + * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, @@ -26,7 +26,7 @@ * * 4. The names "SOAP" and "Apache Software Foundation" must * not be used to endorse or promote products derived from this - * software without prior written permission. For written + * software without prior written permission. For written * permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache", @@ -171,7 +171,7 @@ public void setRequestCopy (StringBuffer requestCopy) { this.requestCopy = requestCopy; } - + /** * Set buffer for capturing copy of the response. */ @@ -198,7 +198,7 @@ public StringBuffer getResponseCopy () { return responseCopy; } - + /** * Indicate whether to maintain HTTP sessions. */ @@ -347,13 +347,13 @@ // if there is saved cookie headers, put them in to the request if (cookies2 != null) { // RFC 2965 header headers.put ("Cookie2", Cookie.buildCookieValue(sendTo, cookies2)); - } + } if (cookies != null) { // RFC 2109 header headers.put ("Cookie", Cookie.buildCookieValue(sendTo, cookies)); } } - headers.put (Constants.HEADER_SOAP_ACTION, + headers.put (Constants.HEADER_SOAP_ACTION, (action != null) ? ('\"' + action + '\"') : ""); if (userName != null) { // add the Authorization header for Basic authentication @@ -376,6 +376,9 @@ timeout, httpProxyHost, httpProxyPort, outputBufferSize, tcpNoDelay, requestCopy, responseCopy); + // Support one way messaging + if (response == null) + return; } catch (MessagingException me) { throw new IOException ("Failed to encode mime multipart: " + me); } catch (UnsupportedEncodingException uee) { @@ -385,7 +388,7 @@ if (maintainSession) { // look for Set-Cookie2 and Set-Cookie headers and save them. // Only update my state iff the header is there .. otherwise - // leave the current + // leave the current // Note: Header is case-insensitive Hashtable responseHeaders = response.getHeaders(); String hdr; Index: Message.java =================================================================== RCS file: /home/cvspublic/xml-soap/java/src/org/apache/soap/messaging/Message.java,v retrieving revision 1.11 diff -u -r1.11 Message.java --- Message.java 18 Oct 2002 13:36:00 -0000 1.11 +++ Message.java 16 Nov 2002 12:02:07 -0000 @@ -97,7 +97,7 @@ public void setSOAPTransport (SOAPTransport st) { this.st = st; } - + public SOAPTransport getSOAPTransport () { return st; } @@ -106,7 +106,7 @@ * Send an envelope to the given URL via the SOAPTransport that has * been configured for this instance (or SOAPHTTPConnection by default). * The envelope is sent exactly as-is. - * + * * @param url the url to send to * @param actionURI the value of the SOAPAction header * @param env envelope to send @@ -160,9 +160,13 @@ } try { resCtx = st.getResponseSOAPContext (); + if (resCtx == null) + throw new SOAPException (Constants.FAULT_CODE_CLIENT, + "Invalid call. Service does not return a +response."); + String payloadStr = Call.getEnvelopeString (st); - Document doc = + Document doc = xdb.parse(new InputSource(new StringReader(payloadStr))); if (doc == null) { @@ -176,8 +180,8 @@ throw new SOAPException (Constants.FAULT_CODE_CLIENT, me.getMessage (), me); } catch (SAXException ioe) { - throw new SOAPException (Constants.FAULT_CODE_CLIENT, - "Parsing error, response was:\n" + + throw new SOAPException (Constants.FAULT_CODE_CLIENT, + "Parsing error, response was:\n" + ioe.getMessage(), ioe); } catch (IOException ioe) { throw new SOAPException (Constants.FAULT_CODE_CLIENT, ioe.getMessage (),
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>