My Previous (linked) Query, which I successfully deployed is here: http://www.nabble.com/JbiProxy-to-invoke-EJB---Couldn%27t-map-prefix-%27ns5%27-to-a-namespace-t1731101.html
My Current problem: --------------------------- My servicemxix.ml goes like this: ------------------------------------------- <?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"> <import resource="classpath:jmx.xml" /> <sm:container id="jbi" MBeanServer="#mbeanServer" 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" serviceInterface="com.mike.j2ee.bea.EightOneTwo.BankTransaction.BankBI" typeMapping="default"> <jsr181:pojo> <bean class="org.springframework.ejb.access.SimpleRemoteStatelessSessionProxyFactoryBean"> <property name="jndiName" value="com.mike.j2ee.bea.EightOneTwo.BankTransaction.BankHome"/> <property name="businessInterface" value="com.mike.j2ee.bea.EightOneTwo.BankTransaction.BankBI"/> <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="ejbHttpBridge" service="my:ejbHttpBridge"> <sm:component> <bean xmlns="http://xbean.org/schemas/spring/1.0" class="BankEjbHttpBridge" > <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 EJB Business Interface goes like this: ------------------------------------------------------ public interface BankBI{ TransactionRes transact(TransactionReq transactionReq) throws IOException; } My Business Interface Java Type params are given below: ------------------------------------------------------------------------------ TransactionReq.java: ---------------------------- public class TransactionReq implements Serializable{ public TransactionReq(){} public TransactionReq(BigInteger accountId, String action, BigDecimal amount){ this.accountId = accountId; this.action = action; this.amount = amount; } private BigInteger accountId; private BigDecimal amount; private String action; public BigInteger getAccountId(){ return accountId; } public void setAccountId(BigInteger accountId){ this.accountId = accountId; } public BigDecimal getAmount(){ return amount; } public void setAmount(BigDecimal amount){ this.amount = amount; } public String getAction(){ return action; } public void setAction(String action){ this.action = action; } public String toString(){ StringBuffer stringBuffer = new StringBuffer(); stringBuffer .append("TxReq-accountId:" + accountId) .append(";amount:" + amount) .append(";action:" + action); return stringBuffer.toString(); } } TransactionRes.java: ---------------------------- public class TransactionRes implements Serializable{ public TransactionRes(){} public TransactionRes(BigInteger transactionId, String result, BigDecimal accountBalance){ this.transactionId = transactionId; this.result = result; this.accountBalance = accountBalance; } private BigInteger transactionId; private BigDecimal accountBalance; private String result; public BigInteger getTransactionId(){ return transactionId; } public void setTransactionId(BigInteger transactionId){ this.transactionId = transactionId; } public BigDecimal getAccountBalance(){ return accountBalance; } public void setAccountBalance(BigDecimal accountBalance){ this.accountBalance = accountBalance; } public String getResult(){ return result; } public void setResult(String result){ this.result = result; } public String toString(){ StringBuffer stringBuffer = new StringBuffer(); stringBuffer .append("TxRes-transactionId:" + transactionId) .append(";accountBalance:" + accountBalance) .append(";result:" + result); return stringBuffer.toString(); } } The BankEjbHttpBridge.java (ESB Transform component) is as follows: ------------------------------------------------------------------------------------------------ public class BankEjbHttpBridge extends TransformComponentSupport implements MessageExchangeListener{ private String name; private JBIContainer container; public BankEjbHttpBridge(JBIContainer container){ log("BankEjbHttpBridge.BankEjbHttpBridge(JBIContainer)..."); this.container = container; } public void setName(String name){ this.name = name; } public String getName(){ return name; } public Object getProxy(Class interfaceClass){ log("BankEjbHttpBridge.getProxy..."); Object proxy = null; ComponentContext context = getContext(); if (context != null) { try { log("BankEjbHttpBridge.getProxy. Creating XFire..."); XFire xfire = Jsr181LifeCycle.createXFire(context); QName service = new QName("http://servicemix.apache.org/demo", "jsrEjbEP"); log("BankEjbHttpBridge.getProxy. Creating proxy..."); proxy = (BankBI) JbiProxy.create(xfire, context, null, service, null, interfaceClass); } catch (Exception e) { e.printStackTrace(); } } return proxy; } protected boolean transform(MessageExchange exchange, NormalizedMessage in, NormalizedMessage out) throws MessagingException { System.out.println("BankEjbHttpBridge(" + name + ").onMessageExchange01. exchange.getService() = " + exchange.getService()); NormalizedMessage copyMessage = exchange.createMessage(); getMessageTransformer().transform(exchange, in, copyMessage); Source content = copyMessage.getContent(); System.out.println("BankEjbHttpBridge(" + name + ").onMessageExchange02. content = " + content); String contentString = null; if (content instanceof DOMSource){ contentString = node2XML(((DOMSource) content).getNode()); System.out.println("BankEjbHttpBridge(" + name + ").onMessageExchange03. contentString = " + contentString); } //For time being, just invoke proxy. //Later, will use JaxB to Unmarshall input XML to Java types. BankBI proxy = (BankBI) getProxy(BankBI.class); String contentReturnString = transact(proxy); out.setContent(new StringSource("<?xml version=\"1.0\" encoding=\"UTF-8\"?><Return>" + contentReturnString + "</Return>")); System.out.println("BankEjbHttpBridge(" + name + ").onMessageExchange07. End"); return true; } private String transact(BankBI proxy){ log("BankEjbHttpBridge.transact..."); TransactionRes transactionRes = null; try{ transactionRes = proxy.transact(new TransactionReq(new BigInteger(Integer.toString(1)), "Credit", new BigDecimal(100D))); } catch(Exception e){ e.printStackTrace(); } return transactionRes.toString(); } } When I invoked a SOAP HTTP client, the exception I am getting is: --------------------------------------------------------------------------------------------- D:\mike\com\java\com\mike\esb\ServiceMix\Text\EjbService\02_InvokeThroughEsb>D:\Applns\ServiceM ix\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. WARN - JmxUtils - Found more than one MBeanServer instance. Returning first f rom list. BankEjbHttpBridge.BankEjbHttpBridge(JBIContainer)... INFO - JBIContainer - Activating component for: [container=ServiceMix,name=#Subsc riptionManager#] with service: null component: [EMAIL PROTECTED] d21 INFO - ComponentMBeanImpl - Initializing component: #SubscriptionManager# INFO - DeploymentService - Restoring service assemblies 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 INFO - JBIContainer - Activating component for: [container=ServiceMix,name=ejbHtt pBridge] with service: {http://servicemix.apache.org/demo}ejbHttpBridge component: BankEjbHttpBridge @10a5c21 INFO - ComponentMBeanImpl - Initializing component: ejbHttpBridge INFO - JBIContainer - Activating component for: [container=ServiceMix,name=ID:TVM KVML19213-2284-1150610962318-0:0] with service: null component: org.apache.servicemix.http.HttpSprin [EMAIL PROTECTED] INFO - ComponentMBeanImpl - Initializing component: ID:TVMKVML19213-2284-1150610962318- 0:0 INFO - log - Logging to [EMAIL PROTECTED] via org.m ortbay.log.Slf4jLog INFO - log - jetty 6.0.0beta15 INFO - log - Started SelectChannelConnector @ localhost:8192 BankEjbHttpBridge(1).onMessageExchange01. exchange.getService() = {http://servicemix.apache.org/demo }ejbHttpBridge BankEjbHttpBridge(1).onMessageExchange02. content = [EMAIL PROTECTED] BankEjbHttpBridge(1).onMessageExchange03. contentString = <?xml version="1.0" encoding="UTF-8"?><m:t ransact xmlns:m="http://www.mike.com/j2ee/bea/EightOneTwo/BankTransaction" xmlns:env="http://sch emas.xmlsoap.org/soap/envelope/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd ="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><transacti onReq xmlns:n1="java:com.mike.j2ee.bea.EightOneTwo.BankTransaction" xsi:type="n1:TransactionReq" ><accountId xsi:type="xsd:integer">1</accountId><action xsi:type="xsd:string">Credit</action><amount xsi:type="xsd:decimal">100</amount></transactionReq></m:transact> BankEjbHttpBridge.getProxy... BankEjbHttpBridge.getProxy. Creating XFire... BankEjbHttpBridge.getProxy. Creating proxy... BankEjbHttpBridge.transact... org.codehaus.xfire.XFireRuntimeException: Could not invoke service.. Nested exception is org.codehau s.xfire.fault.XFireFault: Error sending jbi exchange org.codehaus.xfire.fault.XFireFault: Error sending jbi exchange at org.codehaus.xfire.fault.XFireFault.createFault(XFireFault.java:89) at org.codehaus.xfire.handler.OutMessageSender.invoke(OutMessageSender.java:30) at org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:98) at org.codehaus.xfire.client.Client.invoke(Client.java:360) at org.codehaus.xfire.client.XFireProxy.handleRequest(XFireProxy.java:77) at org.codehaus.xfire.client.XFireProxy.invoke(XFireProxy.java:57) at $Proxy1.transact(Unknown Source) at BankEjbHttpBridge.transact(BankEjbHttpBridge.java:120) at BankEjbHttpBridge.transform(BankEjbHttpBridge.java:107) at org.apache.servicemix.components.util.TransformComponentSupport.onMessageExchange(Transfo rmComponentSupport.java:48) at org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImp l.java:564) at org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:171) at org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:222) at org.apache.geronimo.connector.work.WorkerContext.run(WorkerContext.java:291) at EDU.oswego.cs.dl.util.concurrent.PooledExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Thread.java:595) Caused by: org.codehaus.xfire.XFireException: Error sending jbi exchange at org.apache.servicemix.jsr181.xfire.JbiChannel.send(JbiChannel.java:121) at org.codehaus.xfire.handler.OutMessageSender.invoke(OutMessageSender.java:26) ... 14 more Caused by: org.codehaus.xfire.fault.XFireFault: Unable to write 'TxReq-accountId:1;amount:100;action :Credit' [com.mike.j2ee.bea.EightOneTwo.BankTransaction.TransactionReq] at org.codehaus.xfire.aegis.type.basic.ObjectType.handleNullType(ObjectType.java:234) at org.codehaus.xfire.aegis.type.basic.ObjectType.writeObject(ObjectType.java:169) at org.codehaus.xfire.aegis.AegisBindingProvider.writeParameter(AegisBindingProvider.java:11 1) at org.codehaus.xfire.service.binding.AbstractBinding.writeParameter(AbstractBinding.java:27 5) at org.codehaus.xfire.service.binding.WrappedBinding.writeMessage(WrappedBinding.java:89) at org.apache.servicemix.jsr181.xfire.JbiChannel.getContent(JbiChannel.java:142) at org.apache.servicemix.jsr181.xfire.JbiChannel.send(JbiChannel.java:93) ... 15 more ERROR - SedaQueue - [EMAIL PROTECTED] got error processing MessageExchange[ id: ID:TVMKVML19213-2284-1150610962318-4:0 status: Active role: provider service: {http://servicemix.apache.org/demo}ejbHttpBridge endpoint: ejbHttpBridge operation: echo in: <?xml version="1.0" encoding="UTF-8"?><m:transact xmlns:m="http://www.mike.com/j2ee/bea/Ei ghtOneTwo/BankTransaction" xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenc="http ://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http: //www.w3.org/2001/XMLSchema-instance"><transactionReq xmlns:n1="java:com.mike.j2ee.bea.EightOneT wo.BankTransaction" xsi:type="n1:TransactionReq"><accountId xsi:type="xsd:integer">1</accountId><act ion xsi:type="xsd:string">Credit</action><amount xsi:type="xsd:decimal">100</amount></transactionReq ></m:transact> ] java.lang.NullPointerException at BankEjbHttpBridge.transact(BankEjbHttpBridge.java:125) at BankEjbHttpBridge.transform(BankEjbHttpBridge.java:107) at org.apache.servicemix.components.util.TransformComponentSupport.onMessageExchange(Transfo rmComponentSupport.java:48) at org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImp l.java:564) at org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:171) at org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:222) at org.apache.geronimo.connector.work.WorkerContext.run(WorkerContext.java:291) at EDU.oswego.cs.dl.util.concurrent.PooledExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Thread.java:595) ERROR - log - /Service/: java.lang.IllegalStateException: Exchange not found at org.apache.servicemix.http.processors.ConsumerProcessor.process(ConsumerProcessor.java:18 3) at org.apache.servicemix.http.HttpBridgeServlet.doPost(HttpBridgeServlet.java:70) at javax.servlet.http.HttpServlet.service(HttpServlet.java:615) at javax.servlet.http.HttpServlet.service(HttpServlet.java:688) at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:423) at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:355) at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:542) at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:1 45) at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:126) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:119) at org.mortbay.jetty.Server.handle(Server.java:245) at org.mortbay.jetty.HttpConnection.handlerRequest(HttpConnection.java:365) at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:290) at org.mortbay.jetty.nio.SelectChannelConnector$HttpEndPoint.run(SelectChannelConnector.java :740) at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:435) ERROR - log - /Service/ java.lang.IllegalStateException: Exchange not found at org.apache.servicemix.http.processors.ConsumerProcessor.process(ConsumerProcessor.java:18 3) at org.apache.servicemix.http.HttpBridgeServlet.doPost(HttpBridgeServlet.java:70) at javax.servlet.http.HttpServlet.service(HttpServlet.java:615) at javax.servlet.http.HttpServlet.service(HttpServlet.java:688) at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:423) at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:355) at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:542) at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:1 45) at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:126) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:119) at org.mortbay.jetty.Server.handle(Server.java:245) at org.mortbay.jetty.HttpConnection.handlerRequest(HttpConnection.java:365) at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:290) at org.mortbay.jetty.nio.SelectChannelConnector$HttpEndPoint.run(SelectChannelConnector.java :740) at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:435) My Assumption: --------------------- I have to somehow provide a typemapping for my types TransactionReq & TransactionRes. I am not able to figure out how to do that. Any hints... Thanks in Advance - Mike. -- View this message in context: http://www.nabble.com/XFireFault%3A-Unable-to-write---How-2-provide-typemapping--t1805648.html#a4920966 Sent from the ServiceMix - User forum at Nabble.com.
