001: /* *****************************************************************************
002: * LZSOAPUtils.java
003: * ****************************************************************************/
004:
005: /* J_LZ_COPYRIGHT_BEGIN *******************************************************
006: * Copyright 2001-2007 Laszlo Systems, Inc. All Rights Reserved. *
007: * Use is subject to license terms. *
008: * J_LZ_COPYRIGHT_END *********************************************************/
009:
010: package org.openlaszlo.remote.swf.soap;
011:
012: import javax.xml.namespace.QName;
013: import org.openlaszlo.iv.flash.util.*;
014: import org.openlaszlo.iv.flash.api.action.*;
015: import org.openlaszlo.iv.flash.api.*;
016: import org.openlaszlo.xml.internal.DataCommon;
017: import org.openlaszlo.xml.internal.DataContext;
018: import java.io.IOException;
019: import java.io.StringReader;
020: import javax.xml.parsers.DocumentBuilder;
021: import javax.xml.parsers.DocumentBuilderFactory;
022: import javax.xml.parsers.ParserConfigurationException;
023: import org.apache.log4j.Logger;
024: import org.w3c.dom.Element;
025: import org.w3c.dom.NodeList;
026: import org.xml.sax.InputSource;
027: import org.xml.sax.SAXException;
028: import org.apache.axis.utils.XMLUtils;
029:
030: public class LZSOAPUtils {
031:
032: private static Logger mLogger = Logger.getLogger(LZSOAPUtils.class);
033:
034: /**
035: * Get prefix if it exists.
036: *
037: * @param tag tag string.
038: * @return prefix part of tag name, if it exists, else empty string.
039: */
040: static public String getPrefix(String tag) {
041: int index = tag.indexOf(':');
042: if (index == -1)
043: return "";
044: return tag.substring(0, index);
045: }
046:
047: /**
048: * Get local part of tag.
049: *
050: * @param tag tag string.
051: * @return local part of tag.
052: */
053: static public String getLocal(String tag) {
054: int index = tag.indexOf(':');
055: if (index == -1)
056: return tag;
057: return tag.substring(index + 1);
058: }
059:
060: static public Element xmlStringToElement(String xml)
061: throws IOException, SAXException {
062:
063: DocumentBuilder builder = null;
064: try {
065: builder = XMLUtils.getDocumentBuilder();
066: return builder
067: .parse(new InputSource(new StringReader(xml)))
068: .getDocumentElement();
069: } catch (ParserConfigurationException e) {
070: throw new SAXException(
071: /* (non-Javadoc)
072: * @i18n.test
073: * @org-mes="can't create document builder"
074: */
075: org.openlaszlo.i18n.LaszloMessages.getMessage(
076: LZSOAPUtils.class.getName(), "051018-73"));
077: } finally {
078: if (builder != null) {
079: XMLUtils.releaseDocumentBuilder(builder);
080: }
081: }
082:
083: }
084:
085: static public void pushString(Program program, String str,
086: DataContext dc) {
087: if (str == null) {
088: pushNull(program.body());
089: return;
090: }
091: DataCommon.pushStringData(str, program.body(), dc);
092: }
093:
094: static public void pushNull(FlashBuffer body) {
095: body.writeByte(Actions.PushData);
096: body.writeWord(0 + 1);
097: body.writeByte(2);
098: }
099:
100: static public void pushQName(Program program, QName qname,
101: DataContext dc) {
102: FlashBuffer body = program.body();
103: if (qname == null) {
104: pushNull(body);
105: return;
106: }
107: // this can be optimized
108: DataCommon.pushStringData(qname.getNamespaceURI(), body, dc);
109: DataCommon.pushStringData(qname.getLocalPart(), body, dc);
110: program.push(2);
111: DataCommon.pushStringData("_root.QName", body, dc);
112: program.newObject();
113: }
114:
115: /**
116: * Get first element by namespace within element. If namespace is null, get
117: * first element in owner element's namespace.
118: *
119: * @param ns namespace.
120: * @param element owner element to search tags from.
121: * @param tag tag name.
122: * @return first element found, or null if none matched.
123: */
124: static Element getFirstElementByTagNameNS(String ns,
125: Element element, String tag) {
126: if (element == null)
127: return null;
128:
129: NodeList list;
130: if (ns == null)
131: list = element.getElementsByTagName(tag);
132: else
133: list = element.getElementsByTagNameNS(ns, tag);
134:
135: if (list.getLength() == 0)
136: return null;
137: return (Element) list.item(0);
138: }
139:
140: /**
141: * See getFirstElementByTagNameNS().
142: */
143: static Element getFirstElementByTagName(Element element, String tag) {
144: return getFirstElementByTagNameNS(null, element, tag);
145: }
146:
147: }
|