4 Replies Latest reply on Jan 24, 2007 4:12 AM by bluegroove

    Publishing a complex CF webservice

    bluegroove
      I've got a web service developed in ColdFusion that throws java.lang.IllegalArgumentException: argument type mismatch and sometimes a class not found exception.

      Now here's the kicker, I've not found a way to reliably reproduce the exceptions. Here's what happens. Although nothing will have changed in the source code, at some point during the day the server will start to throw the exception and continue to throw it until the ColdFusion service is restarted. This happens to only one or two of our production servers throughout the course of the day and the other servers will not be throwing any exceptions and it's not the same server each day :( .

      I'm pretty confident that the underlying CF code isn't at issue because if I run the same method on the same server using REST everything is fine and it also passes all the unit tests. The underlying application that processes the request is the same, there is a SOAP endpoint and a REST endpoint. Or, if I instantiate the SOAP endpoint CFC as a component directly in ColdFusion I can run all the methods no problems. This makes me think that there is something wrong going on with Axis.

      I'm at the end of my rope over this one. Please help.

      ------------------------------------------------------------------------------------------ -------------------------------

      WSDL:
      http://api.sandbox.superbreak.com/soap/SOAPEndpoint.cfc?wsdl

      Full stack trace:
      java.lang.IllegalArgumentException: argument type mismatch at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:324) at org.apache.axis.utils.BeanPropertyDescriptor.set(BeanPropertyDescriptor.java:142) at org.apache.axis.encoding.ser.BeanPropertyTarget.set(BeanPropertyTarget.java:75) at org.apache.axis.encoding.DeserializerImpl.valueComplete(DeserializerImpl.java:249) at org.apache.axis.encoding.DeserializerImpl.endElement(DeserializerImpl.java:509) at org.apache.axis.encoding.DeserializationContext.endElement(DeserializationContext.java:10 87) at org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:171) at org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:1141) at org.apache.axis.message.RPCElement.deserialize(RPCElement.java:236) at org.apache.axis.message.RPCElement.getParams(RPCElement.java:384) at org.apache.axis.providers.java.RPCProvider.processMessage(RPCProvider.java:148) at org.apache.axis.providers.java.JavaProvider.invoke(JavaProvider.java:323) at coldfusion.xml.rpc.CFCProvider.invoke(CFCProvider.java:54) at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32) at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118) at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83) at org.apache.axis.handlers.soap.SOAPService.invoke(SOAPService.java:453) at org.apache.axis.server.AxisServer.invoke(AxisServer.java:281) at org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:699) at coldfusion.xml.rpc.CFCServlet.doAxisPost(CFCServlet.java:163) at coldfusion.filter.AxisFilter.invoke(AxisFilter.java:43) at coldfusion.filter.ApplicationFilter.invoke(ApplicationFilter.java:219) at coldfusion.filter.RequestMonitorFilter.invoke(RequestMonitorFilter.java:51) at coldfusion.filter.PathFilter.invoke(PathFilter.java:86) at coldfusion.filter.ExceptionFilter.invoke(ExceptionFilter.java:69) at coldfusion.filter.ClientScopePersistenceFilter.invoke(ClientScopePersistenceFilter.java:2 8) at coldfusion.filter.GlobalsFilter.invoke(GlobalsFilter.java:38) at coldfusion.filter.DatasourceFilter.invoke(DatasourceFilter.java:22) at coldfusion.xml.rpc.CFCServlet.invoke(CFCServlet.java:106) at coldfusion.xml.rpc.CFCServlet.doPost(CFCServlet.java:182) at javax.servlet.http.HttpServlet.service(HttpServlet.java:760) at org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:327) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at coldfusion.bootstrap.BootstrapServlet.service(BootstrapServlet.java:78) at jrun.servlet.FilterChain.doFilter(FilterChain.java:86) at com.intergral.fusionreactor.filter.FusionReactorFilter.B(Unknown Source) at com.intergral.fusionreactor.filter.FusionReactorFilter.A(Unknown Source) at com.intergral.fusionreactor.filter.FusionReactorFilter.doFilter(Unknown Source) at jrun.servlet.FilterChain.doFilter(FilterChain.java:94) at jrun.servlet.FilterChain.service(FilterChain.java:101) at jrun.servlet.ServletInvoker.invoke(ServletInvoker.java:91) at jrun.servlet.JRunInvokerChain.invokeNext(JRunInvokerChain.java:42) at jrun.servlet.JRunRequestDispatcher.invoke(JRunRequestDispatcher.java:257) at jrun.servlet.ServletEngineService.dispatch(ServletEngineService.java:541) at jrun.servlet.jrpp.JRunProxyService.invokeRunnable(JRunProxyService.java:204) at jrunx.scheduler.ThreadPool$DownstreamMetrics.invokeRunnable(ThreadPool.java:318) at jrunx.scheduler.ThreadPool$ThreadThrottle.invokeRunnable(ThreadPool.java:426) at jrunx.scheduler.ThreadPool$UpstreamMetrics.invokeRunnable(ThreadPool.java:264) at jrunx.scheduler.WorkerThread.run(WorkerThread.java:66
        • 1. Re: Web services and argument type mismatch.
          Fernis Level 3
          Are you running the very latest CFMX 7.0.2 with updaters? From my experience, CFMX 7 has been buggy at some stages what comes to registering multiple web services, and only CFMX restart helped for those problems. So far I haven't had problems with CFMX 7.0.2, but then again, I haven't re-rested my previous problem conditions again for a while.

          If you're running CFMX 6, unfortunately I've got no experience with web services using CFMX 6.x,
          • 2. Re: Web services and argument type mismatch.
            bluegroove Level 1
            Yes we are running 7.0.2. It's not an issue with registering a web service, it's a ColdFusion service and I get this error using any number of clients (Java, .Net, ColdFusion).

            The above stack trace was dumped into the SOAP response envelope:

            <soapenv:Envelope
            xmlns:soapenv=" http://schemas.xmlsoap.org/soap/envelope/"
            xmlns:xsd=" http://www.w3.org/2001/XMLSchema"
            xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance">
            <soapenv:Body>
            <soapenv:Fault>
            <faultcode>soapenv:Server.userException</faultcode>
            <faultstring>java.lang.IllegalArgumentException: argument type mismatch</faultstring>
            <detail>
            <ns1:stackTrace xmlns:ns1=" http://xml.apache.org/axis/">java.lang.IllegalArgumentException: argument type mismatch at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:324) at org.apache.axis.utils.BeanPropertyDescriptor.set(BeanPropertyDescriptor.java:142) at org.apache.axis.encoding.ser.BeanPropertyTarget.set(BeanPropertyTarget.java:75) at org.apache.axis.encoding.DeserializerImpl.valueComplete(DeserializerImpl.java:249) at org.apache.axis.encoding.DeserializerImpl.endElement(DeserializerImpl.java:509) at org.apache.axis.encoding.DeserializationContext.endElement(DeserializationContext.java:10 87) at org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:171) at org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:1141) at org.apache.axis.message.RPCElement.deserialize(RPCElement.java:236) at org.apache.axis.message.RPCElement.getParams(RPCElement.java:384) at org.apache.axis.providers.java.RPCProvider.processMessage(RPCProvider.java:148) at org.apache.axis.providers.java.JavaProvider.invoke(JavaProvider.java:323) at coldfusion.xml.rpc.CFCProvider.invoke(CFCProvider.java:54) at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32) at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118) at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83) at org.apache.axis.handlers.soap.SOAPService.invoke(SOAPService.java:453) at org.apache.axis.server.AxisServer.invoke(AxisServer.java:281) at org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:699) at coldfusion.xml.rpc.CFCServlet.doAxisPost(CFCServlet.java:163) at coldfusion.filter.AxisFilter.invoke(AxisFilter.java:43) at coldfusion.filter.ApplicationFilter.invoke(ApplicationFilter.java:219) at coldfusion.filter.RequestMonitorFilter.invoke(RequestMonitorFilter.java:51) at coldfusion.filter.PathFilter.invoke(PathFilter.java:86) at coldfusion.filter.ExceptionFilter.invoke(ExceptionFilter.java:69) at coldfusion.filter.ClientScopePersistenceFilter.invoke(ClientScopePersistenceFilter.java:2 8) at coldfusion.filter.GlobalsFilter.invoke(GlobalsFilter.java:38) at coldfusion.filter.DatasourceFilter.invoke(DatasourceFilter.java:22) at coldfusion.xml.rpc.CFCServlet.invoke(CFCServlet.java:106) at coldfusion.xml.rpc.CFCServlet.doPost(CFCServlet.java:182) at javax.servlet.http.HttpServlet.service(HttpServlet.java:760) at org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:327) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at coldfusion.bootstrap.BootstrapServlet.service(BootstrapServlet.java:78) at jrun.servlet.FilterChain.doFilter(FilterChain.java:86) at com.intergral.fusionreactor.filter.FusionReactorFilter.B(Unknown Source) at com.intergral.fusionreactor.filter.FusionReactorFilter.A(Unknown Source) at com.intergral.fusionreactor.filter.FusionReactorFilter.doFilter(Unknown Source) at jrun.servlet.FilterChain.doFilter(FilterChain.java:94) at jrun.servlet.FilterChain.service(FilterChain.java:101) at jrun.servlet.ServletInvoker.invoke(ServletInvoker.java:91) at jrun.servlet.JRunInvokerChain.invokeNext(JRunInvokerChain.java:42) at jrun.servlet.JRunRequestDispatcher.invoke(JRunRequestDispatcher.java:257) at jrun.servlet.ServletEngineService.dispatch(ServletEngineService.java:541) at jrun.servlet.jrpp.JRunProxyService.invokeRunnable(JRunProxyService.java:204) at jrunx.scheduler.ThreadPool$DownstreamMetrics.invokeRunnable(ThreadPool.java:318) at jrunx.scheduler.ThreadPool$ThreadThrottle.invokeRunnable(ThreadPool.java:426) at jrunx.scheduler.ThreadPool$UpstreamMetrics.invokeRunnable(ThreadPool.java:264) at jrunx.scheduler.WorkerThread.run(WorkerThread.java:66)</ns1:stackTrace>
            <ns2:hostname xmlns:ns2=" http://xml.apache.org/axis/">web01</ns2:hostname>
            </detail>
            </soapenv:Fault>
            </soapenv:Body>
            </soapenv:Envelope>
            • 3. Web services and argument type mismatch.
              bluegroove Level 1
              I also think there is a related issue where the web service just stops replying all together. In the same way as the above problem one of the servers will all of a sudden not return ANY XML in the http response but the HTTP status code is 200 OK. That's not OK at all, is it?

              Again, this goes away for a while with a server re-start and is not a problem using my REST endpoint or when the methods are called natively. It's only a problem when using SOAP.
              • 4. Re: Web services and argument type mismatch.
                bluegroove Level 1
                I've done some more testing to see if there is some way I can capture the exception on the server. However, I don't think the request ever gets to my application code before it fails. I already have an onError handler in my Application.cfc that logs exceptions and provides fault notification. These exceptions are not being caught and from the stack trace I can see that Axis never finishes its part.

                I'm pretty certain now that the issue has to do with the fact that the the methods in my SOAPEndpoint.cfc that throw these exceptions require complex objects as arguments and some of these input objects are also composite objects. I know that CF Server has had problems in the past in dealing with complex SOAP objects but I don't see any know issues that address my problems (although there were some issues fixed in previous versions that sound very similar).

                Where should I go from here, paid support?