1 package org.objectweb.celtix.geronimo.container; 2 3 import java.io.IOException ; 4 import java.io.Serializable ; 5 import java.lang.reflect.Field ; 6 import java.util.LinkedList ; 7 import java.util.List ; 8 import java.util.Map ; 9 import java.util.StringTokenizer ; 10 import java.util.logging.Logger ; 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 { 25 26 private static final Logger LOG = Logger.getLogger(GeronimoServerTransport.class.getName()); 27 28 public GeronimoServerTransport(Bus bus, EndpointReferenceType address) throws WSDLException, IOException { 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 { 42 LOG.fine("geronimo server transport activating: " + callback); 43 callback = aCallback; 44 } 45 46 public void deactivate() throws IOException { 47 System.out.println("geronimo server transport deactivating"); 48 } 49 50 public OutputStreamMessageContext rebase(MessageContext context, 51 EndpointReferenceType decoupledResponseEndpoint) 52 throws IOException { 53 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 64 } 65 66 public OutputStreamMessageContext createOutputStreamContext(MessageContext context) throws IOException { 67 return new GeronimoOutputStreamServerMessageContext(context); 68 } 69 70 public void finalPrepareOutputStreamContext(OutputStreamMessageContext context) throws IOException { 71 } 73 74 @Override 75 protected void copyRequestHeaders(MessageContext ctx, Map <String , List <String >> headers) { 76 assert ctx instanceof GeronimoInputStreamMessageContext; 77 GeronimoInputStreamMessageContext gctx = (GeronimoInputStreamMessageContext)ctx; 78 Request req = gctx.getRequest(); 79 80 for (Field field : Request.class.getFields()) { 83 if (field.getName().startsWith("HEADER_")) { 84 try { 85 assert field.getType().equals(String .class) : "unexpected field type"; 86 String headerName = (String )field.get(null); 87 String headerValue = req.getHeader(headerName); 88 if (headerValue != null) { 89 List <String > values = headers.get(headerName); 90 if (values == null) { 91 values = new LinkedList <String >(); 92 headers.put(headerName, values); 93 } 94 values.addAll(splitMultipleHeaderValues(headerValue)); 95 } 96 } catch (IllegalAccessException ex) { 97 } 99 } 100 } 101 } 102 103 private List <String > splitMultipleHeaderValues(String value) { 104 105 List <String > allValues = new LinkedList <String >(); 106 if (value.contains(",")) { 107 StringTokenizer st = new StringTokenizer (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 |