01: /**
02: * JOnAS: Java(TM) Open Application Server
03: * Copyright (C) 1999-2004 Bull S.A.
04: * Contact: jonas-team@objectweb.org
05: *
06: * This library is free software; you can redistribute it and/or
07: * modify it under the terms of the GNU Lesser General Public
08: * License as published by the Free Software Foundation; either
09: * version 2.1 of the License, or 1any later version.
10: *
11: * This library is distributed in the hope that it will be useful,
12: * but WITHOUT ANY WARRANTY; without even the implied warranty of
13: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14: * Lesser General Public License for more details.
15: *
16: * You should have received a copy of the GNU Lesser General Public
17: * License along with this library; if not, write to the Free Software
18: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
19: * USA
20: *
21: * --------------------------------------------------------------------------
22: * $Id: QNameRule.java 5766 2004-11-19 09:23:01Z sauthieg $
23: * --------------------------------------------------------------------------
24: */package org.objectweb.jonas_lib.deployment.rules;
25:
26: import java.util.StringTokenizer;
27:
28: import javax.xml.namespace.QName;
29:
30: import org.apache.commons.digester.Rule;
31:
32: import org.objectweb.jonas_lib.deployment.xml.Qname;
33:
34: /**
35: * Rule that create a new QName object
36: * @author Florent Benoit
37: */
38: public class QNameRule extends Rule {
39:
40: /**
41: * This method is called when the body of a matching XML element is
42: * encountered. If the element has no body, this method is not called at
43: * all. The default implementation delegates to the deprecated method
44: * body without the namespace and name parameters, to retain backwards
45: * compatibility.
46: * @param namespace the namespace URI of the matching element,
47: * or an empty string if the parser is not namespace
48: * aware or the element has no namespace
49: * @param name the local name if the parser is namespace aware,
50: * or just the element name otherwise
51: * @param text The text of the body of this element
52: */
53: public void body(String namespace, String name, String text) {
54:
55: // Check that there the value of the element is not null
56: if (text == null) {
57: throw new IllegalArgumentException(
58: "No QName found in the body of the tag " + name);
59: }
60:
61: // Extract prefix and localpart
62: StringTokenizer st = new StringTokenizer(text, ":");
63: if (st.countTokens() != 2) {
64: throw new IllegalArgumentException(
65: "QName must be on the form prefix:localpart for element "
66: + name);
67: }
68: String prefix = st.nextToken();
69: String localPart = st.nextToken();
70:
71: // Get namespaceURI from prefix
72: String namespaceURI = digester.findNamespaceURI(prefix);
73: if (namespaceURI == null) {
74: throw new IllegalArgumentException(
75: "No namespace found for the prefix '" + prefix
76: + "' in element " + name);
77: }
78:
79: // Build QName
80: QName qName = new QName(namespaceURI, localPart, prefix);
81:
82: // Add this QName to the element at the top of the stack
83: Qname qNameObject = (Qname) digester.peek();
84: qNameObject.setName(name);
85: qNameObject.setQName(qName);
86:
87: }
88: }
|