Reference com.day.commons.simplejndi.impl.ContextService in component
Hi,
I am implementing a component which can validate email address.
For using MX record to validate email, I need to use jndi as below:
- int doLookup( String hostName ) throws NamingException {
- Hashtable env = new Hashtable();
- env.put("java.naming.factory.initial",
- "com.sun.jndi.dns.DnsContextFactory");
- DirContext ictx = new InitialDirContext( env );
- Attributes attrs =
- ictx.getAttributes( hostName, new String[] { "MX" });
- Attribute attr = attrs.get( "MX" );
- if( attr == null ) return( 0 );
- return( attr.size() );
- }
In osgi container, usage of standard JNDI APIs could break modularity in OSGI applications. As expected, directly using javax.naming.directory.InitialDirContext gives javax.naming.NotContextException: Not an instance of DirContext.
Then tried to use com.day.commons.simplejndi.impl.ContextService and the component was in satisfied state.
Below is the error log:
27.02.2019 14:24:46.351 *ERROR* [CM Event Dispatcher (Fire ConfigurationEvent: pid=com.telstra.media.puck.services.impl.EmailServiceImpl)] org.apache.felix.configadmin Service [org.apache.felix.cm.ConfigurationAdmin,21, [org.osgi.service.cm.ConfigurationAdmin]] Unexpected problem delivering configuration event to [org.osgi.service.cm.ConfigurationListener, id=40, bundle=27/launchpad:resources/install/4/org.apache.felix.scr-2.0.2.jar] (java.lang.NoClassDefFoundError: com/day/commons/simplejndi/impl/ContextService)
java.lang.NoClassDefFoundError: com/day/commons/simplejndi/impl/ContextService
at java.lang.Class.getDeclaredMethods0(Native Method) ~[na:1.8.0_91]
at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) ~[na:1.8.0_91]
at java.lang.Class.getDeclaredMethods(Class.java:1975) ~[na:1.8.0_91]
at org.apache.felix.scr.impl.helper.BindMethod.getServiceObjectAssignableMethod(BindMethod.java:454) ~[na:na]
at org.apache.felix.scr.impl.helper.BindMethod.doFindMethod(BindMethod.java:186) ~[na:na]
at org.apache.felix.scr.impl.helper.BaseMethod.findMethod(BaseMethod.java:171) ~[na:na]
at org.apache.felix.scr.impl.helper.BaseMethod.access$400(BaseMethod.java:37) ~[na:na]
at org.apache.felix.scr.impl.helper.BaseMethod$NotResolved.resolve(BaseMethod.java:558) ~[na:na]
at org.apache.felix.scr.impl.helper.BaseMethod$NotResolved.methodExists(BaseMethod.java:580) ~[na:na]
at org.apache.felix.scr.impl.helper.BaseMethod.methodExists(BaseMethod.java:513) ~[na:na]
at org.apache.felix.scr.impl.helper.BindMethod.getServiceObject(BindMethod.java:643) ~[na:na]
at org.apache.felix.scr.impl.manager.DependencyManager.getServiceObject(DependencyManager.java:2137) ~[na:na]
at org.apache.felix.scr.impl.manager.DependencyManager$SingleStaticCustomizer.prebind(DependencyManager.java:1048) ~[na:na]
at org.apache.felix.scr.impl.manager.DependencyManager.prebind(DependencyManager.java:1457) ~[na:na]
at org.apache.felix.scr.impl.manager.AbstractComponentManager.collectDependencies(AbstractComponentManager.java:983) ~[na:na]
at org.apache.felix.scr.impl.manager.SingleComponentManager.getServiceInternal(SingleComponentManager.java:812) ~[na:na]
at org.apache.felix.scr.impl.manager.AbstractComponentManager.activateInternal(AbstractComponentManager.java:724) ~[na:na]
at org.apache.felix.scr.impl.manager.SingleComponentManager.reconfigure(SingleComponentManager.java:627) ~[na:na]
at org.apache.felix.scr.impl.manager.SingleComponentManager.reconfigure(SingleComponentManager.java:566) ~[na:na]
at org.apache.felix.scr.impl.config.ConfigurableComponentHolder.configurationUpdated(ConfigurableComponentHolder.java:419) ~[na:na]
at org.apache.felix.scr.impl.config.ConfigurationSupport.configurationEvent(ConfigurationSupport.java:315) ~[na:na]
at org.apache.felix.cm.impl.ConfigurationManager$FireConfigurationEvent.sendEvent(ConfigurationManager.java:2046) [!/:na]
at org.apache.felix.cm.impl.ConfigurationManager$FireConfigurationEvent.run(ConfigurationManager.java:2014) [!/:na]
Could anybody shed a light on how to use JNDI in an AEM component?