1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.springframework.ws.pox.dom;
18
19 import java.io.IOException;
20 import java.io.InputStream;
21 import javax.xml.parsers.DocumentBuilder;
22 import javax.xml.parsers.DocumentBuilderFactory;
23 import javax.xml.parsers.ParserConfigurationException;
24 import javax.xml.transform.TransformerConfigurationException;
25
26 import org.springframework.util.Assert;
27 import org.springframework.ws.WebServiceMessageFactory;
28 import org.springframework.xml.transform.TransformerObjectSupport;
29
30 import org.w3c.dom.Document;
31 import org.xml.sax.SAXException;
32
33
34
35
36
37
38
39
40 public class DomPoxMessageFactory extends TransformerObjectSupport implements WebServiceMessageFactory {
41
42
43 public static final String DEFAULT_CONTENT_TYPE = "application/xml";
44
45 private DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
46
47 private String contentType = DEFAULT_CONTENT_TYPE;
48
49 public DomPoxMessageFactory() {
50 documentBuilderFactory.setNamespaceAware(true);
51 documentBuilderFactory.setValidating(false);
52 }
53
54
55 public void setContentType(String contentType) {
56 Assert.hasLength(contentType, "'contentType' must not be empty");
57 this.contentType = contentType;
58 }
59
60
61 public void setNamespaceAware(boolean namespaceAware) {
62 documentBuilderFactory.setNamespaceAware(namespaceAware);
63 }
64
65
66 public void setValidating(boolean validating) {
67 documentBuilderFactory.setValidating(validating);
68 }
69
70 public DomPoxMessage createWebServiceMessage() {
71 try {
72 DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
73 Document request = documentBuilder.newDocument();
74 return new DomPoxMessage(request, createTransformer(), contentType);
75 }
76 catch (ParserConfigurationException ex) {
77 throw new DomPoxMessageException("Could not create message context", ex);
78 }
79 catch (TransformerConfigurationException ex) {
80 throw new DomPoxMessageException("Could not create transformer", ex);
81 }
82 }
83
84 public DomPoxMessage createWebServiceMessage(InputStream inputStream) throws IOException {
85 try {
86 DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
87 Document request = documentBuilder.parse(inputStream);
88 return new DomPoxMessage(request, createTransformer(), contentType);
89 }
90 catch (ParserConfigurationException ex) {
91 throw new DomPoxMessageException("Could not create message context", ex);
92 }
93 catch (SAXException ex) {
94 throw new DomPoxMessageException("Could not parse request message", ex);
95 }
96 catch (TransformerConfigurationException ex) {
97 throw new DomPoxMessageException("Could not create transformer", ex);
98 }
99 }
100 }