001: /*
002: * JBoss, Home of Professional Open Source
003: * Copyright 2005, JBoss Inc., and individual contributors as indicated
004: * by the @authors tag. See the copyright.txt in the distribution for a
005: * full listing of individual contributors.
006: *
007: * This is free software; you can redistribute it and/or modify it
008: * under the terms of the GNU Lesser General Public License as
009: * published by the Free Software Foundation; either version 2.1 of
010: * the License, or (at your option) any later version.
011: *
012: * This software is distributed in the hope that it will be useful,
013: * but WITHOUT ANY WARRANTY; without even the implied warranty of
014: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
015: * Lesser General Public License for more details.
016: *
017: * You should have received a copy of the GNU Lesser General Public
018: * License along with this software; if not, write to the Free
019: * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
020: * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
021: */
022: package org.jboss.metadata.serviceref;
023:
024: // $Id: ServiceRefDelegate.java 61864 2007-03-29 20:01:13Z thomas.diesler@jboss.com $
025:
026: import javax.naming.Context;
027: import javax.naming.NamingException;
028: import javax.xml.soap.FactoryLoader;
029:
030: import org.jboss.kernel.Kernel;
031: import org.jboss.kernel.spi.registry.KernelRegistry;
032: import org.jboss.kernel.spi.registry.KernelRegistryEntry;
033: import org.jboss.logging.Logger;
034: import org.jboss.ws.integration.KernelLocator;
035: import org.jboss.ws.integration.ServiceRefElement;
036: import org.jboss.ws.integration.ServiceRefHandler;
037: import org.jboss.ws.integration.ServiceRefMetaData;
038: import org.jboss.ws.integration.UnifiedVirtualFile;
039: import org.jboss.xb.binding.UnmarshallingContext;
040: import org.w3c.dom.Element;
041: import org.xml.sax.Attributes;
042:
043: /**
044: * Factory for ServiceRefHandler
045: *
046: * @author Thomas.Diesler@jboss.org
047: * @since 05-May-2004
048: */
049: public class ServiceRefDelegate implements ServiceRefHandler {
050: // provide logging
051: private static final Logger log = Logger
052: .getLogger(ServiceRefDelegate.class);
053:
054: private static ServiceRefHandler delegate;
055:
056: public ServiceRefDelegate() {
057: if (delegate == null) {
058: Kernel kernel = KernelLocator.getKernel();
059: if (kernel != null) {
060: KernelRegistry registry = kernel.getRegistry();
061: KernelRegistryEntry entry = registry
062: .getEntry(ServiceRefHandler.BEAN_NAME);
063: delegate = (ServiceRefHandler) entry.getTarget();
064: } else {
065: String propName = ServiceRefHandler.class.getName();
066: String defaultImpl = "org.jboss.ws.core.client.ServiceRefHandlerImpl";
067: delegate = (ServiceRefHandler) FactoryLoader
068: .loadFactory(propName, defaultImpl);
069: }
070: }
071:
072: if (delegate == null)
073: log.warn("Not registered: " + ServiceRefHandler.BEAN_NAME);
074: }
075:
076: public ServiceRefMetaData newServiceRefMetaData() {
077: ServiceRefMetaData sref;
078: if (delegate != null)
079: sref = delegate.newServiceRefMetaData();
080: else
081: sref = new DummyServiceRef();
082: return sref;
083: }
084:
085: public Object newChild(ServiceRefElement ref,
086: UnmarshallingContext navigator, String namespaceURI,
087: String localName, Attributes attrs) {
088: Object child = null;
089: if (delegate != null)
090: child = delegate.newChild(ref, navigator, namespaceURI,
091: localName, attrs);
092: return child;
093: }
094:
095: public void setValue(ServiceRefElement ref,
096: UnmarshallingContext navigator, String namespaceURI,
097: String localName, String value) {
098: if (delegate != null)
099: delegate.setValue(ref, navigator, namespaceURI, localName,
100: value);
101: }
102:
103: public void bindServiceRef(Context encCtx, String encName,
104: UnifiedVirtualFile vfsRoot, ClassLoader loader,
105: ServiceRefMetaData sref) throws NamingException {
106: if (delegate != null)
107: delegate.bindServiceRef(encCtx, encName, vfsRoot, loader,
108: sref);
109: }
110:
111: public static class DummyServiceRef extends ServiceRefMetaData {
112: private String refName;
113:
114: @Override
115: public void setServiceRefName(String name) {
116: this .refName = name;
117: }
118:
119: @Override
120: public String getServiceRefName() {
121: return refName;
122: }
123:
124: @Override
125: public Object getAnnotatedElement() {
126: return null;
127: }
128:
129: @Override
130: public void setAnnotatedElement(Object anElement) {
131: }
132:
133: @Override
134: public void importJBossXml(Element element) {
135: }
136:
137: @Override
138: public void importStandardXml(Element element) {
139: }
140:
141: @Override
142: public boolean isProcessed() {
143: return false;
144: }
145:
146: @Override
147: public void setProcessed(boolean flag) {
148: }
149:
150: @Override
151: public void merge(ServiceRefMetaData serviceRef) {
152: }
153: }
154: }
|