So while we continue to discuss simplifying the wrapped vs. bare calculation/naming, I coded my own version of Sebastien's tweak to make this work, but instead of succeeding, I ran into another issue we hadn't mentioned.
In running Simon's currently @Ignore(d) async bare test case (I ran Simon's, not Sebastien's version), I hit an ArrayIndexOutOfBoundsException in MediatorImpl.copyInput going from the two-input bare interface to the single-input wrapped interface. So at first, the solution would seem to be to add some intelligence to the MediatorImpl.copyInput/Output methods... For example, the InterfaceContractMapperImpl has logic like: if (source.isWrapperStyle() && source.getWrapper() != null) { sourceInputType = source.getWrapper().getUnwrappedInputType().getLogical(); to allow us to compare the unwrapped form a wrapped interface in detecting that the interface mapping is even valid in the first place. But let me stop and ask...doesn't a better solution seem to be to realize that we don't have to do a copy.. that we've already done one in the DataTransformationInterceptor on the path from the implementation to the reference-side binding? Or is that "hard" to figure out? It seems we would need the logic dealing with wrapping/unwrapping in the MediatorImpl.copyXXX if we wanted to say that we could have bare vs. wrapped on the reference vs. service interfaces. But I'm thinking we don't think we support that. I apologize if this is rehashing recent conversations that I missed... but figured I'd just ask. For reference here's the stack trace I ended up on before hitting the problem.. (and I could also post my patch to help anyone take a look at that if you want...just let me know) MediatorImpl.copyInput(Object, Operation, Operation) line: 564 SCABindingInvoker.processRequest(Message) line: 84 SCABindingInvoker(InterceptorAsyncImpl).invoke(Message) line: 57 DataTransformationInterceptor(InterceptorAsyncImpl).invoke(Message) line: 58 RuntimeInvoker.invoke(InvocationChain, Message) line: 125 RuntimeInvoker.invoke(Operation, Message) line: 108 RuntimeInvoker.invoke(Operation, Object[]) line: 97 RuntimeEndpointReferenceImpl.invoke(Operation, Object[]) line: 243 SampleWSDLProxy.callBare(String, Element...) line: 74 UpperSampleAsyncReferenceBareImpl.upper(String) line: 62 ... snip ... $Proxy9.upper(String) line: not available SampleNativeAsyncBareTestCase.testReference() line: 61 Thanks, Scott