Drew,
I thought that maybe if you had a bad definition for HttpServletRequest that the
JIT might throw an exception when it compiles the method.
Anyway, I wrote the following service and client and was able to successfully
run it. My environment is Win2k, JDK 1.3.1, SOAP 2.2, Tomcat 4.0.1. If you
cannot get it to run, I could send you my bytecode to test.
Scott
import javax.servlet.http.*;
public class HelloWorldService {
public String hello(org.apache.soap.rpc.SOAPContext ctx) {
HttpServletRequest req =
(HttpServletRequest)ctx.getProperty(org.apache.soap.Constants.BAG_HTTPSERVLETREQ
UEST);
return req != null ? req.getQueryString() : "null";
}
}
<isd:service xmlns:isd="http://xml.apache.org/xml-soap/deployment"
id="urn:helloworld">
<isd:provider type="java"
scope="Application"
methods="hello">
<isd:java class="HelloWorldService"/>
</isd:provider>
<isd:faultListener>org.apache.soap.server.DOMFaultListener</isd:faultListener>
</isd:service>
import java.net.*;
import java.util.*;
import org.apache.soap.*;
import org.apache.soap.rpc.*;
public class HelloWorldClient {
public static void main(String[] args) throws Exception {
if (args.length != 1
&& (args.length != 2 || !args[0].startsWith ("-"))) {
System.err.println ("Usage: java " + HelloWorldClient.class.getName () +
" [-encodingStyleURI] SOAP-router-URL");
System.exit (1);
}
// Process the arguments.
int offset = 2 - args.length;
String encodingStyleURI = args.length == 2
? args[0].substring(1)
: Constants.NS_URI_SOAP_ENC;
URL url = new URL (args[1 - offset]);
// Build the call.
Call call = new Call ();
call.setTargetObjectURI ("urn:helloworld");
call.setMethodName ("hello");
call.setEncodingStyleURI(encodingStyleURI);
Vector params = new Vector ();
Response resp = call.invoke url, "" );
// Check the response.
if (resp.generatedFault ()) {
Fault fault = resp.getFault ();
System.out.println ("Ouch, the call failed: ");
System.out.println (" Fault Code = " + fault.getFaultCode ());
System.out.println (" Fault String = " + fault.getFaultString ());
} else {
Parameter result = resp.getReturnValue ();
System.out.println (result.getValue ());
}
}
}
----- Original Message -----
From: "Andrew Trieger" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Friday, April 19, 2002 1:20 PM
Subject: Re: using SOAPContext as first argument in RPC SOAP messages class not
working
> Good idea, but I *think* its not even executing my method as my first
> line println isnt coming out, so I'm screwed, but i might be able to
> subclass rpcrouter servlet, use mine instead of theirs, catch throwable
> and dump any info to stderr...
>
> Any idea if defining my own custom fault-handler would be helpful? I'm
> not sure how that would help, but possibly it would be called by the
> local soap stuff and given more error message info than is returned in
> the soap response? eh... long shot.
>
> I might just have to call this feature "Too new to work" and wait 6mos
> and get along without it. I could define a different soap router url
> for EVERY method and then control access in iplanet... hassle.
>
> Drew
>