KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > objectweb > celtix > bus > transports > http > AbstractHTTPRequestorOutputStreamContext


1 package org.objectweb.celtix.bus.transports.http;
2
3 import java.io.BufferedOutputStream JavaDoc;
4 import java.io.ByteArrayOutputStream JavaDoc;
5 import java.io.FilterOutputStream JavaDoc;
6 import java.io.IOException JavaDoc;
7 import java.io.OutputStream JavaDoc;
8 import java.net.HttpURLConnection JavaDoc;
9 import java.net.URL JavaDoc;
10 import java.net.URLConnection JavaDoc;
11 import java.util.HashMap JavaDoc;
12 import java.util.List JavaDoc;
13 import java.util.Map JavaDoc;
14
15 import javax.xml.ws.handler.MessageContext;
16
17 import org.objectweb.celtix.bus.transports.http.HTTPClientTransport.HTTPClientInputStreamContext;
18 import org.objectweb.celtix.bus.ws.addressing.ContextUtils;
19 import org.objectweb.celtix.context.InputStreamMessageContext;
20 import org.objectweb.celtix.context.MessageContextWrapper;
21 import org.objectweb.celtix.context.OutputStreamMessageContext;
22 import org.objectweb.celtix.ws.addressing.EndpointReferenceType;
23
24 public abstract class AbstractHTTPRequestorOutputStreamContext
25     extends MessageContextWrapper
26     implements OutputStreamMessageContext {
27
28     URLConnection JavaDoc connection;
29     WrappedOutputStream origOut;
30     OutputStream JavaDoc out;
31     HTTPClientInputStreamContext inputStreamContext;
32
33     @SuppressWarnings JavaDoc("unchecked")
34     public AbstractHTTPRequestorOutputStreamContext(MessageContext ctx)
35         throws IOException JavaDoc {
36         super(ctx);
37
38         Map JavaDoc<String JavaDoc, List JavaDoc<String JavaDoc>> headers = (Map JavaDoc<String JavaDoc, List JavaDoc<String JavaDoc>>)super.get(HTTP_REQUEST_HEADERS);
39         if (null == headers) {
40             headers = new HashMap JavaDoc<String JavaDoc, List JavaDoc<String JavaDoc>>();
41             super.put(HTTP_REQUEST_HEADERS, headers);
42         }
43
44         EndpointReferenceType to = ContextUtils.retrieveTo(ctx);
45         if (to != null && to.getAddress() != null) {
46             URL JavaDoc url = new URL JavaDoc(to.getAddress().getValue());
47             connection = getConnection(url);
48             connection.setDoOutput(true);
49     
50             if (connection instanceof HttpURLConnection JavaDoc) {
51                 HttpURLConnection JavaDoc hc = (HttpURLConnection JavaDoc)connection;
52                 hc.setRequestMethod("POST");
53             }
54         }
55         origOut = new WrappedOutputStream();
56         out = origOut;
57     }
58     
59     protected abstract URLConnection JavaDoc getConnection(URL JavaDoc url) throws IOException JavaDoc;
60
61     @SuppressWarnings JavaDoc("unchecked")
62     void flushHeaders() throws IOException JavaDoc {
63         Map JavaDoc<String JavaDoc, List JavaDoc<String JavaDoc>> headers = (Map JavaDoc<String JavaDoc, List JavaDoc<String JavaDoc>>)super.get(HTTP_REQUEST_HEADERS);
64         if (null != headers) {
65             for (String JavaDoc header : headers.keySet()) {
66                 List JavaDoc<String JavaDoc> headerList = headers.get(header);
67                 for (String JavaDoc string : headerList) {
68                     connection.addRequestProperty(header, string);
69                 }
70             }
71         }
72         connection.addRequestProperty("Content-Type", "text/xml");
73         origOut.resetOut(new BufferedOutputStream JavaDoc(connection.getOutputStream(), 1024));
74     }
75
76     public void setFault(boolean isFault) {
77         //nothing to do
78
}
79
80     public boolean isFault() {
81         return false;
82     }
83
84     public void setOneWay(boolean isOneWay) {
85         put(ONEWAY_MESSAGE_TF, isOneWay);
86     }
87
88     public boolean isOneWay() {
89         return ((Boolean JavaDoc)get(ONEWAY_MESSAGE_TF)).booleanValue();
90     }
91
92     public OutputStream JavaDoc getOutputStream() {
93         return out;
94     }
95
96     public void setOutputStream(OutputStream JavaDoc o) {
97         out = o;
98     }
99
100     public InputStreamMessageContext getCorrespondingInputStreamContext() throws IOException JavaDoc {
101         if (inputStreamContext == null) {
102             inputStreamContext = new HTTPClientInputStreamContext(connection);
103         }
104         return inputStreamContext;
105     }
106
107     private class WrappedOutputStream extends FilterOutputStream JavaDoc {
108         WrappedOutputStream() {
109             super(new ByteArrayOutputStream JavaDoc());
110         }
111         void resetOut(OutputStream JavaDoc newOut) throws IOException JavaDoc {
112             ByteArrayOutputStream JavaDoc bout = (ByteArrayOutputStream JavaDoc)out;
113             if (bout.size() > 0) {
114                 bout.writeTo(newOut);
115             }
116             out = newOut;
117         }
118
119
120         public void close() throws IOException JavaDoc {
121             out.flush();
122             if (inputStreamContext != null) {
123                 inputStreamContext.initialise();
124             }
125         }
126     }
127 }
128
Popular Tags