Hello, Here is a patch to enable clients to set up transport headers for sending envelope. Patched files are Call & Message, additional methods added with support to headers param
Best regards, Pavel
Index: Message.java =================================================================== RCS file: /home/cvspublic/xml-soap/java/src/org/apache/soap/messaging/Message.java,v retrieving revision 1.10 diff -u -r1.10 Message.java --- Message.java 17 May 2001 18:25:42 -0000 1.10 +++ Message.java 18 Oct 2002 11:59:23 -0000 @@ -96,7 +96,7 @@ public void setSOAPTransport (SOAPTransport st) { this.st = st; } - + public SOAPTransport getSOAPTransport () { return st; } @@ -105,7 +105,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 @@ -114,13 +114,31 @@ */ public void send (URL url, String actionURI, Envelope env) throws SOAPException { + send(url, actionURI, env, null); + } + + /** + * 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 + * @param headers any parameters to be used as protocol headers + * + * @exception SOAPException if something goes wrong. + */ + public void send (URL url, String actionURI, Envelope env, Hashtable headers) + throws SOAPException { + // Construct default HTTP transport if not specified. if (st == null) { st = new SOAPHTTPConnection (); } // Send request. - st.send (url, actionURI, null, env, null, reqCtx); + st.send (url, actionURI, headers, env, null, reqCtx); } /** @@ -143,7 +161,7 @@ resCtx = st.getResponseSOAPContext (); String payloadStr = Call.getEnvelopeString (st); - Document doc = + Document doc = xdb.parse(new InputSource(new StringReader(payloadStr))); if (doc == null) { @@ -157,8 +175,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 (), Index: Call.java =================================================================== RCS file: /home/cvspublic/xml-soap/java/src/org/apache/soap/rpc/Call.java,v retrieving revision 1.17 diff -u -r1.17 Call.java --- Call.java 30 Aug 2002 21:39:00 -0000 1.17 +++ Call.java 18 Oct 2002 11:59:54 -0000 @@ -148,7 +148,7 @@ { this.st = st; } - + public SOAPTransport getSOAPTransport() { return st; @@ -156,16 +156,16 @@ /** * Set timeout in our MessageContext. - * + * * @param value the maximum amount of time, in milliseconds */ public void setTimeout (int value) { to = value; } - + /** * Get timeout from our MessageContext. - * + * * @return value the maximum amount of time, in milliseconds */ public int getTimeout () { @@ -187,7 +187,7 @@ public void setUseDocumentBuilder(boolean useDocumentBuilder) { this.useDocumentBuilder = useDocumentBuilder; } - + /** * Add a MIME BodyPart. * @@ -254,12 +254,26 @@ /** * Invoke this call at the specified URL. Valid only on the client side. + * + * @param sendTo the URL to send the envelope to + * @param action the SOAPAction header field value + */ + public Response invoke(URL sendTo, String action) throws SOAPException { + return invoke(sendTo, action, null); + } + + /** + * Invoke this call at the specified URL. Valid only on the client side. + * + * @param sendTo the URL to send the envelope to + * @param action the SOAPAction header field value + * @param headers any other header fields to go to as protocol headers */ - public Response invoke(URL url, String SOAPActionURI) throws SOAPException + public Response invoke(URL sendTo, String action, Hashtable headers) throws +SOAPException { - if (SOAPActionURI == null) + if (action == null) { - SOAPActionURI = ""; + action = ""; } // if the smr hasn't been created yet, do it now @@ -278,11 +292,11 @@ st = new SOAPHTTPConnection(); // set the timeout - if (to != 0 && st instanceof SOAPHTTPConnection) + if (to != 0 && st instanceof SOAPHTTPConnection) ((SOAPHTTPConnection)st).setTimeout(to); // Post the call envelope. - st.send(url, SOAPActionURI, null, callEnv, smr, ctx); + st.send(sendTo, action, headers, callEnv, smr, ctx); // Get the response context. SOAPContext respCtx = st.getResponseSOAPContext(); @@ -333,7 +347,7 @@ { throw new SOAPException(Constants.FAULT_CODE_CLIENT, "Parsing error, response was:\n" +e.getMessage(), - e); + e); } catch (IOException e) { @@ -348,8 +362,8 @@ * parser plus a transformation. */ private Document parsePayload(String payload) throws IOException, SAXException { - InputSource input = new InputSource(new StringReader(payload)); - if (!useDocumentBuilder) { + InputSource input = new InputSource(new StringReader(payload)); + if (!useDocumentBuilder) { try { // If classes required for transformation are all present, use that method Class domResultClass = Class.forName("javax.xml.transform.dom.DOMResult"); @@ -359,14 +373,14 @@ Class sourceClass = Class.forName("javax.xml.transform.Source"); Class resultClass = Class.forName("javax.xml.transform.Result"); - Object output = domResultClass.newInstance(); + Object output = domResultClass.newInstance(); Object source = saxSourceClass.newInstance(); // Create factory and use to create transformer Method method = transformerFactoryClass.getDeclaredMethod("newInstance", new Class[]{}); - Object xformFactory = method.invoke(null, new Object[]{}); + Object xformFactory = method.invoke(null, new Object[]{}); method = transformerFactoryClass.getDeclaredMethod("newTransformer", new Class[]{}); - Object idTransform = method.invoke(xformFactory, new Object[]{}); + Object idTransform = method.invoke(xformFactory, new Object[]{}); // Set input source for SAX source method = saxSourceClass.getDeclaredMethod("setInputSource", new Class[]{InputSource.class}); @@ -381,7 +395,7 @@ // If all has worked, we return here; for exceptions, // we fall through to the DOM parser. - return (Document) method.invoke(output, new Object[]{}); + return (Document) method.invoke(output, new Object[]{}); } catch (ClassNotFoundException e) { } catch (NoSuchMethodException e) { } catch (InvocationTargetException e) {
-- To unsubscribe, e-mail: <mailto:soap-dev-unsubscribe@;xml.apache.org> For additional commands, e-mail: <mailto:soap-dev-help@;xml.apache.org>