1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.kuali.ole.module.purap.util.cxml;
17
18 import org.apache.log4j.Logger;
19 import org.apache.xml.serialize.OutputFormat;
20 import org.apache.xml.serialize.XMLSerializer;
21 import org.kuali.ole.sys.batch.service.BatchInputFileService;
22 import org.kuali.ole.sys.context.SpringContext;
23 import org.w3c.dom.Document;
24 import org.w3c.dom.Element;
25 import org.w3c.dom.Node;
26
27 import javax.xml.parsers.DocumentBuilder;
28 import javax.xml.parsers.DocumentBuilderFactory;
29 import javax.xml.parsers.ParserConfigurationException;
30 import java.io.ByteArrayInputStream;
31 import java.io.ByteArrayOutputStream;
32 import java.io.IOException;
33
34 public class B2BParserHelper {
35
36 private static Logger log = Logger.getLogger(B2BParserHelper.class);
37
38 private DocumentBuilder builder;
39 private static B2BParserHelper _this;
40
41 private B2BParserHelper() {
42
43 DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
44 builderFactory.setValidating(false);
45 builderFactory.setIgnoringElementContentWhitespace(true);
46
47 try {
48
49
50
51
52
53 builderFactory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
54
55 builder = builderFactory.newDocumentBuilder();
56 } catch (ParserConfigurationException e) {
57 throw new RuntimeException(e);
58 }
59
60 }
61
62 public static B2BParserHelper getInstance() {
63 if (_this == null) {
64 _this = new B2BParserHelper();
65 }
66 return _this;
67 }
68
69 public synchronized B2BShoppingCart parseShoppingCartXML(String xmlChunk) {
70
71 Document xmlDoc = null;
72 try {
73 xmlDoc = builder.parse(new ByteArrayInputStream(xmlChunk.getBytes()));
74 } catch (Exception e) {
75 e.printStackTrace();
76 throw new RuntimeException(e);
77 }
78
79 byte[] xmlDocAsBytes = addXMLNameSpace(xmlDoc, "http://www.kuali.org/ole/purap/b2bPunchOutOrder");
80
81 B2BPunchOutOrderFileType fileType = SpringContext.getBean(B2BPunchOutOrderFileType.class);
82
83 B2BShoppingCart cart = (B2BShoppingCart) SpringContext.getBean(BatchInputFileService.class).parse(fileType, xmlDocAsBytes);
84
85 return cart;
86
87 }
88
89 public synchronized PunchOutSetupResponse parsePunchOutSetupResponse(String xmlChunk) {
90
91 Document xmlDoc = null;
92 try {
93 xmlDoc = builder.parse(new ByteArrayInputStream(xmlChunk.getBytes()));
94 } catch (Exception e) {
95 e.printStackTrace();
96 throw new RuntimeException(e);
97 }
98
99 byte[] xmlDocAsBytes = addXMLNameSpace(xmlDoc, "http://www.kuali.org/ole/purap/b2bPunchOutResponse");
100
101 PunchOutSetupResponseFileType fileType = SpringContext.getBean(PunchOutSetupResponseFileType.class);
102
103 PunchOutSetupResponse response = (PunchOutSetupResponse) SpringContext.getBean(BatchInputFileService.class).parse(fileType, xmlDocAsBytes);
104
105 return response;
106
107 }
108
109 public synchronized PurchaseOrderResponse parsePurchaseOrderResponse(String xmlChunk) {
110
111 Document xmlDoc = null;
112 try {
113 xmlDoc = builder.parse(new ByteArrayInputStream(xmlChunk.getBytes()));
114 } catch (Exception e) {
115 e.printStackTrace();
116 throw new RuntimeException(e);
117 }
118
119 byte[] xmlDocAsBytes = addXMLNameSpace(xmlDoc, "http://www.kuali.org/ole/purap/b2bPOResponse");
120
121 B2BPOResponseFileType fileType = SpringContext.getBean(B2BPOResponseFileType.class);
122
123 PurchaseOrderResponse response = (PurchaseOrderResponse) SpringContext.getBean(BatchInputFileService.class).parse(fileType, xmlDocAsBytes);
124
125 return response;
126
127 }
128
129 private byte[] addXMLNameSpace(Document xmlDoc,
130 String nameSpace) {
131
132 Node node = xmlDoc.getDocumentElement();
133 Element element = (Element) node;
134
135 element.setAttribute("xmlns", nameSpace);
136
137 OutputFormat outputFormat = new OutputFormat(xmlDoc);
138 outputFormat.setOmitDocumentType(true);
139
140 ByteArrayOutputStream out = new ByteArrayOutputStream();
141 XMLSerializer serializer = new XMLSerializer(out, outputFormat);
142 try {
143 serializer.asDOMSerializer();
144 serializer.serialize(xmlDoc.getDocumentElement());
145 } catch (IOException e) {
146 throw new RuntimeException(e);
147 }
148
149 return out.toByteArray();
150 }
151 }