1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.springframework.ws.transport.support;
18
19 import java.net.URISyntaxException;
20
21 import org.springframework.beans.factory.InitializingBean;
22 import org.springframework.util.Assert;
23 import org.springframework.ws.FaultAwareWebServiceMessage;
24 import org.springframework.ws.NoEndpointFoundException;
25 import org.springframework.ws.WebServiceMessage;
26 import org.springframework.ws.WebServiceMessageFactory;
27 import org.springframework.ws.context.DefaultMessageContext;
28 import org.springframework.ws.context.MessageContext;
29 import org.springframework.ws.transport.EndpointAwareWebServiceConnection;
30 import org.springframework.ws.transport.FaultAwareWebServiceConnection;
31 import org.springframework.ws.transport.WebServiceConnection;
32 import org.springframework.ws.transport.WebServiceMessageReceiver;
33 import org.springframework.ws.transport.context.DefaultTransportContext;
34 import org.springframework.ws.transport.context.TransportContext;
35 import org.springframework.ws.transport.context.TransportContextHolder;
36
37 import org.apache.commons.logging.Log;
38 import org.apache.commons.logging.LogFactory;
39
40
41
42
43
44
45
46
47
48 public abstract class WebServiceMessageReceiverObjectSupport implements InitializingBean {
49
50
51 protected final Log logger = LogFactory.getLog(getClass());
52
53 private WebServiceMessageFactory messageFactory;
54
55
56 public WebServiceMessageFactory getMessageFactory() {
57 return messageFactory;
58 }
59
60
61 public void setMessageFactory(WebServiceMessageFactory messageFactory) {
62 this.messageFactory = messageFactory;
63 }
64
65 public void afterPropertiesSet() throws Exception {
66 Assert.notNull(messageFactory, "messageFactory is required");
67 }
68
69
70
71
72
73
74
75
76
77
78
79 protected final void handleConnection(WebServiceConnection connection, WebServiceMessageReceiver receiver)
80 throws Exception {
81 logUri(connection);
82 TransportContext previousTransportContext = TransportContextHolder.getTransportContext();
83 TransportContextHolder.setTransportContext(new DefaultTransportContext(connection));
84
85 try {
86 WebServiceMessage request = connection.receive(getMessageFactory());
87 MessageContext messageContext = new DefaultMessageContext(request, getMessageFactory());
88 receiver.receive(messageContext);
89 if (messageContext.hasResponse()) {
90 WebServiceMessage response = messageContext.getResponse();
91 if (response instanceof FaultAwareWebServiceMessage &&
92 connection instanceof FaultAwareWebServiceConnection) {
93 FaultAwareWebServiceMessage faultResponse = (FaultAwareWebServiceMessage) response;
94 FaultAwareWebServiceConnection faultConnection = (FaultAwareWebServiceConnection) connection;
95 faultConnection.setFault(faultResponse.hasFault());
96 }
97 connection.send(messageContext.getResponse());
98 }
99 }
100 catch (NoEndpointFoundException ex) {
101 if (connection instanceof EndpointAwareWebServiceConnection) {
102 ((EndpointAwareWebServiceConnection) connection).endpointNotFound();
103 }
104 }
105 finally {
106 TransportUtils.closeConnection(connection);
107 TransportContextHolder.setTransportContext(previousTransportContext);
108 }
109 }
110
111 private void logUri(WebServiceConnection connection) {
112 if (logger.isDebugEnabled()) {
113 try {
114 logger.debug("Accepting incoming [" + connection + "] at [" + connection.getUri() + "]");
115 }
116 catch (URISyntaxException e) {
117
118 }
119 }
120 }
121
122 }