The xml exception seems strange because it occurs while parsing the wsdl, and the wsdl has already been successfully parsed by the container when the endpoint has been activated. Could you connect with a JMX console and retrieve the wsdl generated for your EJB endpoint ?
For the ProxyPojoService, I would consider using the new spring factory bean Hiram just checked in, so you can create/wire the proxy in spring using: <jsr181:proxy id="proxy" container="#jbi" service="test:EchoService" type="test.Echo"/> The created bean will implement the "test.Echo" interface and send exchange using xfire proxy to test:EchoService service. If the parameters are already in the xml request, you could also use an XSLT transformation and sent it to the EJB endpoint. Else, your proxy should implement an interface with a method that will receive all the needed parameters, and will will receive them unmarshalled in your service class, then just invoke the xfire proxy with the new parameters. Could you please explain what you are trying to achieve at the end ? I may be able to give better advice. Cheers, Guillaume Nodet On 6/4/06, MikeGeorge <[EMAIL PROTECTED]> wrote:
In fact this is a continuation of http://www.nabble.com/How-to-set-parameter-to-invoke-EJB-t1711935.html My EJB Business interface is as follows: ---------------------------------------------------- public interface HelloWorldBI{ String sayHello(int num, String s) throws IOException; } My servicemix.xml is as follows: ------------------------------------------ <?xml version="1.0" encoding="UTF-8"?> <beans xmlns:sm="http://servicemix.apache.org/config/1.0" xmlns:eip="http://servicemix.apache.org/eip/1.0" xmlns:http="http://servicemix.apache.org/http/1.0" xmlns:jsr181="http://servicemix.apache.org/jsr181/1.0" xmlns:my="http://servicemix.apache.org/demo"> <sm:container id="jbi" useMBeanServer="true" createMBeanServer="true" dumpStats="true" statsInterval="10"> <sm:activationSpecs> <sm:activationSpec componentName="jsrEjbBC" service="my:jsrEjbBC" endpoint="jsrEjbBC"> <sm:component> <jsr181:component> <jsr181:endpoints> <jsr181:endpoint annotations="none" service="my:jsrEjbEP" endpoint="jsrEjbEP"> <jsr181:pojo> <bean class=" org.springframework.ejb.access.SimpleRemoteStatelessSessionProxyFactoryBean "> <property name="jndiName" value="esb-statelessSession-TraderHome"/> <property name="businessInterface" value="examples.webservices.basic.statelessSession.HelloWorldBI"/> <property name="jndiTemplate"> <ref bean="jndiTemplate"/> </property> <property name="lookupHomeOnStartup"> <value>false</value> </property> </bean> </jsr181:pojo> </jsr181:endpoint> </jsr181:endpoints> </jsr181:component> </sm:component> </sm:activationSpec> <sm:activationSpec componentName="proxyPojoBC" service="my:proxyPojoBC" endpoint="proxyPojoBC"> <sm:component> <jsr181:component> <jsr181:endpoints> <jsr181:endpoint pojoClass="ProxyPojoService" annotations="none" service="my:proxyPojoService" endpoint="proxyPojoService" serviceInterface="ProxyPojo"/> </jsr181:endpoints> </jsr181:component> </sm:component> </sm:activationSpec> <sm:activationSpec componentName="ejbHttpBridge" service="my:ejbHttpBridge"> <sm:component> <bean xmlns="http://xbean.org/schemas/spring/1.0" class="EjbHttpBridge" > <constructor-arg ref="jbi"/> <property name="name"> <value>1</value> </property> </bean> </sm:component> </sm:activationSpec> <sm:activationSpec> <sm:component> <http:component> <http:endpoints> <http:endpoint service="my:ejbHttpBridge" role="consumer" defaultOperation="echo" locationURI="http://localhost:8192/Service/" defaultMep="http://www.w3.org/2004/08/wsdl/in-out" soap="true"/> </http:endpoints> </http:component> </sm:component> </sm:activationSpec> </sm:activationSpecs> </sm:container> <!-- bean Other code goes here </bean --> </beans> My EjbHttpBridge.java is as follows: ------------------------------------------------ public class EjbHttpBridge extends TransformComponentSupport implements MessageExchangeListener{ private JBIContainer container; private HelloWorldBI helloWorldBIProxy; public EjbHttpBridge(JBIContainer container){ log("EjbHttpBridge.EjbHttpBridge(JBIContainer)..."); this.container = container; } protected boolean transform(MessageExchange exchange, NormalizedMessage in, NormalizedMessage out) throws MessagingException { String result = null; log("EjbHttpBridge(" + name + ").transform01. exchange.getService() = " + exchange.getService()); try { DefaultServiceMixClient client = new DefaultServiceMixClient(container); InOut me = client.createInOutExchange(); me.setInterfaceName(new QName("http://xfire.jsr181.servicemix.apache.org", "ProxyPojoPortType")); me.getInMessage().setContent(new StringSource("<echo xmlns='http://jsr181.servicemix.apache.org'><echoin0>I will send actual params later</echoin0></echo>")); client.sendSync(me); if (me.getError() != null) { me.getError().printStackTrace(); } client.done(me); } catch (Exception e) { e.printStackTrace(); throw new MessagingException(e.getMessage()); } log("EjbHttpBridge(" + name + ").transform. End"); return true; } } My ProxyPojo.java is as follows: ------------------------------------------ public interface ProxyPojo { public String invoke(); } My ProxyPojoService.java is as follows: ---------------------------------------------------- public class ProxyPojoService implements ProxyPojo { private ComponentContext context; private HelloWorldBI proxy; public void setContext(ComponentContext context) throws Exception { log("ProxyPojoService.setContext..."); this.context = context; if (context != null) { try { log("ProxyPojoService.setContext. Creating XFire..."); XFire xfire = Jsr181LifeCycle.createXFire(context); QName service = new QName("http://servicemix.apache.org/demo", "jsrEjbEP"); log("ProxyPojoService.setContext. Creating proxy..."); proxy = (HelloWorldBI) JbiProxy.create(xfire, context, null, service, null, HelloWorldBI.class); } catch (Exception e) { e.printStackTrace(); throw e; } } } public String invoke() { log("ProxyPojoService.invoke..."); String returnString = null; try{ //My assumption: Later I will retreive actual params from // ComponentContext and send through proxy. returnString = proxy.sayHello(1, "Mike"); } catch(Exception e){ e.printStackTrace(); } return returnString; } } The exception I am getting while bringing the ESB up is: ------------------------------------------------------------------------------ D:\ServiceMixTest>D:\Applns\ServiceMix\incubating- servicemix-3.0-SNAPSHOT_2006-05-27\bin\servicemix servicemix.xml Apache ServiceMix ESB: 3.0-SNAPSHOT Loading Apache ServiceMix from file: servicemix.xml log4j:WARN Continuable parsing error 47 and column 23 log4j:WARN An element with the identifier "FILE" must appear in the document. log4j:ERROR No appender named [FILE] could be found. EjbHttpBridge.EjbHttpBridge(JBIContainer)... DEBUG - ManagementContext - Registering system service: org.apache.servicemix:Container Name=ServiceMix,Type=SystemService,Name=ManagementContext DEBUG - ManagementContext - Registering system service: org.apache.servicemix:Container Name=ServiceMix,Type=SystemService,Name=EnvironmentContext DEBUG - ManagementContext - Registering system service: org.apache.servicemix:Container Name=ServiceMix,Type=SystemService,Name=Registry DEBUG - ManagementContext - Registering system service: org.apache.servicemix:Container Name=ServiceMix,Type=SystemService,Name=DefaultBroker INFO - JBIContainer - Activating component for: [container=ServiceMix,name=#Subsc riptionManager#] with service: null component: [EMAIL PROTECTED] da0a INFO - ComponentMBeanImpl - Initializing component: #SubscriptionManager# DEBUG - ManagementContext - Registering system service: org.apache.servicemix:Container Name=ServiceMix,Type=SystemService,Name=InstallationService DEBUG - ManagementContext - Registering system service: org.apache.servicemix:Container Name=ServiceMix,Type=SystemService,Name=DeploymentService INFO - DeploymentService - Restoring service assemblies DEBUG - ManagementContext - Registering system service: org.apache.servicemix:Container Name=ServiceMix,Type=SystemService,Name=AutoDeploymentService DEBUG - AutoDeploymentService - State file doesn't exist: D:\ServiceMixTest\rootDir\install .xml DEBUG - AutoDeploymentService - State file doesn't exist: D:\ServiceMixTest\rootDir\deploy. xml DEBUG - ManagementContext - Registering system service: org.apache.servicemix:Container Name=ServiceMix,Type=SystemService,Name=AdminCommandsService INFO - JBIContainer - ServiceMix JBI Container (http://servicemix.org/) name: Ser viceMix running version: 3.0-SNAPSHOT INFO - JBIContainer - Activating component for: [container=ServiceMix,name=jsrEjb BC] with service: {http://servicemix.apache.org/demo}jsrEjbBC component: org.apache.servicemix.jsr18 [EMAIL PROTECTED] INFO - ComponentMBeanImpl - Initializing component: jsrEjbBC DEBUG - Jsr181SpringComponent - Initializing component DEBUG - JBIContainer - No transaction manager found from naming context: scheme ja va not recognized DEBUG - Jsr181SpringComponent - DEBUG - Jsr181SpringComponent - Component initialized INFO - JBIContainer - Activating component for: [container=ServiceMix,name=proxyP ojoBC] with service: {http://servicemix.apache.org/demo}proxyPojoBC component: org.apache.servicemix [EMAIL PROTECTED] INFO - ComponentMBeanImpl - Initializing component: proxyPojoBC DEBUG - Jsr181SpringComponent - Initializing component DEBUG - Jsr181SpringComponent - DEBUG - Jsr181SpringComponent - Component initialized INFO - JBIContainer - Activating component for: [container=ServiceMix,name=ejbHtt pBridge] with service: {http://servicemix.apache.org/demo}ejbHttpBridge component: [EMAIL PROTECTED] 9b3f INFO - ComponentMBeanImpl - Initializing component: ejbHttpBridge DEBUG - ComponentContextImpl - Component: ejbHttpBridge activated endpoint: {http://servic emix.apache.org/demo}ejbHttpBridge : ejbHttpBridge DEBUG - EndpointRegistry - Endpoint ServiceEndpoint[service={http://servicemix.apache. org/demo}ejbHttpBridge,endpoint=ejbHttpBridge] has no service description INFO - JBIContainer - Activating component for: [container=ServiceMix,name=ID:TVM KVML19213-2193-1149433490147-0:0] with service: null component: org.apache.servicemix.http.HttpSprin [EMAIL PROTECTED] INFO - ComponentMBeanImpl - Initializing component: ID:TVMKVML19213-2193-1149433490147- 0:0 DEBUG - HttpSpringComponent - Initializing component DEBUG - HttpSpringComponent - Component initialized DEBUG - Jsr181SpringComponent - Starting component DEBUG - ComponentContextImpl - Component: jsrEjbBC activated endpoint: {http://servicemix. apache.org/demo}jsrEjbEP : jsrEjbEP DEBUG - Jsr181SpringComponent - Querying service description for ServiceEndpoint[service={h ttp://servicemix.apache.org/demo}jsrEjbEP,endpoint=jsrEjbEP] DEBUG - EndpointRegistry - Endpoint ServiceEndpoint[service={http://servicemix.apache. org/demo}jsrEjbEP,endpoint=jsrEjbEP] implements interface {http://servicemix.apache.org/demo}jsrEjbE PPortType DEBUG - Jsr181SpringComponent - Unable to inject ComponentContext: $Proxy0.setContext(javax .jbi.component.ComponentContext) DEBUG - Jsr181SpringComponent - Component started DEBUG - Jsr181SpringComponent - Starting component DEBUG - ComponentContextImpl - Component: proxyPojoBC activated endpoint: {http://servicem ix.apache.org/demo}proxyPojoService : proxyPojoService DEBUG - Jsr181SpringComponent - Querying service description for ServiceEndpoint[service={h ttp://servicemix.apache.org/demo}proxyPojoService,endpoint=proxyPojoService] DEBUG - EndpointRegistry - Endpoint ServiceEndpoint[service={http://servicemix.apache. org/demo}proxyPojoService,endpoint=proxyPojoService] implements interface {http://servicemix.apache. org/demo}proxyPojoServicePortType ProxyPojoService.setContext... ProxyPojoService.setContext. Creating XFire... ProxyPojoService.setContext. Creating proxy... DEBUG - Jsr181SpringComponent - Querying service description for ServiceEndpoint[service={h ttp://servicemix.apache.org/demo}jsrEjbEP,endpoint=jsrEjbEP] DEBUG - Jsr181SpringComponent - Querying service description for ServiceEndpoint[service={h ttp://servicemix.apache.org/demo}jsrEjbEP,endpoint=jsrEjbEP] org.apache.ws.commons.schema.XmlSchemaException: Couldn't map prefix 'ns5' to a namespace at org.apache.ws.commons.schema.SchemaBuilder.handleElement( SchemaBuilder.java:1466) at org.apache.ws.commons.schema.SchemaBuilder.handleSequence( SchemaBuilder.java:988) at org.apache.ws.commons.schema.SchemaBuilder.handleComplexType( SchemaBuilder.java:568) at org.apache.ws.commons.schema.SchemaBuilder.handleXmlSchemaElement( SchemaBuilder.java:113) at org.apache.ws.commons.schema.XmlSchemaCollection.read( XmlSchemaCollection.java:273) at org.codehaus.xfire.wsdl11.parser.WSDLServiceBuilder.visit( WSDLServiceBuilder.java:350) at org.codehaus.xfire.wsdl11.parser.WSDLServiceBuilder.build( WSDLServiceBuilder.java:180) at org.codehaus.xfire.client.Client.initFromDefinition(Client.java:260) at org.apache.servicemix.jsr181.xfire.JbiProxy$JBIClient.<init>(JbiProxy.java :147) at org.apache.servicemix.jsr181.xfire.JbiProxy.getProxy(JbiProxy.java:78) at org.apache.servicemix.jsr181.xfire.JbiProxy.create(JbiProxy.java:49) at ProxyPojoService.setContext(ProxyPojoService.java:30) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java :39) at sun.reflect.DelegatingMethodAccessorImpl.invoke( DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.apache.servicemix.jsr181.Jsr181Endpoint.injectContext( Jsr181Endpoint.java:167) at org.apache.servicemix.jsr181.Jsr181Endpoint.activate(Jsr181Endpoint.java :148) at org.apache.servicemix.common.ServiceUnit.start(ServiceUnit.java:49) at org.apache.servicemix.jsr181.Jsr181SpringComponent$LifeCycle.doStart (Jsr181SpringComponen t.java:77) at org.apache.servicemix.common.BaseLifeCycle.start(BaseLifeCycle.java:198) at org.apache.servicemix.jbi.framework.ComponentMBeanImpl.doStart( ComponentMBeanImpl.java:28 5) at org.apache.servicemix.jbi.framework.ComponentRegistry.setInitialRunningStateFromStart (Com ponentRegistry.java:149) at org.apache.servicemix.jbi.framework.ComponentRegistry.start( ComponentRegistry.java:72) at org.apache.servicemix.jbi.framework.Registry.start(Registry.java:114) at org.apache.servicemix.jbi.container.JBIContainer.start(JBIContainer.java :551) at org.apache.servicemix.jbi.container.SpringJBIContainer.afterPropertiesSet (SpringJBIContai ner.java:78) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMe thods(AbstractAutowireCapableBeanFactory.java:1059) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean (A bstractAutowireCapableBeanFactory.java:363) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean (AbstractBeanFactory .java:226) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean (AbstractBeanFactory .java:147) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingle tons(DefaultListableBeanFactory.java:275) at org.springframework.context.support.AbstractApplicationContext.refresh (AbstractApplicatio nContext.java:320) at org.apache.xbean.spring.context.FileSystemXmlApplicationContext .<init>(FileSystemXmlAppli cationContext.java:149) at org.apache.xbean.spring.context.FileSystemXmlApplicationContext .<init>(FileSystemXmlAppli cationContext.java:100) at org.apache.servicemix.Main.main(Main.java:80) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java :39) at sun.reflect.DelegatingMethodAccessorImpl.invoke( DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.codehaus.classworlds.Launcher.launchStandard(Launcher.java:410) at org.codehaus.classworlds.Launcher.launch(Launcher.java:344) at org.codehaus.classworlds.Launcher.main(Launcher.java:461) DEBUG - Jsr181SpringComponent - Unable to inject ComponentContext: null DEBUG - Jsr181SpringComponent - Component started DEBUG - HttpSpringComponent - Starting component INFO - log - Logging to [EMAIL PROTECTED] via org.m ortbay.log.Slf4jLog DEBUG - HttpSpringComponent - Retrieving proxied endpoint definition INFO - log - jetty 6.0.0beta15 DEBUG - ServerManager - Dispatching job: org.mortbay.jetty.AbstractConnector$Accept [EMAIL PROTECTED] INFO - log - Started SelectChannelConnector @ localhost:8192 DEBUG - HttpSpringComponent - Component started DEBUG - AutoDeploymentService - Monitoring directory D:\ServiceMixTest\rootDir\install for new or modified archives DEBUG - AutoDeploymentService - Monitoring directory D:\ServiceMixTest\rootDir\deploy for n ew or modified archives Terminate batch job (Y/N)? My Queries/Assumptions to be validated: ------------------------------------------------------- 1. Cause for the ERROR - XmlSchemaException: Couldn't map prefix 'ns5' to a namespace 2. In ProxyPojoService, I have reference to ComponentContext. From that, can I retrieve XML formatted input message, bind them to Java classes and send as parameters through proxy to EJB. If this approach not right, alternate suggestions. Thanks for continuous help. - Mike -- View this message in context: http://www.nabble.com/JbiProxy-to-invoke-EJB---Couldn%27t-map-prefix-%27ns5%27-to-a-namespace-t1731101.html#a4703349 Sent from the ServiceMix - User forum at Nabble.com.
