4 Replies Latest reply on Sep 17, 2003 10:38 PM by vashistvishal

    Monitoring SOAP Messages

    arun12

      Hi,
      Is there a way to monitor the SOAP messages coming in and out. I have deployed a web service starting with a WSDL file using Apache axis. After that I bundled all the generated class files into a wsr and dropped it in the deploy directory. I am able to hit the end points of the web service. I can invoke the web service with a java client. But when the request is sent from a .net client, the web service is unable to handle it. I would like to monitor the message that is coming in. Is there a way to do this.

      Thanks for your help in advance

        • 1. Re: Monitoring SOAP Messages
          jonlee

          I am not sure what you mean by monitor the SOAP message. You can use the inline Axis TCP Monitor (tcpmon) utility to view the content of a message. JBoss.NET is a wrapped Axis service. Go to http://xml.apache.org/axis for information on using tcpmon, in the user guide section.

          • 2. Re: Monitoring SOAP Messages
            arun12

            Thanks for your reply. Actually this is my real problem.
            I have generated the web service starting from a WSDL file using axis WSDL2Java classes. I was able to deploy the generated service as a wsr on jboss using jboss-net. When I try to access the service, I am receveing this error

            Mapping Exception to AxisFault
            org.xml.sax.SAXException: SimpleDeserializer encountered a child element, which is NOT expected, in something it was trying to deserialize.
            at org.apache.axis.encoding.ser.SimpleDeserializer.onStartChild(SimpleDeserializer.java:189)
            at org.apache.axis.encoding.DeserializationContextImpl.startElement(DeserializationContextImpl.java:949)
            at org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:198)
            at org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:718)
            at org.apache.axis.message.RPCElement.deserialize(RPCElement.java:322)
            at org.apache.axis.message.RPCElement.getParams(RPCElement.java:346)
            at org.apache.axis.providers.java.RPCProvider.processMessage(RPCProvider.java:184)
            at org.apache.axis.providers.java.JavaProvider.invoke(JavaProvider.java:330)
            at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:71)
            at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:150)
            at org.apache.axis.SimpleChain.invoke(SimpleChain.java:120)
            at org.apache.axis.handlers.soap.SOAPService.invoke(SOAPService.java:475)
            at org.apache.axis.server.AxisServer.invoke(AxisServer.java:323)
            at org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:854)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
            at org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:339)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
            at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256)
            at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
            at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
            at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
            at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
            at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
            at org.jboss.web.catalina.security.JBossSecurityMgrRealm.invoke(JBossSecurityMgrRealm.java:229)
            at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
            at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:551)
            at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
            at org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java:246)
            at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
            at org.jboss.web.catalina.statistics.ContainerStatsValve.invoke(ContainerStatsValve.java:75)
            at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
            at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
            at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
            at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2415)
            at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
            at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
            at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:171)
            at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
            at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172)
            at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
            at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:509)
            at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
            at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
            at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
            at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
            at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
            at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
            at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
            at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223)
            at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:594)
            at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:392)
            at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:565)
            at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:619)
            at java.lang.Thread.run(Thread.java:534)

            This is why I was wanting to look at the incoming contect of SOAP message to figure out what is going on.

            • 3. Re: Monitoring SOAP Messages
              jonlee

              There are a few quirks with the deserializer as people have found out - such as declarations of types. It may also be that the simple deserializer is not applicable (the data is too complex) and you have to use a custom deserializer. Use tcpmon to check the incoming/outgoing exchange.

              Otherwise also include the stubs so the folks here can understand what you are serializing.

              • 4. Re: Monitoring SOAP Messages

                One of the tools which you can use to check this is ethereal, which is shipped with Red Hat installions of Linux. Provided you are using Red Hat as yr desktop.
                Vishal.