1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.opensaml.ws.message.encoder;
18
19 import org.opensaml.ws.message.MessageContext;
20 import org.opensaml.xml.Configuration;
21 import org.opensaml.xml.XMLObject;
22 import org.opensaml.xml.io.Marshaller;
23 import org.opensaml.xml.io.MarshallingException;
24 import org.opensaml.xml.util.XMLHelper;
25 import org.slf4j.Logger;
26 import org.slf4j.LoggerFactory;
27 import org.w3c.dom.Element;
28
29
30
31
32 public abstract class BaseMessageEncoder implements MessageEncoder {
33
34
35 private Logger protocolMessageLog = LoggerFactory.getLogger("PROTOCOL_MESSAGE");
36
37
38 private final Logger log = LoggerFactory.getLogger(BaseMessageEncoder.class);
39
40
41 public BaseMessageEncoder() {
42
43 }
44
45
46 public void encode(MessageContext messageContext) throws MessageEncodingException {
47 log.debug("Beginning encode message to outbound transport of type: {}", messageContext
48 .getOutboundMessageTransport().getClass().getName());
49
50 doEncode(messageContext);
51
52 logEncodedMessage(messageContext);
53
54 log.debug("Successfully encoded message.");
55 }
56
57
58
59
60
61
62 protected void logEncodedMessage(MessageContext messageContext) {
63 if(protocolMessageLog.isDebugEnabled() && messageContext.getOutboundMessage() != null){
64 protocolMessageLog.debug("\n" + XMLHelper.prettyPrintXML(messageContext.getOutboundMessage().getDOM()));
65 }
66 }
67
68
69
70
71
72
73
74
75 protected abstract void doEncode(MessageContext messageContext) throws MessageEncodingException;
76
77
78
79
80
81
82
83
84
85
86 protected Element marshallMessage(XMLObject message) throws MessageEncodingException {
87 log.debug("Marshalling message");
88
89 try {
90 Marshaller marshaller = Configuration.getMarshallerFactory().getMarshaller(message);
91 if (marshaller == null) {
92 log.error("Unable to marshall message, no marshaller registered for message object: "
93 + message.getElementQName());
94 }
95 Element messageElem = marshaller.marshall(message);
96 if (log.isTraceEnabled()) {
97 log.trace("Marshalled message into DOM:\n{}", XMLHelper.nodeToString(messageElem));
98 }
99 return messageElem;
100 } catch (MarshallingException e) {
101 log.error("Encountered error marshalling message to its DOM representation", e);
102 throw new MessageEncodingException("Encountered error marshalling message into its DOM representation", e);
103 }
104 }
105 }