1 package org.objectweb.celtix.bus.bindings.xml; 2 3 import java.io.*; 4 import javax.xml.namespace.QName ; 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 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 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 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 name = getQNameFromNode(child); 100 return XMLConstants.XML_FAULT_ROOT.equals(name); 101 } 102 103 private QName getQNameFromNode(Node node) { 104 String localName = node.getLocalName(); 105 String namespaceURI = node.getNamespaceURI(); 106 return localName == null ? null : new QName (namespaceURI, localName); 107 } 108 109 public static XMLMessageFactory newInstance() { 110 return new XMLMessageFactory(); 111 } 112 } 113 | Popular Tags |