You may want to look into the SOAP Envelope API that IBM Research, Tokyo has
been working on:
http://www.trl.ibm.com/projects/xml/soap/env/
They have extended the existing Apache API to provide support for headers
and other security related enhancements.
----- Original Message -----
From: "Brenda Coulson" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Monday, March 25, 2002 1:44 PM
Subject: Adding a header to a SOAP message
> All-
>
> I am trying to add a header to my SOAP request and not having any success.
I
> have actually modified the samples.addressbook.GetAddress java file. But
> whenever I execute the client, I get back a NullPointerException from the
> server. The server diagnostics I have added indicate that the header did
not
> get sent as part of the request - i.e. when it extracts the header, it is
> null. I know how to solve the NullPointerException - i.e. check the value
of
> header before referencing it. However, that does not solve the overall big
> picture - why isn't the header being sent as part of my SOAP message. I am
> not sure what I am doing wrong. Any help would be greatly appreciated.
>
> Client code:
>
> Call call = new Call();
>
> call.setSOAPMappingRegistry(smr);
> call.setTargetObjectURI("urn:AddressFetcher");
> call.setMethodName("getAddressFromName");
> call.setEncodingStyleURI(encodingStyleURI);
>
> Vector params = new Vector();
>
> params.addElement(new Parameter("nameToLookup", String.class,
> nameToLookup, null));
> call.setParams(params);
>
> // ********CHANGES
> // Create header
> Header header = new Header();
>
> // Add attribute to header
> QName attributeName = new QName("urn:xml-soap-address-demo",
> "SOAP-SEC");
> header.setAttribute(attributeName, "test");
> // Add header to Call object.
> call.setHeader(header);
>
> // Invoke the call.
> Response resp;
>
> try
> {
> resp = call.invoke(url, "");
> }
> ...
>
> On the server-side, I have written my own Provider that extends
> RPCJavaProvider and actually builds the envelope and attempts to extract
the
> header. The code is as follows.
>
> package samples.addressbook;
>
> import java.util.Enumeration;
> import java.util.Vector;
> import org.apache.soap.Envelope;
> import org.apache.soap.Header;
> import org.apache.soap.rpc.Call;
> import org.apache.soap.rpc.SOAPContext;
> import org.apache.soap.SOAPException;
> import org.apache.soap.server.DeploymentDescriptor;
>
> public class SecureProvider extends
> org.apache.soap.providers.RPCJavaProvider
> {
> public void locate(DeploymentDescriptor dd,Envelope env, Call call,
> String methodName,
> String targetObjectURI, SOAPContext reqContext) throws
SOAPException
> {
> super.locate(dd, env, call, methodName, targetObjectURI,
> reqContext);
> // set protected data member to call's envelope
> System.out.println("Building envelope.");
> envelope = call.buildEnvelope();
> System.out.println("finished building envelope.");
> }
>
> public void invoke(SOAPContext req, SOAPContext res) throws
> SOAPException
> {
> System.err.println("Getting header out of envelope = " +
envelope);
> Header header = envelope.getHeader(); // this returns null and I
> then get a NullPointerException
> Vector headerEntries = header.getHeaderEntries();
> for (Enumeration enum = headerEntries.elements();
> enum.hasMoreElements();)
> {
> System.err.println("Header Entry: " + enum.nextElement());
> }
> super.invoke(req, res);
> }
> }
>
>
>
> -----Original Message-----
> From: David B. Bitton [mailto:[EMAIL PROTECTED]]
> Sent: Thursday, March 21, 2002 9:35 PM
> To: [EMAIL PROTECTED]
> Subject: java.io.InputStream
>
>
> I have the potential to send XML files in excess of 400MB via SOAP. I
> noticed that java.io.InputStream can be used as a parameter for my method.
> If I do not specify literalxml encoding in the envelope, can I bring the
XML
> in through as a stream, and have my method start chomping on the data
before
> the end of the envelope?
>
> --
>
> David B. Bitton
> [EMAIL PROTECTED]
> www.codenoevil.com
>
> Code Made Fresh Daily�
>