[
https://issues.apache.org/jira/browse/CAMEL-4480?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Rich Newcomb updated CAMEL-4480:
--------------------------------
Attachment: camel-4480-trunk.patch
The attached patch expands the multi-part unit test suite to demonstrates the
behavior described in this issue.
The patch also provides a potential fix for the issue.
Note that the solution recommended in the original issue description will not
work. That solution would cause parameters that are reused across multiple web
methods to be rejected with an error.
An alternative solution (as implemented in the patch) is as follows:
1. Change the behavior of the ServiceInterfaceStrategy to log a WARN message in
the case where a new QName mapping would override an existing mapping. The
new mapping will be ignored after the warning.
2. Move the QName + dataType uniqueness enforcement to the @WebMethod level
The warning is an appropriate alternative to the current error. The
ServiceInterfaceStrategy.findQNameForSoapActionOrType(…) operation _could_
return an unexpected value when a dataType is reused within the interface with
a different QName; however, this risk is fully mitigated when calling
findQNameForSoapActionOrType(…) with a valid soapAction that uniquely
identifies the target @WebMethod on the service. At that point the MethodInfo
class is queried for the type-to-QName mapping for the method, and the results
will be as expected.
> RuntimeCamelException "Ambiguous Parameter Mapping" must not be thrown, if
> there are parameters of the same type but with different QNames in
> ServiceInterfaceStrategy
> ----------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
> Key: CAMEL-4480
> URL: https://issues.apache.org/jira/browse/CAMEL-4480
> Project: Camel
> Issue Type: Bug
> Components: camel-soap
> Affects Versions: 2.8.1
> Reporter: Oliver Jelinski
> Assignee: Rich Newcomb
> Attachments: camel-4480-trunk.patch
>
>
> In different WebMethods I have parameters of the same type, but with
> different QNames. The following if-clause (in
> ServiceInterfaceStrategy.analyzeServiceInterface(..)) throws an exeption in
> these cases (thrown if NOT QNameOfMethod1 equals QNameOfMethod2), but it
> should on the contrary throw an exception if the QNames ARE equal:
> if (inTypeNameToQName.containsKey(ti.getTypeName())
> && (!(ti.getTypeName().equals("javax.xml.ws.Holder")))
> &&
> (!(inTypeNameToQName.get(ti.getTypeName()).equals(ti.getElName())))) {
> throw new RuntimeCamelException("Ambiguous parameter
> mapping. The type [ "
> + ti.getTypeName()
> + " ] is already mapped
> to a QName in this context.");
> }
> The "NOT" must be deleted:
> ...
> && (inTypeNameToQName.get(ti.getTypeName()).equals(ti.getElName())))
> ...
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira