Hi Daniel,

      Sorry for the delay, took me a while to get my computer back in
order. You lost me there for a while with the converters but then I
found the code in Servicemix that calls them and the light bulb went
on. Who needs documentation anyways ? :))


      This looks great actually. I haven't been able to make it work
yet because I've been using the camel-integration component inside my
SA bundle and that means it's not the same classpath as Camel. But
that's not a big problem. I can just deploy it as a fragment so that
the converters will be available. This is OSGi territory so much more
familiar ground :). I'll try it over the weekend and will post on my
blog about it or something once I get it up and running.


thanks,
             Sorin.


On Fri, Aug 27, 2010 at 11:22 AM, Daniel Bevenius
<daniel.beven...@gmail.com> wrote:
> Hey Sorin,
>
> so I've been thinking about this and I think you should now be able to skip
> the convertBodyTo call since we now have the converter from the Smooks
> specific class org.milyn.payload.StringResult. So in your example you could
> remove the convertBodyTo element.
>
> We might need to add more converters but this is very easy in Camel and you
> can also do this yourself. You could for example create your own set of
> converter that convert to your domain objects, or in the case you have now
> you could have added your own custom converter to get around this issue with
> us not yet having one for the type in question.
>
> To add a converter you can take the following steps.
> 1. Create a class and annotate it with @Converter:
> package my.customer.converters;
>
> @Converter
> public class CustomConverter
> {
>    private CustomConverter()
>    {
>    }
>
>   �...@converter
>    public static StreamSource toStreamSource(StringResult stringResult)
>    {
>        String result = stringResult.getResult();
>        if (result != null)
>        {
>            StringReader stringReader = new StringReader(result);
>            return new StreamSource(stringReader);
>        }
>
>        return null;
>    }
> }
> 2. Add a file named
> META-INF/services/org/apache/camel/component/TypeConverter with the
> following content:
> my.customer.converters
>
> 3. Package your converter and put it in Camels classpath so that Camel can
> find it.
>
> 4. Now when Camel needs to convert between types your custom type converter
> will be considered and used if they types match. You can also explicitly
> call convert using camelContext.getTypeConverter.convertTo(type, value).
>
> So if we supply a fair number of converter for the types we know about and
> also make sure that we document how users of Smooks can add their own I
> think this would be a reasonable solution. What do you think?
>
> Regards,
>
> /Daniel
>
>
> 2010/8/26 Daniel Bevenius <daniel.beven...@gmail.com>
>
>> Hey Sorin,
>>
>> >Isn't this something that Camel or Servicemix has to handle ?
>> I think this my fault and this should be handled by the Smooks/Camel
>> integration which I need to make more intuitive. Let me think about this and
>> see if I can improve this.
>>
>> Regards,
>>
>> /Daniel
>>
>>
>> 2010/8/26 Sorin Silaghi <sorin7...@gmail.com>
>>
>> Hey Daniel,
>>>
>>>
>>>      Yes I'm using the same example. What I did in order to test this
>>> out was I changed the SmooksDataFormat class to return StreamSource
>>> instead of StringResult. It's not a permanent solution but right now
>>> I'm just trying to learn about these things.
>>>
>>>      Now the converter example will probably work. I wasn't able to
>>> test it because I'm having some trouble with my machine right now. I
>>> wasn't able to look deeper into the string conversion either. But the
>>> question is should users really have to do one of these conversions ?
>>> Isn't this something that Camel or Servicemix has to handle ? I mean
>>> it doesn't seem exactly intuitive that these conversions are required.
>>>
>>>
>>> thanks for all the help,
>>> Sorin.
>>>
>>>
>>> On Wed, Aug 25, 2010 at 9:19 PM, Daniel Bevenius
>>> <daniel.beven...@gmail.com> wrote:
>>> > Hey Sorin,
>>> >
>>> > that looks correct to me and this should work as we provide a converter
>>> from
>>> > StringResult to String.
>>> >  We've also added a converter now that can convert directly from
>>> > StringResult to a StreamSource which you could try but since the String
>>> did
>>> > not work I don't expect that will.
>>> > Could you add a log element that logs the result of the formatter too:
>>> > <log message="After SmooksDataFormat: ${body}"/>
>>> >
>>> > Are you using the same example that you posted previously to the Smooks
>>> user
>>> > list? If not, could you send me an updated version and I'll try this out
>>> > tomorrow.
>>> >
>>> > Regards,
>>> >
>>> > /Daniel
>>> >
>>> > Can you try adding a log element to the route make sure the Smooks
>>> >
>>> > 2010/8/25 Sorin Silaghi <sorin7...@gmail.com>
>>> >
>>> >> Pardon my ignorance but do you mean like this:
>>> >>
>>> >>            <route>
>>> >>              <from
>>> >> uri="jbi:endpoint:
>>> >> http://servicemix.apache.org/samples/bridge/marshaled/edi-endpoint"/>
>>> >>              <unmarshal ref="myEdifact"/>
>>> >>               <convertBodyTo type="java.lang.String"/>
>>> >>               <to
>>> >> uri="nmr:{http://servicemix.apache.org/samples/bridge}ftp:sender<http://servicemix.apache.org/samples/bridge%7Dftp:sender>
>>> "/>
>>> >>            </route>
>>> >>
>>> >> because that doesn't work.
>>> >>
>>> >>
>>> >>
>>> >> On Wed, Aug 25, 2010 at 5:47 PM, Claus Ibsen <claus.ib...@gmail.com>
>>> >> wrote:
>>> >> > You can most likely just convert to String before sending to NMR
>>> >> >     <convertBodyTo type="String"/>
>>> >> >
>>> >> >
>>> >> >
>>> >> >
>>> >> > On Wed, Aug 25, 2010 at 4:22 PM, Sorin Silaghi <sorin7...@gmail.com>
>>> >> wrote:
>>> >> >> Hello,
>>> >> >>
>>> >> >>
>>> >> >>       I've been trying out the camel-integration component that
>>> >> >> Daniel Bevenius started from the Smooks project. If you don't know
>>> >> >> about it here's where you can find it:
>>> >> >>
>>> https://svn.codehaus.org/milyn/workspaces/tfennelly/camel-integration
>>> >> >>
>>> >> >>       The problem I had is it didn't work in Servicemix with the ftp
>>> >> >> endpoint. It seems that the problem was with the object type that
>>> was
>>> >> >> returned by the unmarshal method in SmooksDataFormat. What Smooks
>>> >> >> normally returns is an implementation of javax.xml.transform.Result
>>> >> >> and what was needed is javax.xml.transform.stream.StreamSource.
>>> >> >>
>>> >> >>       So my question is where should this type conversion take place
>>> >> >> exactly? I'm not that familiar with Camel or Servicemix. I thought
>>> I'd
>>> >> >> send this to the Camel mailing list because the problem is related
>>> to
>>> >> >> this camel-integration component but let me know if I have to move
>>> >> >> this to the Servicemix mailing list.
>>> >> >>
>>> >> >>       Bellow is the content of my camel-context.xml file:
>>> >> >>
>>> >> >>        <bean id="myEdifact"
>>> >> >> class="org.milyn.smooks.camel.dataformat.SmooksDataFormat2">
>>> >> >>
>>> >>
>>>  <constructor-arg><value>file:/home/sorin/work/EDIGrid/apache-servicemix-4.2.0/etc/smooks-config.xml</value></constructor-arg>
>>> >> >>
>>> >>
>>>  <constructor-arg><value>org.milyn.payload.StringResult</value></constructor-arg>
>>> >> >>          <constructor-arg><value>result</value></constructor-arg>
>>> >> >>        </bean>
>>> >> >>
>>> >> >>        <camelContext xmlns="http://camel.apache.org/schema/spring";>
>>> >> >>          <route>
>>> >> >>              <from
>>> >> >> uri="jbi:endpoint:
>>> >> http://servicemix.apache.org/samples/bridge/marshaled/edi-endpoint"/>
>>> >> >>              <unmarshal ref="myEdifact"/>
>>> >> >>              <to
>>> >> >> uri="nmr:{http://servicemix.apache.org/samples/bridge}ftp:sender<http://servicemix.apache.org/samples/bridge%7Dftp:sender>
>>> "/>
>>> >> >>          </route>
>>> >> >>        </camelContext>
>>> >> >>
>>> >> >>
>>> >> >> thank you,
>>> >> >>                Sorin.
>>> >> >>
>>> >> >
>>> >> >
>>> >> >
>>> >> > --
>>> >> > Claus Ibsen
>>> >> > Apache Camel Committer
>>> >> >
>>> >> > Author of Camel in Action: http://www.manning.com/ibsen/
>>> >> > Open Source Integration: http://fusesource.com
>>> >> > Blog: http://davsclaus.blogspot.com/
>>> >> > Twitter: http://twitter.com/davsclaus
>>> >> >
>>> >>
>>> >
>>>
>>
>>
>

Reply via email to