Multiple responses send by SOAPEventHandler when ServiceValidationException occurs
---------------------------------------------------------------------------------- Key: OFBIZ-4207 URL: https://issues.apache.org/jira/browse/OFBIZ-4207 Project: OFBiz Issue Type: Bug Components: framework Affects Versions: SVN trunk Environment: Windows 7 x64, Java 1.6.0_16, OOTB Derby DB Reporter: Michael Reichenbach When calling a service that was defined as "export=true" and a non-optional parameter is missing, then the SOAP-Response will look like this: {code:xml} <?xml version="1.0" encoding="utf-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><Response><map-Map> <map-Entry> <map-Key> <std-String value="errorMessage"></std-String> </map-Key> <map-Value> <std-String value="Problem processing the service"></std-String> </map-Value> </map-Entry> </map-Map></Response></soapenv:Body></soapenv:Envelope><?xml version="1.0" encoding="utf-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><Response><map-Map> <map-Entry> <map-Key> <std-String value="errorMessage"></std-String> </map-Key> <map-Value> <std-String value="The following required parameter is missing: ..."></std-String> </map-Value> </map-Entry> </map-Map></Response></soapenv:Body></soapenv:Envelope> {code} Problem ======= The problem is, that this response is not a valid XML. Cause ===== The cause is, that in {{SOAPEventHandler.invoke()}} the {{dispatcher.runSync()}} throws a {{ServiceValidationException}} ("The following required parameter is missing..."). This will be catched by the {{GenericServiceException}}-block, a error response will be written to the output stream (via {{sendError()}}) and an {{EventHandlerException}} will be thrown. This exception will again be catched (this time by the {{Exception}}-block and another error response will be written to the output stream. Solution ======== I think the best solution is simply not to call {{sendError}} in the {{GenericServiceException}}-block. Then the response will look like this: {code:xml} <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Body> <Response> <map-Map> <map-Entry> <map-Key> <std-String value="errorMessage"/> </map-Key> <map-Value> <std-String value="The following required parameter is missing: ..."/> </map-Value> </map-Entry> </map-Map> </Response> </soapenv:Body> </soapenv:Envelope> {code} -- This message is automatically generated by JIRA. - For more information on JIRA, see: http://www.atlassian.com/software/jira |
[ https://issues.apache.org/jira/browse/OFBIZ-4207?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Michael Reichenbach updated OFBIZ-4207: --------------------------------------- Attachment: SOAPEventHandler.diff Patch > Multiple responses send by SOAPEventHandler when ServiceValidationException occurs > ---------------------------------------------------------------------------------- > > Key: OFBIZ-4207 > URL: https://issues.apache.org/jira/browse/OFBIZ-4207 > Project: OFBiz > Issue Type: Bug > Components: framework > Affects Versions: SVN trunk > Environment: Windows 7 x64, Java 1.6.0_16, OOTB Derby DB > Reporter: Michael Reichenbach > Labels: SOAP, webservice > Attachments: SOAPEventHandler.diff > > Original Estimate: 0.25h > Remaining Estimate: 0.25h > > When calling a service that was defined as "export=true" and a non-optional parameter is missing, then the SOAP-Response will look like this: > {code:xml} > <?xml version="1.0" encoding="utf-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><Response><map-Map> > <map-Entry> > <map-Key> > <std-String value="errorMessage"></std-String> > </map-Key> > <map-Value> > <std-String value="Problem processing the service"></std-String> > </map-Value> > </map-Entry> > </map-Map></Response></soapenv:Body></soapenv:Envelope><?xml version="1.0" encoding="utf-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><Response><map-Map> > <map-Entry> > <map-Key> > <std-String value="errorMessage"></std-String> > </map-Key> > <map-Value> > <std-String value="The following required parameter is missing: ..."></std-String> > </map-Value> > </map-Entry> > </map-Map></Response></soapenv:Body></soapenv:Envelope> > {code} > Problem > ======= > The problem is, that this response is not a valid XML. > Cause > ===== > The cause is, that in {{SOAPEventHandler.invoke()}} the {{dispatcher.runSync()}} throws a {{ServiceValidationException}} ("The following required parameter is missing..."). This will be catched by the {{GenericServiceException}}-block, a error response will be written to the output stream (via {{sendError()}}) and an {{EventHandlerException}} will be thrown. This exception will again be catched (this time by the {{Exception}}-block and another error response will be written to the output stream. > Solution > ======== > I think the best solution is simply not to call {{sendError}} in the {{GenericServiceException}}-block. Then the response will look like this: > {code:xml} > <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> > <soapenv:Body> > <Response> > <map-Map> > <map-Entry> > <map-Key> > <std-String value="errorMessage"/> > </map-Key> > <map-Value> > <std-String value="The following required parameter is missing: ..."/> > </map-Value> > </map-Entry> > </map-Map> > </Response> > </soapenv:Body> > </soapenv:Envelope> > {code} -- This message is automatically generated by JIRA. - For more information on JIRA, see: http://www.atlassian.com/software/jira |
In reply to this post by Nicolas Malin (Jira)
[ https://issues.apache.org/jira/browse/OFBIZ-4207?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Michael Reichenbach updated OFBIZ-4207: --------------------------------------- Comment: was deleted (was: Patch) > Multiple responses send by SOAPEventHandler when ServiceValidationException occurs > ---------------------------------------------------------------------------------- > > Key: OFBIZ-4207 > URL: https://issues.apache.org/jira/browse/OFBIZ-4207 > Project: OFBiz > Issue Type: Bug > Components: framework > Affects Versions: SVN trunk > Environment: Windows 7 x64, Java 1.6.0_16, OOTB Derby DB > Reporter: Michael Reichenbach > Labels: SOAP, webservice > Attachments: SOAPEventHandler.diff > > Original Estimate: 0.25h > Remaining Estimate: 0.25h > > When calling a service that was defined as "export=true" and a non-optional parameter is missing, then the SOAP-Response will look like this: > {code:xml} > <?xml version="1.0" encoding="utf-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><Response><map-Map> > <map-Entry> > <map-Key> > <std-String value="errorMessage"></std-String> > </map-Key> > <map-Value> > <std-String value="Problem processing the service"></std-String> > </map-Value> > </map-Entry> > </map-Map></Response></soapenv:Body></soapenv:Envelope><?xml version="1.0" encoding="utf-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><Response><map-Map> > <map-Entry> > <map-Key> > <std-String value="errorMessage"></std-String> > </map-Key> > <map-Value> > <std-String value="The following required parameter is missing: ..."></std-String> > </map-Value> > </map-Entry> > </map-Map></Response></soapenv:Body></soapenv:Envelope> > {code} > Problem > ======= > The problem is, that this response is not a valid XML. > Cause > ===== > The cause is, that in {{SOAPEventHandler.invoke()}} the {{dispatcher.runSync()}} throws a {{ServiceValidationException}} ("The following required parameter is missing..."). This will be catched by the {{GenericServiceException}}-block, a error response will be written to the output stream (via {{sendError()}}) and an {{EventHandlerException}} will be thrown. This exception will again be catched (this time by the {{Exception}}-block and another error response will be written to the output stream. > Solution > ======== > I think the best solution is simply not to call {{sendError}} in the {{GenericServiceException}}-block. Then the response will look like this: > {code:xml} > <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> > <soapenv:Body> > <Response> > <map-Map> > <map-Entry> > <map-Key> > <std-String value="errorMessage"/> > </map-Key> > <map-Value> > <std-String value="The following required parameter is missing: ..."/> > </map-Value> > </map-Entry> > </map-Map> > </Response> > </soapenv:Body> > </soapenv:Envelope> > {code} -- This message is automatically generated by JIRA. - For more information on JIRA, see: http://www.atlassian.com/software/jira |
In reply to this post by Nicolas Malin (Jira)
[ https://issues.apache.org/jira/browse/OFBIZ-4207?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Jacques Le Roux closed OFBIZ-4207. ---------------------------------- Resolution: Fixed Fix Version/s: SVN trunk Release Branch 10.04 Assignee: Jacques Le Roux Thanks Michael, I have commented out the line, it's in trunk at r1075952,R10.04 at r1075957. > Multiple responses send by SOAPEventHandler when ServiceValidationException occurs > ---------------------------------------------------------------------------------- > > Key: OFBIZ-4207 > URL: https://issues.apache.org/jira/browse/OFBIZ-4207 > Project: OFBiz > Issue Type: Bug > Components: framework > Affects Versions: SVN trunk > Environment: Windows 7 x64, Java 1.6.0_16, OOTB Derby DB > Reporter: Michael Reichenbach > Assignee: Jacques Le Roux > Labels: SOAP, webservice > Fix For: Release Branch 10.04, SVN trunk > > Attachments: SOAPEventHandler.diff > > Original Estimate: 0.25h > Remaining Estimate: 0.25h > > When calling a service that was defined as "export=true" and a non-optional parameter is missing, then the SOAP-Response will look like this: > {code:xml} > <?xml version="1.0" encoding="utf-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><Response><map-Map> > <map-Entry> > <map-Key> > <std-String value="errorMessage"></std-String> > </map-Key> > <map-Value> > <std-String value="Problem processing the service"></std-String> > </map-Value> > </map-Entry> > </map-Map></Response></soapenv:Body></soapenv:Envelope><?xml version="1.0" encoding="utf-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><Response><map-Map> > <map-Entry> > <map-Key> > <std-String value="errorMessage"></std-String> > </map-Key> > <map-Value> > <std-String value="The following required parameter is missing: ..."></std-String> > </map-Value> > </map-Entry> > </map-Map></Response></soapenv:Body></soapenv:Envelope> > {code} > Problem > ======= > The problem is, that this response is not a valid XML. > Cause > ===== > The cause is, that in {{SOAPEventHandler.invoke()}} the {{dispatcher.runSync()}} throws a {{ServiceValidationException}} ("The following required parameter is missing..."). This will be catched by the {{GenericServiceException}}-block, a error response will be written to the output stream (via {{sendError()}}) and an {{EventHandlerException}} will be thrown. This exception will again be catched (this time by the {{Exception}}-block and another error response will be written to the output stream. > Solution > ======== > I think the best solution is simply not to call {{sendError}} in the {{GenericServiceException}}-block. Then the response will look like this: > {code:xml} > <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> > <soapenv:Body> > <Response> > <map-Map> > <map-Entry> > <map-Key> > <std-String value="errorMessage"/> > </map-Key> > <map-Value> > <std-String value="The following required parameter is missing: ..."/> > </map-Value> > </map-Entry> > </map-Map> > </Response> > </soapenv:Body> > </soapenv:Envelope> > {code} -- This message is automatically generated by JIRA. - For more information on JIRA, see: http://www.atlassian.com/software/jira |
Free forum by Nabble | Edit this page |