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

Reply via email to