KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > objectweb > celtix > bus > bindings > xml > XMLMessageFactory


1 package org.objectweb.celtix.bus.bindings.xml;
2
3 import java.io.*;
4 import javax.xml.namespace.QName JavaDoc;
5 import org.w3c.dom.*;
6 import org.objectweb.celtix.helpers.XMLUtils;
7
8 public final class XMLMessageFactory {
9
10     private XMLUtils xmlUtils = new XMLUtils();
11     
12     private XMLMessageFactory() {
13     }
14     
15     public XMLMessage createMessage() throws XMLBindingException {
16         return new XMLMessage();
17     }
18
19     public XMLMessage createMessage(InputStream in) throws XMLBindingException {
20         XMLMessage message = new XMLMessage();
21         try {
22             Document doc = xmlUtils.parse(in);
23             if (doc != null) {
24                 message.setRoot(doc);
25             }
26
27             buildFaultMessage(message, doc);
28         } catch (Exception JavaDoc exp) {
29             exp.printStackTrace();
30             throw new XMLBindingException("Create XML binding message exception:", exp);
31         }
32         return message;
33     }
34
35
36     private void buildFaultMessage(XMLMessage message, Document doc) {
37         assert doc != null;
38         if (doc.hasChildNodes()) {
39             doBuild(message, doc);
40         }
41     }
42     
43     private void doBuild(XMLMessage message, Node node) {
44         NodeList children = node.getChildNodes();
45         for (int i = 0; i < children.getLength(); i++) {
46             Node child = children.item(i);
47             if (isFaultNode(child)) {
48                 addFault(message, child);
49             }
50             
51             if (isFaultStringNode(child)) {
52                 addFaultString(message, child);
53             }
54
55             if (isDetailNode(child)) {
56                 addDetail(message, child);
57             }
58             
59             if (child.hasChildNodes()) {
60                 doBuild(message, child);
61             }
62         }
63     }
64
65     private void addFaultString(XMLMessage message, Node child) {
66         XMLFault xmlFault = message.getFault();
67         if (xmlFault == null) {
68             xmlFault = message.addFault();
69         }
70         xmlFault.setFaultString(child.getTextContent());
71     }
72
73     private boolean isFaultStringNode(Node child) {
74         QName JavaDoc name = getQNameFromNode(child);
75         return XMLConstants.XML_FAULT_STRING.equals(name);
76     }
77
78     private void addDetail(XMLMessage message, Node child) {
79         XMLFault xmlFault = message.getFault();
80         if (xmlFault == null) {
81             xmlFault = message.addFault();
82         }
83
84         xmlFault.setFaultDetail(child);
85     }
86
87     private boolean isDetailNode(Node child) {
88         QName JavaDoc name = getQNameFromNode(child);
89         return XMLConstants.XML_FAULT_DETAIL.equals(name);
90     }
91     
92     private void addFault(XMLMessage message, Node child) {
93         XMLFault xmlFault = new XMLFault();
94         xmlFault.setFaultRoot(child);
95         message.setFault(xmlFault);
96     }
97     
98     private boolean isFaultNode(Node child) {
99         QName JavaDoc name = getQNameFromNode(child);
100         return XMLConstants.XML_FAULT_ROOT.equals(name);
101     }
102
103     private QName JavaDoc getQNameFromNode(Node node) {
104         String JavaDoc localName = node.getLocalName();
105         String JavaDoc namespaceURI = node.getNamespaceURI();
106         return localName == null ? null : new QName JavaDoc(namespaceURI, localName);
107     }
108
109     public static XMLMessageFactory newInstance() {
110         return new XMLMessageFactory();
111     }
112 }
113
Popular Tags