KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > objectweb > celtix > bindings > Request


1 package org.objectweb.celtix.bindings;
2
3 import java.io.IOException JavaDoc;
4
5 import javax.xml.ws.handler.MessageContext;
6
7 import org.objectweb.celtix.context.ObjectMessageContext;
8 import org.objectweb.celtix.context.OutputStreamMessageContext;
9 import org.objectweb.celtix.handlers.HandlerInvoker;
10 import org.objectweb.celtix.transports.Transport;
11
12 public class Request {
13     
14     private final AbstractBindingBase binding;
15     private Transport transport;
16     private final ObjectMessageContext objectCtx;
17     private MessageContext bindingCtx;
18     private final HandlerInvoker handlerInvoker;
19     private boolean expectRelatedRequest;
20
21     public Request(AbstractBindingBase b, Transport t, ObjectMessageContext o) {
22         binding = b;
23         objectCtx = o;
24
25         transport = t;
26         if (transport == null) {
27             transport = b.retrieveTransport();
28         }
29
30         handlerInvoker = binding.createHandlerInvoker();
31
32         objectCtx.put(ObjectMessageContext.MESSAGE_INPUT, Boolean.FALSE);
33         setOneway(false);
34     }
35     
36     public String JavaDoc getCorrelationId() {
37         return (String JavaDoc)objectCtx.get(ObjectMessageContext.CORRELATION_OUT);
38     }
39
40     public AbstractBindingBase getBinding() {
41         return binding;
42     }
43     
44     public Transport getTransport() {
45         return transport;
46     }
47     
48     public HandlerInvoker getHandlerInvoker() {
49         return handlerInvoker;
50     }
51     
52     public ObjectMessageContext getObjectMessageContext() {
53         return objectCtx;
54     }
55     
56     public MessageContext getBindingContext() {
57         return bindingCtx;
58     }
59
60     public final void setOneway(boolean oneWay) {
61         objectCtx.put(OutputStreamMessageContext.ONEWAY_MESSAGE_TF, oneWay);
62     }
63     
64     public final boolean isOneway() {
65         return ((Boolean JavaDoc)objectCtx.get(OutputStreamMessageContext.ONEWAY_MESSAGE_TF)).booleanValue();
66     }
67
68     public OutputStreamMessageContext process(OutputStreamMessageContext ostreamCtx) throws IOException JavaDoc {
69         return process(ostreamCtx, false);
70     }
71     
72     public OutputStreamMessageContext process(OutputStreamMessageContext ostreamCtx,
73                                               boolean logicalChainTraversed)
74         throws IOException JavaDoc {
75         return process(ostreamCtx, logicalChainTraversed, false);
76     }
77     
78     public OutputStreamMessageContext process(OutputStreamMessageContext ostreamCtx,
79                                               boolean logicalChainTraversed,
80                                               boolean protocolChainTraversed)
81         throws IOException JavaDoc {
82         if (logicalChainTraversed
83             || handlerInvoker.invokeLogicalHandlers(true, objectCtx)) {
84             bindingCtx = binding.getBindingImpl().createBindingMessageContext(objectCtx);
85             bindingCtx.put(ObjectMessageContext.MESSAGE_INPUT, Boolean.FALSE);
86             
87             if (null == bindingCtx) {
88                 bindingCtx = objectCtx;
89             } else if (!protocolChainTraversed) {
90                 DataBindingCallback callback = BindingContextUtils.retrieveDataBindingCallback(objectCtx);
91                 binding.getBindingImpl().marshal(objectCtx, bindingCtx, callback);
92             }
93
94             if (protocolChainTraversed
95                 || handlerInvoker.invokeProtocolHandlers(true, bindingCtx)) {
96                 binding.getBindingImpl().updateMessageContext(bindingCtx);
97                 if (ostreamCtx == null) {
98                     ostreamCtx = transport.createOutputStreamContext(bindingCtx);
99                 }
100                 
101                 handlerInvoker.invokeStreamHandlers(ostreamCtx);
102                
103                 transport.finalPrepareOutputStreamContext(ostreamCtx);
104
105                 binding.getBindingImpl().write(bindingCtx, ostreamCtx);
106                 
107                 return ostreamCtx;
108             } else if (!isOneway()) {
109                 handlerInvoker.invokeProtocolHandlers(true, bindingCtx);
110                 bindingCtx.put(ObjectMessageContext.MESSAGE_INPUT, Boolean.TRUE);
111             }
112         } else if (!isOneway()) {
113             objectCtx.put(ObjectMessageContext.MESSAGE_INPUT, Boolean.TRUE);
114             handlerInvoker.invokeLogicalHandlers(true, objectCtx);
115         }
116         return null;
117     }
118
119     public void complete() {
120         handlerInvoker.mepComplete(objectCtx);
121     }
122     
123     public void expectRelatedRequest() {
124         expectRelatedRequest = true;
125     }
126
127     public boolean isRelatedRequestExpected() {
128         return expectRelatedRequest;
129     }
130 }
131
Popular Tags