Poor error handling when a request parameter of the wrong type is sent to a 
POJO web service
--------------------------------------------------------------------------------------------

                 Key: AXIS2-4398
                 URL: https://issues.apache.org/jira/browse/AXIS2-4398
             Project: Axis 2.0 (Axis2)
          Issue Type: Improvement
          Components: adb
    Affects Versions: 1.5
            Reporter: Pétur Runólfsson
            Priority: Minor


If a request parameter in a SOAP or REST request to a POJO web service is not 
of the expected type, the error messages that are returned to the client and 
that appear in the logs are often not very good. For example, the faultcode is 
soapenv:Receiver (should be soapenv:Sender since the error was caused by an 
invalid request), and the name of the offending parameter or field doesn't 
appear anywhere.

Here is a sample request (args0 is declared as xs:int):

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"; 
xmlns:axis="http://ws.apache.org/axis2";>
   <soap:Header/>
   <soap:Body>
      <axis:echoInt>
         <!--Optional:-->
         <axis:args0>?</axis:args0>
      </axis:echoInt>
   </soap:Body>
</soap:Envelope>

The response is:

<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope";>
   <soapenv:Body>
      <soapenv:Fault>
         <soapenv:Code>
            <soapenv:Value>soapenv:Receiver</soapenv:Value>
         </soapenv:Code>
         <soapenv:Reason>
            <soapenv:Text xml:lang="en-US">For input string: "?"</soapenv:Text>
         </soapenv:Reason>
         <soapenv:Detail/>
      </soapenv:Fault>
   </soapenv:Body>
</soapenv:Envelope>

The tomcat log contains:

[ERROR] For input string: "?"                                                   
                                                                                
         
java.lang.NumberFormatException: For input string: "?"                          
                                                                                
         
        at 
java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)   
                                                                              
        at java.lang.Integer.parseInt(Integer.java:447)                         
                                                                                
         
        at java.lang.Integer.<init>(Integer.java:620)                           
                                                                                
         
        at 
org.apache.axis2.databinding.typemapping.SimpleTypeMapper.getSimpleTypeObject(SimpleTypeMapper.java:80)
                                                       
        at 
org.apache.axis2.databinding.utils.BeanUtil.processObject(BeanUtil.java:675)    
                                                                              
        at 
org.apache.axis2.databinding.utils.BeanUtil.ProcessElement(BeanUtil.java:630)   
                                                                              
        at 
org.apache.axis2.databinding.utils.BeanUtil.deserialize(BeanUtil.java:562)      
                                                                              
        at 
org.apache.axis2.rpc.receivers.RPCUtil.processRequest(RPCUtil.java:153)         
                                                                              
        at 
org.apache.axis2.rpc.receivers.RPCUtil.invokeServiceClass(RPCUtil.java:188)     
                                                                              
        at 
org.apache.axis2.rpc.receivers.RPCMessageReceiver.invokeBusinessLogic(RPCMessageReceiver.java:102)
                                                            
        at 
org.apache.axis2.receivers.AbstractInOutMessageReceiver.invokeBusinessLogic(AbstractInOutMessageReceiver.java:40)
                                             
        at 
org.apache.axis2.receivers.AbstractMessageReceiver.receive(AbstractMessageReceiver.java:114)
                                                                  
        at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:173)      
                                                                                
         
        at 
org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostRequest(HTTPTransportUtils.java:167)
                                                        
        at 
org.apache.axis2.transport.http.AxisServlet.doPost(AxisServlet.java:142)        
                                                                              
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)         
                                                                                
         
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at 
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at 
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at 
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        at 
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.josso.tc60.agent.SSOAgentValve.invoke(SSOAgentValve.java:275)
        at 
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at 
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
        at 
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
        at 
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
        at 
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
        at java.lang.Thread.run(Thread.java:619)
[ERROR] For input string: "?"
org.apache.axis2.AxisFault: For input string: "?"
        at org.apache.axis2.AxisFault.makeFault(AxisFault.java:430)
        at 
org.apache.axis2.rpc.receivers.RPCMessageReceiver.invokeBusinessLogic(RPCMessageReceiver.java:161)
        at 
org.apache.axis2.receivers.AbstractInOutMessageReceiver.invokeBusinessLogic(AbstractInOutMessageReceiver.java:40)
        at 
org.apache.axis2.receivers.AbstractMessageReceiver.receive(AbstractMessageReceiver.java:114)
        at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:173)
        at 
org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostRequest(HTTPTransportUtils.java:167)
        at 
org.apache.axis2.transport.http.AxisServlet.doPost(AxisServlet.java:142)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at 
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at 
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at 
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        at 
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.josso.tc60.agent.SSOAgentValve.invoke(SSOAgentValve.java:275)
        at 
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at 
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
        at 
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
        at 
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
        at 
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
        at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.NumberFormatException: For input string: "?"
        at 
java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
        at java.lang.Integer.parseInt(Integer.java:447)
        at java.lang.Integer.<init>(Integer.java:620)
        at 
org.apache.axis2.databinding.typemapping.SimpleTypeMapper.getSimpleTypeObject(SimpleTypeMapper.java:80)
        at 
org.apache.axis2.databinding.utils.BeanUtil.processObject(BeanUtil.java:675)
        at 
org.apache.axis2.databinding.utils.BeanUtil.ProcessElement(BeanUtil.java:630)
        at 
org.apache.axis2.databinding.utils.BeanUtil.deserialize(BeanUtil.java:562)
        at 
org.apache.axis2.rpc.receivers.RPCUtil.processRequest(RPCUtil.java:153)
        at 
org.apache.axis2.rpc.receivers.RPCUtil.invokeServiceClass(RPCUtil.java:188)
        at 
org.apache.axis2.rpc.receivers.RPCMessageReceiver.invokeBusinessLogic(RPCMessageReceiver.java:102)
        ... 20 more



-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to