dynamic timeout for camel split - timeout

I am using camel 2.13.2 and want to set timeout for camel:split that can be read from exchange.
static timeout works well.
<camel:split timeout="500">
but not the following. assume I have set property.timeout as an exchange property
<camel:split timeout="{{property.timeout}}">
I get following error during server startup
Caused by: org.xml.sax.SAXParseException; lineNumber: 75; columnNumber: 67; cvc-datatype-valid.1.2.1: '{{property.timeout}}' is not a valid value for 'integer'.
Is there anyway timeout for split can be set in dynamic way?
Appreciate your help!

Yes you need to specify this using the prop prefix which is documented in the Camel website. See the section Using Property Placeholders for Any Kind of Attribute in the XML DSL at: http://camel.apache.org/using-propertyplaceholder.html
So that becomes
<camel:split prop:timeout="{{property.timeout}}">
And you need to remember to add prop in the top of the XML file as a namespace, eg
`xmlns:prop="http://camel.apache.org/schema/placeholder"`
But see more details in that link.

Related

User defined script timed out. Timeout is set to 30.0 s

Hi I an integrating my python code for time series forecasting with tableau using tabpy. While executing the code as calculated field it giving this erro: "User defined script timed out. Timeout is set to 30.0 s.". I have increased timeout in default.config already. Please suggest some sulution.
It looks like the value of TABPY_EVALUATE_TIMEOUT is hard coded somewhere in the python code used for tabpy server.
check in the tabpy\tabpy_server\app\app.py file, if you find out any hard coded value there just change the number to your required value or else check in other python files in the folder for the hard coded value and change it.
Incase you didn't find that path check in the log file of the tabpy, you will get to know that path.
According to the documentation you can set this parameter in your configuration file and when you launch Tabpy from the command line, just specify absolute to your configuration file like this: tabpy --config=absolute/path/to/your/config/file.conf
You can find a configuration file example under the link above. The parameter which you need to set is TABPY_EVALUATE_TIMEOUT, so in your case configuration file could look like this(if you want to extend timeout time to 2 minutes, for example):
[TabPy]
TABPY_EVALUATE_TIMEOUT = 120
All other parameters will be taken from default configuration file.

xml to xml field attribute transformation using ESQL on message broker compute node

I am new to message broker development. I tried to convert source SOAP over xml file to target SOAP over xml file.On my message flow source message discarded to catch terminal.I am not able to find out the problem
my flow : MQINPUT NODE ---> COMPUTE NODE --> MQOUTPUT NODE
If any provide solution on this that may me helpful for me.
DECLARE soapenv CHARACTER 'SOAP-ENV';
SET OutputRoot.XMNLSC.soapenv:Envelope.soapenv:Body.params.ORIGIN_TYPE_CD = InputRoot.XMNLSC.soapenv:Envelope.soapenv:Body.params.originType;
**
Your first line is definitely wrong, but you should be able to see that from the exceptions you are getting.
The first line should be:
DECLARE soapenv NAMESPACE 'http://schemas.xmlsoap.org/soap/envelope/';
An in the further lines the domain should be XMLNSC not XMNLSC.

Camel stored procedure call can't use variables?

Trying to build a generic REST-to-stored-procedure bridge along this approach:
from("jetty:http://0.0.0.0:8080/{procedure}")
.to("sql-stored:${header.procedure}()");
Which gives the error
org.apache.camel.component.sql.stored.template.generated.ParseException: Encountered " <SIMPLE_EXP_TOKEN> "${header.procedure} "" at line 1, column 1.
Was expecting:
<IDENTIFIER> ...
at org.apache.camel.component.sql.stored.template.generated.SSPTParser.generateParseException(SSPTParser.java:370)
at org.apache.camel.component.sql.stored.template.generated.SSPTParser.jj_consume_token(SSPTParser.java:308)
at org.apache.camel.component.sql.stored.template.generated.SSPTParser.parse(SSPTParser.java:27)
at org.apache.camel.component.sql.stored.template.TemplateParser.parseTemplate(TemplateParser.java:41)
... 38 more
I saw examples using header variables in sql-stored at many places but always when binding variables. How could I set the name of the stored procedure dynamically?
You are trying to send the message to a dynamic endpoint. The destination uri will depend on the ${header.procedure} content.
From Camel 2.16 onwards you can use "toD" to tell Camel that your destination endpoint is dynamic.
There is more information here http://camel.apache.org/how-to-use-a-dynamic-uri-in-to.html and here http://camel.apache.org/message-endpoint.html

Why doesn't the default attribute for number fields work for Jenkins jelly configurations?

