From my own POV this is non-urgent now - I've wrappered Dispatch in another class that forks a second thread to change the context AND do the invoke. Code available if anyone wants it as a workaround, but I don't think it's patch material.

Cheers,

Andrew.


On 11 Mar 2009, at 20:41, Daniel Kulp <[email protected]> wrote:



I'm going to dump this in with:
https://issues.apache.org/jira/browse/CXF-1907

Ideally, the Dispatch would be wrappering a ClientImpl and just use the context support in there instead of doing it's own version of it (and doing it wrongly). CXF-1907 is on my current "todo" list for early April, but
subject to change.

Dan


On Tue March 10 2009 1:31:35 pm Andrew Clegg wrote:
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 <[email protected]>:
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 <[email protected]>:
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-tp21925398
p22438203.html Sent from the cxf-user mailing list archive at Nabble.com.

--

:: http://biotext.org.uk/ ::

--
Daniel Kulp
[email protected]
http://www.dankulp.com/blog

Reply via email to