OK, I solved my problem. I wrote
...
byte[] bytes = "<?xml version=\"1.0\"
encoding=\"utf-8\"?>".getBytes();
outputStream.write(bytes);
...
instead of
...
PrintWriter out = new PrintWriter(new
OutputStreamWriter(outputStream));
out.println("<?xml version=\"1.0\"
encoding=\"utf-8\"?>");\
...
cheers
2008/12/16 zimny rado <[email protected]>
> Hello Asankha,
>
> I have done your proposed solution, but another problem arrived, this is my
> ApplicationXMLFormatter class:
>
> package razu.synapse;
>
> import org.apache.axiom.om.OMElement;
> import org.apache.axiom.om.OMOutputFormat;
> import org.apache.axiom.soap.SOAP11Constants;
> import org.apache.axiom.soap.SOAP12Constants;
> import org.apache.axiom.soap.SOAPFault;
> import org.apache.axiom.soap.SOAPFaultDetail;
> import org.apache.axis2.AxisFault;
> import org.apache.axis2.Constants;
> import org.apache.axis2.context.MessageContext;
> import org.apache.axis2.transport.MessageFormatter;
> import org.apache.axis2.transport.http.util.URLTemplatingUtil;
> import org.apache.axis2.util.JavaUtils;
> import org.apache.commons.logging.Log;
> import org.apache.commons.logging.LogFactory;
>
> import javax.xml.stream.XMLStreamException;
> import java.io.ByteArrayOutputStream;
> import java.io.FileNotFoundException;
> import java.io.IOException;
> import java.io.OutputStream;
> import java.io.OutputStreamWriter;
> import java.io.PrintWriter;
> import java.net.URL;
>
> public class ApplicationXMLFormatter extends
> org.apache.axis2.transport.http.ApplicationXMLFormatter {
>
> private static final Log log =
> LogFactory.getLog(ApplicationXMLFormatter.class);
>
> @Override
> public void writeTo(MessageContext messageContext, OMOutputFormat
> format,
> OutputStream outputStream, boolean preserve) throws AxisFault {
>
> if (log.isDebugEnabled()) {
> log.debug("start writeTo()");
> }
> try {
> OMElement omElement = null;
>
> if (messageContext.getFLOW() == MessageContext.OUT_FAULT_FLOW)
> {
> SOAPFault fault = messageContext.getEnvelope().getBody()
> .getFault();
> SOAPFaultDetail soapFaultDetail = fault.getDetail();
> if (soapFaultDetail != null) {
> omElement = soapFaultDetail.getFirstElement();
> }
> if (omElement == null) {
> omElement = fault.getReason();
> }
>
> } else {
> omElement = messageContext.getEnvelope().getBody()
> .getFirstElement();
> }
> if (omElement != null) {
> try {
>
> PrintWriter out = new PrintWriter(new
> OutputStreamWriter(outputStream));
> out.println("<?xml version=\"1.0\"
> encoding=\"utf-8\"?>");
>
> if (preserve) {
> omElement.serialize(outputStream, format);
> } else {
> omElement.serializeAndConsume(outputStream,
> format);
> }
> } catch (XMLStreamException e) {
> throw AxisFault.makeFault(e);
> } catch (FileNotFoundException ex) {
> ex.printStackTrace();
> }
> }
> try {
> outputStream.flush();
> } catch (IOException e) {
> throw AxisFault.makeFault(e);
> }
> } finally {
> if (log.isDebugEnabled()) {
> log.debug("end writeTo()");
> }
> }
> }
> }
>
> This is rewrited method from original ApplicationXMLFormatter, I only added
>
> PrintWriter out = new PrintWriter(new
> OutputStreamWriter(outputStream));
> out.println("<?xml version=\"1.0\"
> encoding=\"utf-8\"?>");
>
> I created JAR with this class and copy it to /lib directory
>
> Another thing to do was change axis2.xml :
>
> ...
> <messageFormatter contentType="application/xml"
> class="razu.synapse.ApplicationXMLFormatter"/>
> ...
>
> My class is used by Apache Synapse, but output XML is still without XML
> header.
>
> Have you any idea what I done wrong?
>
>
>
> 2008/12/16 Asankha C. Perera <[email protected]>
>
> Hi Zimny
>>
>>> ...
>>> <soapenv:Body xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
>>> <name>RAZU</name>
>>> </soapenv:Body>
>>> ...
>>>
>>> and only <name>RAZU</name> is send to extenal service, but I need to
>>> send:
>>>
>>> <?xml version="1.0"?>
>>> <name>RAZU</name>
>>>
>>> What is your suggestions?
>>>
>>>
>> Usually the XML declaration is not sent, nor expected.. One solution is to
>> extend the message formatter to include the declaration..
>>
>> cheers
>> asankha
>>
>> --
>> Asankha C. Perera
>> http://adroitlogic.org
>>
>> http://esbmagic.blogspot.com
>>
>>
>