Your problem is that for MessageRouter Services, you DO need to specify 
functions on the server side code that match the signature 
function_name(Envelope env, SOAPContext resCtx, SOAPContext reqCtx) 
* The order of the SOAPContext parameters may not be correct; check the 
sample code.  


MessageRouter Services differ from RPC Services on the server side by the 
function signature that you're having a problem with now, and on the client 
side in how that service is invoked.  



> {mandrake}[classes]$ java org.apache.soap.server.ServiceManagerClient
> http://localhost:2507/mysoap/servlet/msgrouter list
> Ouch, the call failed:
>   Fault Code   = SOAP-ENV:Server
>   Fault String = Exception while handling service request:
>  
> org.apache.soap.server.ServiceManager.list(org.apache.soap.Envelope,org.apa
>che.soap.rpc.SOAPContext,org.apache.soap.rpc.SOAPContext) -- no signature
> match
>
>
>       So, no signature match for list(env, req, req), and that's
>       true: there's no such a method.
>
>       What could be wrong? Somehow I think that
>       org/apache/soap/util/MethodUtils is misinterpretting the error
>       message.
>
>
>       Here's some detailed explanation:
>
>       I'm using SOAP-2.2 with Tomcat 4.0 and/or Resin 2.0.3 on
>       Linux, JDK 1.3.0 by IBM (tried Sun's JDK 1.2.2 as well). Soap
>       is 2.2 although I tried with 2.1 and 2001-11-26 nightly build
>       with the same result. Xerces is 1.4.4 (tried with 1.2.3,
>       1.2.0). Classpath is clean, no signs of soap anywhere except
>       soap-2.2
>
>       So, simple SOAP-RPC example from www.onjava.com works just
>       fine, servlet is working, and my client is communicating using
>       SOAP. TcpTunnelGui shows messages and everything is just fine:
>
> {mandrake}[resin]$ java org.apache.soap.server.ServiceManagerClient
> http://localhost:2507/mysoap/servlet/rpcrouter list
> Deployed Services:
>         urn:cd-catalog
>
> {mandrake}[classes]$ java javaxml2.CDLister
> http://localhost:2507/mysoap/servlet/rpcrouter
> Listing current CD catalog.
> 'Vespertine' by Bjork, on One Little Indian
> 'Back On Top' by Van Morrison, on Epic
> 'Asylum Years' by Tom Waits, on Asylum Records
> 'Muy Divertido' by Marc Ribot, on Atlantic
>
>         Etc..
>
>       But, when I tried with MessageRouterServlet, I cannot make it
>       deploy or list or anything else. Here's the message:
>
> {mandrake}[classes]$ java org.apache.soap.server.ServiceManagerClient
> http://localhost:2507/mysoap/servlet/msgrouter list
> Ouch, the call failed:
>   Fault Code   = SOAP-ENV:Server
>   Fault String = Exception while handling service request:
>  
> org.apache.soap.server.ServiceManager.list(org.apache.soap.Envelope,org.apa
>che.soap.rpc.SOAPContext,org.apache.soap.rpc.SOAPContext) -- no signature
> match
>
>
>       (Don't be confused by the servlet mapping, everything is set
>       up properly, I hope, at least I have a message from
>       http://localhost:2507/mysoap/servlet/msgrouter saying it
>       accepts POST only).
>
>       I tried to narrow down the exception and discovered it happens
>       in MethodUtils.getEntryPoint (which is not surprizing).
>
>       Here's the stack trace (ignore line numbers in MethodUtils,
>       they are shifted by 5 or 6, since I added printStackTrace()
>       statement)
>
> java.lang.NoSuchMethodException:
> org.apache.soap.server.ServiceManager.list(org.apache.soap.Envelope,org.apa
>che.soap.rpc.SOAPContext,org.apache.soap.rpc.SOAPContext) -- no signature
> match
>    at java.lang.Throwable.<init>(Throwable.java:96)
>    at java.lang.Exception.<init>(Exception.java:44)
>    at
>    java.lang.NoSuchMethodException.<init>(NoSuchMethodException.java:41)
>    at
>    org.apache.soap.util.MethodUtils.getEntryPoint(MethodUtils.java:201)
>    at org.apache.soap.util.MethodUtils.getMethod(MethodUtils.java:557)
>    at org.apache.soap.util.MethodUtils.getMethod(MethodUtils.java:537)
>    at
>    org.apache.soap.server.MessageRouter.invoke(MessageRouter.java:54)
>    at
>   
> org.apache.soap.providers.MsgJavaProvider.invoke(MsgJavaProvider.java:125)
> at
>   
> org.apache.soap.server.http.MessageRouterServlet.doPost(MessageRouterServle
>t.java:268) at javax.servlet.http.HttpServlet.service(HttpServlet.java:165)
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:103) at
>   
> com.caucho.server.http.FilterChainServlet.doFilter(FilterChainServlet.java:
>82) at com.caucho.server.http.Invocation.service(Invocation.java:277) at
>    com.caucho.server.http.CacheInvocation.service(CacheInvocation.java:129)
>    at
>    com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:216)
>    at
>   
> com.caucho.server.http.HttpRequest.handleConnection(HttpRequest.java:158)
> at com.caucho.server.TcpConnection.run(TcpConnection.java:140)
>    at java.lang.Thread.run(Thread.java:498)
>
>
>
>         I'm trying different combinations and in every case rpcrouter
>         is working good (listing, deploying etc) while msgrouter
>         always fails.
>
>       I'll try implementing (again) a simple list(env, req, req)
>       method which just calls list() in ServiceManager but I
>       remember doing it already and then I got IOException (I think,
>       don't have stack trace).
>
>       Oops, it looks like I actually have it:
>
>
> java.io.IOException: Message is empty!
>         at java.lang.Throwable.<init>(Throwable.java:96)
>         at java.lang.Exception.<init>(Exception.java:44)
>         at java.io.IOException.<init>(IOException.java:49)
>         at
>         org.apache.soap.rpc.SOAPContext.writeTo(SOAPContext.java:505)
>         at
>        
> org.apache.soap.transport.TransportMessage.save(TransportMessage.java:308)
> at
>        
> org.apache.soap.server.http.MessageRouterServlet.doPost(MessageRouterServle
>t.java:317) at
>         javax.servlet.http.HttpServlet.service(HttpServlet.java:165)
>         at
>         javax.servlet.http.HttpServlet.service(HttpServlet.java:103)
>         at
>        
> com.caucho.server.http.FilterChainServlet.doFilter(FilterChainServlet.java:
>82) at
>         com.caucho.server.http.Invocation.service(Invocation.java:277)
>         at
>        
> com.caucho.server.http.CacheInvocation.service(CacheInvocation.java:129) at
>        
> com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:216) at
>        
> com.caucho.server.http.HttpRequest.handleConnection(HttpRequest.java:158)
> at com.caucho.server.TcpConnection.run(TcpConnection.java:140) at
> java.lang.Thread.run(Thread.java:498)
>
>
>       and
>
> [2001/11/26 16:14:14] Error building response envelope:
> java.io.IOException: Message is empty!
> javax.servlet.ServletException: Error building response envelope:
> java.io.IOException: Message is empty!
>         at java.lang.Throwable.<init>(Throwable.java:96)
>         at java.lang.Exception.<init>(Exception.java:44)
>         at
>         javax.servlet.ServletException.<init>(ServletException.java:76)
>         at
>        
> org.apache.soap.server.http.MessageRouterServlet.doPost(MessageRouterServle
>t.java:336) at
>         javax.servlet.http.HttpServlet.service(HttpServlet.java:165)
>         at
>         javax.servlet.http.HttpServlet.service(HttpServlet.java:103)
>         at
>        
> com.caucho.server.http.FilterChainServlet.doFilter(FilterChainServlet.java:
>82) at
>         com.caucho.server.http.Invocation.service(Invocation.java:277)
>         at
>        
> com.caucho.server.http.CacheInvocation.service(CacheInvocation.java:129) at
>        
> com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:216) at
>        
> com.caucho.server.http.HttpRequest.handleConnection(HttpRequest.java:158)
> at com.caucho.server.TcpConnection.run(TcpConnection.java:140) at
> java.lang.Thread.run(Thread.java:498)
>
>
>       which is understandable since something somewhere is trying to
>       read the Envelope and it doesn't exist.
>
>
>       So, if somebody managed reading this mail until the end, I
>       hope he/she will at least understand what's the problem.
>
>       Thanks!!

Reply via email to