RPCUtil handles wrapped style of SOAP messages wrongly.
--------------------------------------------------------
Key: AXIS2-4350
URL: https://issues.apache.org/jira/browse/AXIS2-4350
Project: Axis 2.0 (Axis2)
Issue Type: Bug
Components: adb
Affects Versions: 1.5
Reporter: Oleg Zenzin
Class
http://svn.apache.org/repos/asf/webservices/axis2/branches/java/1_5/modules/adb/src/org/apache/axis2/rpc/receivers/RPCUtil.java
in the method invokeServiceClass() has following lines:
if (inAxisMessage.isWrapped()) {
objectArray = RPCUtil.processRequest(methodElement,
method, inMessage.getAxisService().getObjectSupplier());
} else {
objectArray = RPCUtil.processRequest((OMElement)
methodElement.getParent(),
method, inMessage.getAxisService().getObjectSupplier());
}
which wrongly handles the wrapped style of SOAP messages. Like, for instance
this message:
<?xml version='1.0' encoding='UTF-8'?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<addr:To
xmlns:addr="http://www.w3.org/2005/08/addressing">http://localhost:8383/bre/services/dtws_tryme_newdecisiontable</addr:To>
<addr:Action
xmlns:addr="http://www.w3.org/2005/08/addressing">urn:invokeDecisionTable</addr:Action>
<addr:ReplyTo xmlns:addr="http://www.w3.org/2005/08/addressing">
<addr:Address>http://www.w3.org/2005/08/addressing/anonymous</addr:Address>
</addr:ReplyTo>
<addr:MessageID
xmlns:addr="http://www.w3.org/2005/08/addressing">uuid:53870713-5719-457f-9965-0ebd111e7dda-5</addr:MessageID>
</soapenv:Header>
<soapenv:Body>
<invokeDecisionTable xmlns="http://newdecisiontable.tryme">
<ns:param0 xmlns:ns="http://newdecisiontable.tryme">
<ax25:person xmlns:ax25="http://newdecisiontable.tryme/xsd">
<ax26:age xmlns:ax26="http://newdecisiontable.tryme/bre" />
<ax26:greeting xmlns:ax26="http://newdecisiontable.tryme/bre"
/>
<name xmlns="http://newdecisiontable.tryme/bre"
xmlns:ax26="http://newdecisiontable.tryme/bre">Oleg</name>
</ax25:person>
</ns:param0>
</invokeDecisionTable>
</soapenv:Body>
</soapenv:Envelope>
will not be deserialized because BeanUtil.deserialize(methodElement,
parameters, objectSupplier) will be fed with element <soapenv:Body> instead of
element <ns:param0>.
The fix is pretty simple, instead of above code there should be:
if (inAxisMessage.isWrapped()) {
objectArray =
RPCUtil.processRequest(methodElement.getFirstElement(),
method, inMessage.getAxisService().getObjectSupplier());
} else {
objectArray = RPCUtil.processRequest(methodElement,
method, inMessage.getAxisService().getObjectSupplier());
}
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.