Hi,

You need know what's the outgoing jbi message looks like based on your wsdl and transform your message accordingly. In your work flow, I believe you can see the incoming jbi message in the log, would you please append it with your wsdl, so that I can tell what's the outgoing message should be.

Freeman


brijesh wrote:
Freeman, I am getting the mapping data from a db, eg: I have few elements in incoming xml <product_id> prod001</product_id> which I need to replace as <product_id>pr001</product_id> , and this mapping is done in a mapping
table. using servicemix-bean i am calling database and replacing the element
data and passing it another servicemix-bean which calls an ejbs method. After replacing the xml elements I am sending the content to another bean which is configured through EIP static-routing-slip, code for setting content as follows InOut inOut = (InOut)exchange; NormalizedMessage normalizedMessage = inOut.getInMessage(); //String outMessage = processXml(normalizedMessage); //this method will substitute element from database. String outMessage ="<sample>this is sample xml</sample>"; normalizedMessage.setContent(new StringSource(outMessage)); MessageUtil.transferInToOut(inOut, inOut); channel.send(inOut);
Wondering how to i convert it into jbi message so that i will not get the
error as i mentioned before


thanks for the help Brijesh


Freeman Fang wrote:
Hi,
If you just want to replace some content of the incoming message and return, how about you use servicemix-camel instead of the servicemix-bean? There shouldn't be marshalling/unmarshalling for your case IMO, just replace the message.
You should know the format of  incoming and outgoing message.

And yes, the servicemix-cxf-se will do the marshalling/unmarshalling for you based on the wsdl model, but it's always used for real object invocation, not suitable for your scenario.

Freeman

brijesh wrote:
Freeman, thanks for the response,
As i mentioned previous post, I am sending back the response from my
servicemix-bean class. Wondering how do I transform according to wsdl
model,
or should i use different jbi component instead of servicemix-bean  so
that
, i can convert easily???
I am using bean component to replace incoming data from database. for
marshalling/unmarshalling am using xmlbean .
will it solves if use servicemix-cxf-se instead  servicemix-bean to do
the
transformation  according to the wsdl model??

thanks
Brijesh N K



Freeman Fang wrote:
Hi,
There is no simple way to do it, since the soap binding message or jbi binding message are based on the wsdl, you need do the transform according to the wsdl model.
Freeman

brijesh wrote:
Hi Freeman, thanks for the response
i need to send a return message as "<sample>this is sample
xml</sample>" from servicemix-bean to client through servicemix-bc, following is code snippet for this
.......................
InOut inOut = (InOut)exchange; NormalizedMessage normalizedMessage = inOut.getInMessage(); //String outMessage = processXml(normalizedMessage); String outMessage ="<sample>this is sample xml</sample>"; normalizedMessage.setContent(new StringSource(outMessage)); MessageUtil.transferInToOut(inOut, inOut); channel.send(inOut);
..................

is there any utility in MessageUtil to convert this plan xml content to
soap
binding message or jbi binding message????
regards

Brijesh N K







Freeman Fang wrote:
Hi,

Cxf bc expect soap binding message or jbi binding message, but the message "<sample>this is sample xml</sample>" from your bean is invalid for the cxf bc.

Freeman

brijesh wrote:
hello,
I am calling servicemix-bean through cxf-bc, but i am getting soap
fault
as
follows
<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/";>
   <soap:Body>
      <soap:Fault>
         <faultcode>soap:Server</faultcode>
         <faultstring>Message wrapper element is '{}sample' but
expected
'{http://java.sun.com/xml/ns/jbi/wsdl-11-wrapper}message'</faultstring>
      </soap:Fault>
   </soap:Body>
</soap:Envelope>


code for service-bean as follows
public class ContractSchemaDataMapper implements
MessageExchangeListener
{

    @Resource
    private DeliveryChannel channel;
    private static final Log logger =
LogFactory.getLog(ContractSchemaDataMapper.class);

    public void onMessageExchange(MessageExchange exchange) throws
MessagingException {
        
if (exchange.getStatus() == ExchangeStatus.ACTIVE) { logger.debug("## Received exchange with status ACTIVE: " + exchange); System.out.println("## Received exchange with status ACTIVE: "
+
exchange);
InOut inOut = (InOut)exchange; NormalizedMessage normalizedMessage = inOut.getInMessage(); //String outMessage = processXml(normalizedMessage); String outMessage ="<sample>this is sample xml</sample>"; normalizedMessage.setContent(new StringSource(outMessage)); MessageUtil.transferInToOut(inOut, inOut); channel.send(inOut); } else{ logger.debug("## Received exchange but status not ACTIVE: " + exchange); }
    }
  }

and the stack trace as follows
INFO: Interceptor has thrown exception, unwinding now
org.apache.cxf.interceptor.Fault: Message wrapper element is
'{}sample'
but
expected '{http://java.sun.com/xml/ns/jbi/wsdl-11-wrapper}message'
        at
org.apache.servicemix.cxfbc.interceptors.JbiOutWsdl1Interceptor.handleMessage(JbiOutWsdl1Interceptor.java:103)
        at
org.apache.servicemix.cxfbc.interceptors.JbiOutWsdl1Interceptor.handleMessage(JbiOutWsdl1Interceptor.java:62)
        at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:220)
        at
org.apache.cxf.interceptor.OutgoingChainInterceptor.handleMessage(OutgoingChainInterceptor.java:74)
        at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:220)
        at
org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:77)
        at
org.apache.cxf.transport.http_jetty.JettyHTTPDestination.serviceRequest(JettyHTTPDestination.java:278)
        at
org.apache.cxf.transport.http_jetty.JettyHTTPDestination.doService(JettyHTTPDestination.java:252)
        at
org.apache.cxf.transport.http_jetty.JettyHTTPHandler.handle(JettyHTTPHandler.java:70)
        at
org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:757)
        at
org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:206)
        at
org.mortbay.jetty.handler.HandlerList.handle(HandlerList.java:49)
        at
org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
        at org.mortbay.jetty.Server.handle(Server.java:324)
        at
org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:502)
        at
org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:840)
        at
org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:657)
        at
org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
        at
org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:377)
        at
org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
        at
org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:497)
Caused by: java.lang.Exception: Message wrapper element is '{}sample'
but
expected '{http://java.sun.com/xml/ns/jbi/wsdl-11-wrapper}message'
        ... 21 more




Any idea on this ,
regards

Brijesh N K




Reply via email to