Branko, thanks for your help, I've got a theory about what might be causing this.
CXF gurus -- I've noticed that the request context in BindingProviderImpl is stored in a ThreadLocal. I'm adding something to a DispatchImpl's request context, and then calling its invokeAsync method, therefore it's being invoked in a different thread. Correct me if I'm wrong, but doesn't this mean that an asynchronously invoked Dispatch will *never* be able to see the same request context that it was set up with? I tried this, extrapolating in reverse from the FAQ: _dispatch.getRequestContext().put( "thread.local.request.context", "false" ); but it made no difference. Thanks, Andrew. 2009/3/10 Andrew Clegg <and...@nervechannel.com>: > I don't get it... How does building the XML payload differently mean > you get a SOAPAction header? Or do you mean, when you do it this way, > you don't need a SOAPAction header? > > In my case, I absolutely need a SOAPAction header matching the WSDL, > because it's some weird Perl service implementation, and this: > > _dispatch.getRequestContext().put( > BindingProvider.SOAPACTION_USE_PROPERTY, Boolean.TRUE ); > _dispatch.getRequestContext().put( > BindingProvider.SOAPACTION_URI_PROPERTY, "the action URI" ); > > isn't making *any* difference at all :-( > > No matter how I try to rephrase it, Wireshark just shows: > > SOAPAction: "" > > in the outbound request, and the remote service throws an error. I > have debugged into the code to some extent and those put() calls are > definitely taking place. > > Sorry, I know your problem was a little different from mine, but I was > really hoping you'd figured out what the right magic words were :-) > > Andrew. > > 2009/3/10 xbranko <xbra...@netscape.net>: >> >> >> Andrew Clegg-2 wrote: >>> >>> I just found this message from last month... >>> >>> How did you get the SOAPAction header thing to work in the end? I have >>> >>> >> >> I couldn't get the action to appear either, so finally this is what I ended >> up with: >> >> try >> { >> String xmlPayload = "<yourXML>...</yourXML>"; >> >> Service service = Service.create(new URL(wsdl), SERVICE_NAME); >> InputStream is = new ByteArrayInputStream(xmlPayload.getBytes()); >> SOAPMessage message = MessageFactory.newInstance().createMessage(null, >> is); >> DOMSource request = new >> DOMSource(message.getSOAPBody().extractContentAsDocument()); >> >> Dispatch<DOMSource> disp = service.createDispatch(PORT_NAME, >> DOMSource.class, Service.Mode.PAYLOAD); >> DOMSource result = disp.invoke(request); >> DOMResult domResponse = new DOMResult(); >> Transformer trans = TransformerFactory.newInstance().newTransformer(); >> trans.transform(result, domResponse); >> } >> catch(Exception e) >> { >> e.printStackTrace(); >> } >> >> Ideally, the CXF team would implement an annotation for parameter (say >> @NoEncoding) that would just pass the content as is, i.e. without any XML >> character encoding. Hey CXF team -- how about that? >> -- >> View this message in context: >> http://www.nabble.com/Sending-XML-payload-without-encoding-it-tp21925398p22438203.html >> Sent from the cxf-user mailing list archive at Nabble.com. >> >> > > > > -- > :: http://biotext.org.uk/ :: > -- :: http://biotext.org.uk/ ::