I'm working on a Jenkins plugin where we make a call out to a remote service using Spring's RestTemplate. To configure the timeout values, I'm setting up some fields in the global configuration using the global.jelly file for Jenkins plugins using a number field as shown here:
<f:entry title="Read Timeout" field="readTimeout" description="Read timeout in ms.">
<f:number default="3000"/>
</f:entry>
Now, this works to save the values and retrieve the values no problem, so it looks like everything is setup correctly for my BuildStepDescriptor. However, when I first install the update to a Jenkins instance, instead of getting 3000 in the field by default as I would expect, instead I am getting 0. This is the same for all the fields that I'm using.
Given that the Jelly tag reference library says this attribute should be the default value, why do I keep seeing 0 when I first install the plugin?
Is there some more Java code that needs to be added to my plugin to tie the default in Jelly back to the global configuration?
I would think that when Jenkins starts, it goes to get the plugin configuration XML and fails to find a value and sets it to a default of 0.
I have got round this in the past by setting a default in the descriptor (in groovy) then this value will be saved into the global config the first time in and also be available if the user never visits the config page.
#Extension
static class DescriptorImpl extends AxisDescriptor {
final String displayName = 'Selenium Capability Axis'
String server = 'http://localhost:4444'
Boolean sauceLabs = false
String sauceLabsName
Secret sauceLabsPwd
String sauceLabsAPIURL =
'http://saucelabs.com/rest/v1/info/platforms/webdriver'
String sauceLabsURL = 'http://ondemand.saucelabs.com:80'
from here

F# WsdlService type provider proxy

I am following the MSDN tutorial for the WsdlService type provider found here. When I run it at home, it works as expected. When I write the same code at work, I am getting a design time exception:
The type provider
'Microsoft.FSharp.Data.TypeProviders.DesignTime.DataProviders'
reported an error: Error: Cannot obtain Metadata from
http://msrmaps.com/TerraService2.asmx?WSDL
Work does use a proxy and I have to alter the web.config to use a default proxy when consuming WSDL from a C# project in VS2012. When I looked at the parameters for the type provider, I don't see a mention about a proxy. Does anyone have any suggestions?
Thanks in advance.
Expanding on Tomas's answer...
This is a common pattern in the built-in type providers today:
At design time, if you need any kind of non-default configuration (e.g. credentials, proxy config, ...), the type provider will not work. You need to download some schema file locally (e.g. DB schema file, ODATA $metadata file, WSDL schema file...), and point the type provider at that, usually by passing LocalSchemaFile="...", ForceUpdate=false in the static constructor. This feeds the TP all the info it needs to generate the types.
Then, you set all of your non-default config programmatically on the objects that are created for you, so that everything works at runtime.
Here's another example of essentially the same issue, where this pattern is used to set credentials.
In the case of WSDL, below is the programmatic approach to set the proxy after-the-fact (i.e. step #2). Cribbed entirely from this answer, which is exactly what you want, in C#. You'll probably need to play with this a bit to make it work for you.
#r "System.ServiceModel.dll"
#r "FSharp.Data.TypeProviders.dll"
open Microsoft.FSharp.Data.TypeProviders
type Terra = WsdlService< ServiceUri="N/A", ForceUpdate = false,
LocalSchemaFile = #"C:\temp\terra.wsdlschema">
let terra = Terra.GetTerraServiceSoap()
let binding = terra.DataContext.Endpoint.Binding :?> System.ServiceModel.BasicHttpBinding
binding.ProxyAddress <- System.Uri("http://127.0.0.1:8888")
binding.BypassProxyOnLocal <- false
binding.UseDefaultWebProxy <- false
terra.GetPlaceList("New York", 1, false)
I'm not connecting through a proxy, so I have no way of actually testing this, but I think you should be able to use local WSDL file to load the type provider in the designer.
Try downloading the WSDL schema (from http://msrmaps.com/TerraService2.asmx?WSDL) and saving that to a local file (such as C:\temp\terra.wsdlschema). Then you should be able to write:
#r "System.ServiceModel.dll"
#r "FSharp.Data.TypeProviders.dll"
open Microsoft.FSharp.Data.TypeProviders
type Terra = WsdlService< ServiceUri="N/A", ForceUpdate = false,
LocalSchemaFile = #"C:\temp\terra.wsdlschema">
let terra = Terra.GetTerraServiceSoap()
terra.GetPlaceList("New York", 1, false)
The ServiceUri parameter seems to be required, but it should be ignored if you add ForceUpdate=false. It should only require the cached WSDL file. I'm not entirely sure how to configure the runtime to use your config file setting, but I'm sure this can be done in some way (either it just works or you can pass something to the GetTerraServiceSoap method).
Sadly, the type provider does not statically know (at design time) where to look for the config file, so it ignores it.

Resources