How to consume a web service from a SLSB EJB3?
anders.hedstrom Mar 14, 2006 9:51 AMHi,
I'm trying to consume a web service from my SLSB, but I can't get hold of the service reference. Instead of using injection (I can't find the annotation javax.xml.ws.WebServiceRef anywhere, so I guess that it's not implemented yet), I just declare the service ref myself in the dd and try to get it via JNDI - without any luck...
ejb-jar.xml snippet
<session> <ejb-name>WsClientEJB</ejb-name> <env-entry> <env-entry-name>testEnv</env-entry-name> <env-entry-type>java.lang.String</env-entry-type> <env-entry-value>VALUE FROM DD</env-entry-value> </env-entry> <service-ref> <service-ref-name>service/CountrySrv</service-ref-name> <service-interface>test.ejb3.ws.CountryInfoService</service-interface> <wsdl-file>META-INF/wsdl/country-srv.wsdl</wsdl-file> <jaxrpc-mapping-file>META-INF/wsdl/mapping.xml</jaxrpc-mapping-file> </service-ref> </session>
SLSB code:
@Stateless public class WsClientEJB implements WsClient { private static final Logger log4j = Logger.getLogger(WsClientEJB.class); public String getCountryCapital(String countryISOCode){ try { InitialContext ic = new InitialContext(); log4j.info(ic.lookup("java:comp.ejb3/env/testEnv")); CountryInfoServiceSoapType ws = ((CountryInfoService)ic.lookup("java:comp.ejb3/env/service/CountrySrv")).getCountryInfoServiceSoap(); return ws.capitalCity(countryISOCode); } catch (NamingException e) { log4j.error(e.getMessage()); return e.getMessage(); } catch (ServiceException e) { log4j.error(e.getMessage()); return e.getMessage(); } catch (RemoteException e) { log4j.error(e.getMessage()); return e.getMessage(); } } }
The output on the console when calling this method:
15:36:42,515 INFO [WsClientEJB] Entering getCountryCapital! 15:36:42,515 INFO [WsClientEJB] VALUE FROM DD 15:36:42,515 ERROR [WsClientEJB] service not bound
As you can see I can find the env-entry in the dd via JNDI (it took me some time to figure out the it was bound under comp.ejb3 context), but I can't look up the service-ref . It's not bound?
This is how I get it when using EJB 2.1. How should I get it in EJB3? Any ideas?
Cheers
//Anders