Actually, with any recent version of CXF, it's a bit easier. You just need to configure in a property:
"org.apache.cxf.stax.force-start-document" with a Boolean.TRUE instance. That's a bit tricky to do with Spring so I'm going to make a minor change for 2.2.10 that will allow the "true" string to be used. Dan On Saturday 07 August 2010 12:10:27 am Rich Newcomb wrote: > This question was answered by Dan Kulp in 2007: > > http://cxf.547215.n5.nabble.com/Responses-don-t-get-xml-tag-and-encoding-ty > pe-td551777.html#a551777 > > Things may have changed a little since then; however, I put together a > quick implementation of the interceptor Dan suggested, and it works as > described. > > Here's the Java code for the interceptor: > > public class XMLDefinitionWriter extends AbstractSoapInterceptor { > > public XMLDefinitionWriter() { > super(Phase.PRE_STREAM); > addAfter(StaxOutInterceptor.class.getName()); > } > > @Override > public void handleMessage(SoapMessage message) throws Fault { > try { > OutputStream os = message.getContent(OutputStream.class); > XMLStreamWriter writer = > message.getContent(XMLStreamWriter.class); > String encoding = (String)message.get(Message.ENCODING); > writer.writeStartDocument(encoding, "1.0"); > } catch (XMLStreamException e) { > // TODO Auto-generated catch block > e.printStackTrace(); > } > } > } > > > Note that if you need such an interceptor, you should probably add it > to both the JAX-WS Out Interceptors and Out Fault Interceptors. > > On Fri, Aug 6, 2010 at 2:51 PM, wascjg <[email protected]> wrote: > > I’m rewriting a Web service in Java (originally .NET). > > > > I’m having an issue where the returned SOAP envelope returned is not > > coming back with an XML Declaration <?xml version="1.0" > > encoding="UTF-8"?> > > > > Normally this would not be an issue but the .NET client to the Web > > Service is lame and it expects that XML Declaration. Because there is > > no declaration, the client code crashes. Because the .NET client can’t > > change, there’s no simple fix there. > > > > Is there any way to tell CXF to include the XML Declaration when the Web > > Service gets called? > > > > I tried creating a JAX-WS Handler which included the following section of > > code, and this code gets printed out in System.out correctly, but somehow > > the XML declaration never makes it to TCPMON. > > > > public boolean handleMessage(SOAPMessageContext > > soapMessageContext) { > > Boolean outboundProperty = (Boolean) soapMessageContext > > .get(MessageContext.MESSAGE_OUTBOUND_PROPERTY); > > > > SOAPMessage message = soapMessageContext.getMessage(); > > if (outboundProperty.booleanValue()) > > { > > try > > { > > > > message.setProperty(SOAPMessage.WRITE_XML_DECLARATION, "true"); > > soapMessageContext.setMessage(message); > > soapMessageContext.getMessage().writeTo(System.out); } > > > > catch (Exception e) > > { > > > > } > > } > > return true; > > } > > > > > > Below is the TCPMON logs of what is being requested and returned: > > REQUEST > > POST /SpmlProvisioningService/SPMLHandler.asmx HTTP/1.1 > > Content-Type: text/xml; charset=UTF-8 > > User-Agent: SPMLClient > > Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2 > > SOAPAction: SPMLLookupRequest > > Host: localhost:1111 > > Content-Length: 364 > > Expect: 100-continue > > Connection: Keep-Alive > > > > <?xml version="1.0" encoding="UTF-8"?><SOAP-ENV:Envelope > > xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Head > > er/><SOAP-ENV:Body><spml:lookupRequest returnData="everything" > > requestID="984" > > xmlns:spml="urn:oasis:names:tc:SPML:2:0"><psoID ID="11223344" > > targetID="123" eaHIDBadgeID="123" > > /></spml:lookupRequest></SOAP-ENV:Body></SOAP-ENV:Envelope> > > > > > > RESPONSE > > HTTP/1.1 100 Continue > > > > HTTP/1.1 200 OK > > Server: Apache-Coyote/1.1 > > Content-Type: text/xml;charset=UTF-8 > > Content-Length: 442 > > Date: Fri, 06 Aug 2010 13:03:36 GMT > > > > <!-- NOTE NO XML DECLARATION --> > > <soap:Envelope > > xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><SPMLLo > > okupRequestResult xmlns="urn:oasis:names:tc:SPML:2:0"><?xml > > version="1.0" > > encoding="UTF-8"?><lookupResponse > > status="success" > > xmlns="urn:oasis:names:tc:SPML:2:0"><pso><psoID > > ID="1122334455" > > /></pso></lookupResponse></SPMLLookupRequestResult></soap: > > Body></soap:Envelope> > > > > Thanks, > > James > > > > -- > > View this message in context: > > http://cxf.547215.n5.nabble.com/XML-Declaration-not-being-added-in-SOAP- > > Response-tp2266979p2266979.html Sent from the cxf-user mailing list > > archive at Nabble.com. -- Daniel Kulp [email protected] http://dankulp.com/blog
