camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Willem Jiang <willem.ji...@gmail.com>
Subject Re: Is there a way to avoid %20 character when using producerTemplate
Date Wed, 23 Mar 2011 07:48:49 GMT
You can set query on the sql endpoint by calling setQuery() method of 
sql endpoint. You can update your query just before call the 
template.send()

Willem

On 3/23/11 3:32 PM, Charles Moulliard wrote:
> Hi Willem,
>
> Do you think that I can create dynamically the XXX part of the URI
> instead of hard coded it in the @EndpointInject(uri = "sql://xxx") ?
>
> 1) Normally, the SQL component will be used using this syntax
>
> <to uri="sql:select * from REPORT where incidentRef = '#'"/>
>
> and # symbol will be used by the component to replace the value from
> the Body message send to this endpoint
>
> 2) But I would like to define it in a more dynamically way using a
> ProducerTemplate and Bean
>
>          StringBuilder query = new StringBuilder();
>          query.append("sql:INSERT INTO REPORT.T_INCIDENT (INCIDENT_REF,\n" +
>                  "
> INCIDENT_DATE,GIVEN_NAME,FAMILY_NAME,SUMMARY,DETAILS,EMAIL,PHONE)\n" +
>                  "       VALUES (");
>          query.append("'" + ref + "'");
>          query.append("'2011-03-21','Charles','Moulliard','Incident
> Webinar','This is a\n" +
>                  "                    report incident for
> webinar-001','cmoulliard@fusesource.com','+111 10 20 300'");
>
>          template.send(query.toString(), (Exchange) null);
>
> Regards,
>
> Charles Moulliard
>
> Sr. Principal Solution Architect - FuseSource
> Apache Committer
>
> Blog : http://cmoulliard.blogspot.com
> Twitter : http://twitter.com/cmoulliard
> Linkedin : http://www.linkedin.com/in/charlesmoulliard
> Skype: cmoulliard
>
>
>
> On Wed, Mar 23, 2011 at 8:05 AM, Willem Jiang<willem.jiang@gmail.com>  wrote:
>> Hi Charles,
>>
>> I think you can add the endpoint in your Camel bean like this
>> @EndpointInject(uri = "sql://xxx")
>> protected Endpoint sql;
>> and use template.sendBody(endpoint, body) to send the message.
>>
>> or use call template.sendBody("sql:xxx", body) to send the request.
>>
>> Willem
>>
>> On 3/23/11 2:11 PM, Charles Moulliard wrote:
>>>
>>> Hi Willem,
>>>
>>> The producer has been defined like that :
>>>
>>> 1) Spring XML
>>>
>>> <bean id="sql" class="org.apache.camel.component.sql.SqlComponent">
>>> <property name="dataSource" ref="reportdb"/>
>>> </bean>
>>>
>>> <bean id="reportdb"
>>> class="org.springframework.jdbc.datasource.DriverManagerDataSource">
>>> <property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
>>> <property name="url" value="jdbc:hsqldb:hsql://localhost/reportdb"/>
>>> <property name="username" value="sa"/>
>>> <property name="password" value=""/>
>>> </bean>
>>>
>>> 2) Camel bean
>>>
>>> private ProducerTemplate template;
>>>
>>> public void insertRecord(@Body String ref) {
>>>
>>> StringBuilder query = new StringBuilder();
>>> query.append("INSERT INTO REPORT.T_INCIDENT (INCIDENT_REF,\n" +
>>> "
>>> INCIDENT_DATE,GIVEN_NAME,FAMILY_NAME,SUMMARY,DETAILS,EMAIL,PHONE)\n" +
>>> " VALUES (");
>>> query.append("'" + ref + "'");
>>> query.append("'2011-03-21','Charles','Moulliard','Incident
>>> Webinar','This is a\n" +
>>> " report incident for
>>> webinar-001','cmoulliard@fusesource.com
>>> <mailto:cmoulliard@fusesource.com>','+111 10 20 300'");
>>>
>>> template.sendBody("sql", query.toString());
>>>
>>>
>>> }
>>>
>>> Should I define an endpoint ?
>>>
>>> Regards,
>>>
>>> Charles
>>>
>>>
>>> On 23/03/11 05:52, Willem Jiang wrote:
>>>>
>>>> Hi Charles,
>>>>
>>>> How did you setup the default endpoint of the producerTemplate?
>>>> It looks the query is used be resolved as an CamelEndpoint, that could
>>>> explain why this line of code is called.
>>>> at
>>>>
>>>> org.apache.camel.impl.DefaultComponent.createEndpoint(DefaultComponent.java:57)
>>>>
>>>>
>>>> Willem
>>>>
>>>> On 3/23/11 1:05 AM, Charles Moulliard wrote:
>>>>>
>>>>> I use a ProducerTemplate to create the SQL query send to sql endpoint.
>>>>> When I launch camel, I get this error :
>>>>>
>>>>> Caused by: java.net.URISyntaxException: Illegal character in opaque
>>>>> part at index 54:
>>>>> sql:INSERT%20INTO%20REPORT.T_INCIDENT%20(INCIDENT_REF,
>>>>>
>>>>> %20%20%20%20%20%20%20INCIDENT_DATE,GIVEN_NAME,FAMILY_NAME,SUMMARY,DETAILS,EMAIL,PHONE)
>>>>>
>>>>>
>>>>> %20%20%20%20%20%20%20VALUES%20('099','2011-03-21','Charles','Moulliard','Incident%20Webinar','This%20is%20a
>>>>>
>>>>>
>>>>> %20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20report%20incident%20for%20webinar-001','cmoulliard@fusesource.com','+111%2010%2020%20300'
>>>>>
>>>>> at java.net.URI$Parser.fail(URI.java:2809)
>>>>> at java.net.URI$Parser.checkChars(URI.java:2982)
>>>>> at java.net.URI$Parser.parse(URI.java:3019)
>>>>> at java.net.URI.<init>(URI.java:578)
>>>>> at
>>>>>
>>>>> org.apache.camel.impl.DefaultComponent.createEndpoint(DefaultComponent.java:57)
>>>>>
>>>>> 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:597)
>>>>>
>>>>> Is there a way to avoid that ?
>>>>>
>>>>> Here is the code :
>>>>>
>>>>> public void insertRecord(@Body String ref) {
>>>>>
>>>>> StringBuilder query = new StringBuilder();
>>>>> query.append("sql:INSERT INTO REPORT.T_INCIDENT (INCIDENT_REF,\n" +
>>>>> "
>>>>> INCIDENT_DATE,GIVEN_NAME,FAMILY_NAME,SUMMARY,DETAILS,EMAIL,PHONE)\n"
+
>>>>> " VALUES (");
>>>>> query.append("'" + ref + "'");
>>>>> query.append("'2011-03-21','Charles','Moulliard','Incident
>>>>> Webinar','This is a\n" +
>>>>> " report incident for
>>>>> webinar-001','cmoulliard@fusesource.com','+111 10 20 300'");
>>>>>
>>>>> template.sendBody(query.toString());
>>>>>
>>>>>
>>>>> }
>>>>>
>>>>> Regards,
>>>>>
>>>>>
>>>>> Charles Moulliard
>>>>>
>>>>> Sr. Principal Solution Architect - FuseSource
>>>>> Apache Committer
>>>>>
>>>>> Blog : http://cmoulliard.blogspot.com
>>>>> Twitter : http://twitter.com/cmoulliard
>>>>> Linkedin : http://www.linkedin.com/in/charlesmoulliard
>>>>> Skype: cmoulliard
>>>>>
>>>>
>>>>
>>>
>>
>>
>> --
>> Willem
>> ----------------------------------
>> FuseSource
>> Web: http://www.fusesource.com
>> Blog:    http://willemjiang.blogspot.com (English)
>>          http://jnn.javaeye.com (Chinese)
>> Twitter: willemjiang
>>
>


-- 
Willem
----------------------------------
FuseSource
Web: http://www.fusesource.com
Blog:    http://willemjiang.blogspot.com (English)
          http://jnn.javaeye.com (Chinese)
Twitter: willemjiang

Mime
View raw message