[ 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