1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.springframework.ws.support;
18
19 import java.io.IOException;
20 import javax.activation.DataHandler;
21 import javax.xml.transform.Source;
22
23 import org.springframework.oxm.Marshaller;
24 import org.springframework.oxm.Unmarshaller;
25 import org.springframework.oxm.mime.MimeContainer;
26 import org.springframework.oxm.mime.MimeMarshaller;
27 import org.springframework.oxm.mime.MimeUnmarshaller;
28 import org.springframework.ws.WebServiceMessage;
29 import org.springframework.ws.mime.Attachment;
30 import org.springframework.ws.mime.MimeMessage;
31
32
33
34
35
36
37
38 public abstract class MarshallingUtils {
39
40 private MarshallingUtils() {
41 }
42
43
44
45
46
47
48
49
50
51
52
53
54 public static Object unmarshal(Unmarshaller unmarshaller, WebServiceMessage message) throws IOException {
55 Source payload = message.getPayloadSource();
56 if (payload == null) {
57 return null;
58 }
59 else if (unmarshaller instanceof MimeUnmarshaller && message instanceof MimeMessage) {
60 MimeUnmarshaller mimeUnmarshaller = (MimeUnmarshaller) unmarshaller;
61 MimeMessageContainer container = new MimeMessageContainer((MimeMessage) message);
62 return mimeUnmarshaller.unmarshal(payload, container);
63 }
64 else {
65 return unmarshaller.unmarshal(payload);
66 }
67 }
68
69
70
71
72
73
74
75
76
77 public static void marshal(Marshaller marshaller, Object graph, WebServiceMessage message) throws IOException {
78 if (marshaller instanceof MimeMarshaller && message instanceof MimeMessage) {
79 MimeMarshaller mimeMarshaller = (MimeMarshaller) marshaller;
80 MimeMessageContainer container = new MimeMessageContainer((MimeMessage) message);
81 mimeMarshaller.marshal(graph, message.getPayloadResult(), container);
82 }
83 else {
84 marshaller.marshal(graph, message.getPayloadResult());
85 }
86 }
87
88 private static class MimeMessageContainer implements MimeContainer {
89
90 private final MimeMessage mimeMessage;
91
92 public MimeMessageContainer(MimeMessage mimeMessage) {
93 this.mimeMessage = mimeMessage;
94 }
95
96 public boolean isXopPackage() {
97 return mimeMessage.isXopPackage();
98 }
99
100 public boolean convertToXopPackage() {
101 return mimeMessage.convertToXopPackage();
102 }
103
104 public void addAttachment(String contentId, DataHandler dataHandler) {
105 mimeMessage.addAttachment(contentId, dataHandler);
106 }
107
108 public DataHandler getAttachment(String contentId) {
109 Attachment attachment = mimeMessage.getAttachment(contentId);
110 return attachment != null ? attachment.getDataHandler() : null;
111 }
112 }
113
114 }