You are viewing a plain text version of this content. The canonical link for it is here.
Posted to soap-user@xml.apache.org by "David B. Bitton" <da...@codenoevil.com> on 2002/03/22 03:34:48 UTC
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
david@codenoevil.com
www.codenoevil.com
Code Made Fresh Daily™
Re: Adding a header to a SOAP message
Posted by Fred Meredith <fm...@nc.rr.com>.
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" <bc...@cysive.com>
To: <so...@xml.apache.org>
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:david@codenoevil.com]
> Sent: Thursday, March 21, 2002 9:35 PM
> To: soap-user@xml.apache.org
> 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
> david@codenoevil.com
> www.codenoevil.com
>
> Code Made Fresh Daily™
>
Re: Adding a header to a SOAP message
Posted by Fred Meredith <fm...@nc.rr.com>.
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" <bc...@cysive.com>
To: <so...@xml.apache.org>
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:david@codenoevil.com]
> Sent: Thursday, March 21, 2002 9:35 PM
> To: soap-user@xml.apache.org
> 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
> david@codenoevil.com
> www.codenoevil.com
>
> Code Made Fresh Daily™
>
Adding a header to a SOAP message
Posted by Brenda Coulson <bc...@cysive.com>.
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:david@codenoevil.com]
Sent: Thursday, March 21, 2002 9:35 PM
To: soap-user@xml.apache.org
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
david@codenoevil.com
www.codenoevil.com
Code Made Fresh Daily™
Adding a header to a SOAP message
Posted by Brenda Coulson <bc...@cysive.com>.
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:david@codenoevil.com]
Sent: Thursday, March 21, 2002 9:35 PM
To: soap-user@xml.apache.org
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
david@codenoevil.com
www.codenoevil.com
Code Made Fresh Daily™