I've set up a SOAP WebServiceProvider in JAX-WS, but I'm having trouble figuring out how to get the raw XML from a SOAPMessage (or any Node) object. Here's a sample of the code I've got right now, and where I'm trying to grab the XML:
@WebServiceProvider(wsdlLocation="SoapService.wsdl")
@ServiceMode(value=Service.Mode.MESSAGE)
public class SoapProvider implements Provider<SOAPMessage>
{
public SOAPMessage invoke(SOAPMessage msg)
{
// How do I get the raw XML here?
}
}
Is there a simple way to get the XML of the original request? If there's a way to get the raw XML by setting up a different type of Provider (such as Source), I'd be willing to do that, too.
Using Transformer Factory:-
for just debugging purpose, use one line code -
msg.writeTo(System.out);
If you need formatting the xml string to xml, try this:
You could try in this way.
It turns out that one can get the raw XML by using Provider<Source>, in this way:
I've ended up not needing this solution, so I haven't actually tried this code myself - it might need some tweaking to get right. But I know this is the right path to go down to get the raw XML from a web service.
(I'm not sure how to make this work if you absolutely must have a SOAPMessage object, but then again, if you're going to be handling the raw XML anyways, why would you use a higher-level object?)
If you have a
SOAPMessage
orSOAPMessageContext
, you can use aTransformer
, by converting it to aSource
viaDOMSource
:This will take the encoding into account, so your "special characters" won't get mangled.