KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > objectweb > celtix > geronimo > container > GeronimoServerTransport


1 package org.objectweb.celtix.geronimo.container;
2
3 import java.io.IOException JavaDoc;
4 import java.io.Serializable JavaDoc;
5 import java.lang.reflect.Field JavaDoc;
6 import java.util.LinkedList JavaDoc;
7 import java.util.List JavaDoc;
8 import java.util.Map JavaDoc;
9 import java.util.StringTokenizer JavaDoc;
10 import java.util.logging.Logger JavaDoc;
11
12 import javax.wsdl.WSDLException;
13 import javax.xml.ws.handler.MessageContext;
14
15 import org.apache.geronimo.webservices.WebServiceContainer.Request;
16 import org.apache.geronimo.webservices.WebServiceContainer.Response;
17 import org.objectweb.celtix.Bus;
18 import org.objectweb.celtix.bus.transports.http.AbstractHTTPServerTransport;
19 import org.objectweb.celtix.context.OutputStreamMessageContext;
20 import org.objectweb.celtix.transports.ServerTransportCallback;
21 import org.objectweb.celtix.ws.addressing.EndpointReferenceType;
22
23 public class GeronimoServerTransport extends AbstractHTTPServerTransport
24                                      implements Serializable JavaDoc {
25
26     private static final Logger JavaDoc LOG = Logger.getLogger(GeronimoServerTransport.class.getName());
27     
28     public GeronimoServerTransport(Bus bus, EndpointReferenceType address) throws WSDLException, IOException JavaDoc {
29         super(bus, address);
30     }
31     
32     public void invoke(Request request, Response response) {
33         assert callback != null : "callback is null";
34         
35         GeronimoInputStreamMessageContext msgCtx = createInputStreamMessageContext();
36         msgCtx.setRequest(request);
37         msgCtx.setResponse(response);
38         callback.dispatch(msgCtx, this);
39     }
40
41     public void activate(ServerTransportCallback aCallback) throws IOException JavaDoc {
42         LOG.fine("geronimo server transport activating: " + callback);
43         callback = aCallback;
44     }
45
46     public void deactivate() throws IOException JavaDoc {
47         System.out.println("geronimo server transport deactivating");
48     }
49
50     public OutputStreamMessageContext rebase(MessageContext context,
51                                              EndpointReferenceType decoupledResponseEndpoint)
52         throws IOException JavaDoc {
53         // TODO Auto-generated method stub
54
return null;
55     }
56
57     public void postDispatch(MessageContext bindingContext, OutputStreamMessageContext context) {
58         System.out.println("geronimo server transport postDispatch");
59     }
60
61     public void shutdown() {
62         // TODO Auto-generated method stub
63

64     }
65
66     public OutputStreamMessageContext createOutputStreamContext(MessageContext context) throws IOException JavaDoc {
67         return new GeronimoOutputStreamServerMessageContext(context);
68     }
69
70     public void finalPrepareOutputStreamContext(OutputStreamMessageContext context) throws IOException JavaDoc {
71         // do nothing
72
}
73
74     @Override JavaDoc
75     protected void copyRequestHeaders(MessageContext ctx, Map JavaDoc<String JavaDoc, List JavaDoc<String JavaDoc>> headers) {
76         assert ctx instanceof GeronimoInputStreamMessageContext;
77         GeronimoInputStreamMessageContext gctx = (GeronimoInputStreamMessageContext)ctx;
78         Request req = gctx.getRequest();
79         
80         // no map of headers so just find all static field constants that begin with HEADER_, get
81
// its value and get the corresponding header.
82
for (Field JavaDoc field : Request.class.getFields()) {
83             if (field.getName().startsWith("HEADER_")) {
84                 try {
85                     assert field.getType().equals(String JavaDoc.class) : "unexpected field type";
86                     String JavaDoc headerName = (String JavaDoc)field.get(null);
87                     String JavaDoc headerValue = req.getHeader(headerName);
88                     if (headerValue != null) {
89                         List JavaDoc<String JavaDoc> values = headers.get(headerName);
90                         if (values == null) {
91                             values = new LinkedList JavaDoc<String JavaDoc>();
92                             headers.put(headerName, values);
93                         }
94                         values.addAll(splitMultipleHeaderValues(headerValue));
95                     }
96                 } catch (IllegalAccessException JavaDoc ex) {
97                     // ignore
98
}
99             }
100         }
101     }
102     
103     private List JavaDoc<String JavaDoc> splitMultipleHeaderValues(String JavaDoc value) {
104         
105         List JavaDoc<String JavaDoc> allValues = new LinkedList JavaDoc<String JavaDoc>();
106         if (value.contains(",")) {
107             StringTokenizer JavaDoc st = new StringTokenizer JavaDoc(value, ",");
108             while (st.hasMoreTokens()) {
109                 allValues.add(st.nextToken().trim());
110             }
111             
112         } else {
113             allValues.add(value);
114         }
115         return allValues;
116     }
117     
118     
119     protected GeronimoInputStreamMessageContext createInputStreamMessageContext() {
120         return new GeronimoInputStreamMessageContext();
121     }
122
123 }
124
Popular Tags