1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.jackrabbit.webdav.client.methods;
18
19 import org.slf4j.Logger;
20 import org.slf4j.LoggerFactory;
21 import org.apache.commons.httpclient.methods.RequestEntity;
22 import org.apache.commons.httpclient.methods.StringRequestEntity;
23 import org.w3c.dom.Document;
24
25 import java.io.OutputStream;
26 import java.io.IOException;
27 import java.io.ByteArrayOutputStream;
28
29 import javax.xml.transform.OutputKeys;
30 import javax.xml.transform.Transformer;
31 import javax.xml.transform.TransformerException;
32 import javax.xml.transform.TransformerFactory;
33 import javax.xml.transform.dom.DOMSource;
34 import javax.xml.transform.stream.StreamResult;
35
36
37
38
39 public class XmlRequestEntity implements RequestEntity
40 {
41
42 private static Logger log = LoggerFactory.getLogger( XmlRequestEntity.class );
43
44 private final RequestEntity delegatee;
45
46 public XmlRequestEntity( Document xmlDocument ) throws IOException
47 {
48 super();
49 ByteArrayOutputStream out = new ByteArrayOutputStream();
50
51 try
52 {
53 TransformerFactory factory = TransformerFactory.newInstance();
54 Transformer transformer = factory.newTransformer();
55 transformer.setOutputProperty( OutputKeys.METHOD, "xml" );
56 transformer.setOutputProperty( OutputKeys.ENCODING, "UTF-8" );
57 transformer.setOutputProperty( OutputKeys.INDENT, "no" );
58 transformer.transform( new DOMSource( xmlDocument ), new StreamResult( out ) );
59 }
60 catch ( TransformerException e )
61 {
62 log.error( "XML serialization failed", e );
63 IOException exception = new IOException( "XML serialization failed" );
64 exception.initCause( e );
65 throw exception;
66 }
67
68 delegatee = new StringRequestEntity( out.toString(), "text/xml", "UTF-8" );
69 }
70
71 public boolean isRepeatable()
72 {
73 return delegatee.isRepeatable();
74 }
75
76 public String getContentType()
77 {
78 return delegatee.getContentType();
79 }
80
81 public void writeRequest( OutputStream out ) throws IOException
82 {
83 delegatee.writeRequest( out );
84 }
85
86 public long getContentLength()
87 {
88 return delegatee.getContentLength();
89 }
90 }