What it does in BusinessWorks
Sends an HTTP request to a target built from the activity’s configuration: host, port, path and whether the connection is TLS, each of which can be a literal or mapped from the data space. The input mapping fills the request body and any headers, and the activity’s output carries the response (status, headers and body) addressable downstream the same way any other activity output is.
Timeouts, retries and connection reuse are engine-level HTTP client settings, not part of the activity itself, which is why they rarely show up in the process file and easily get lost in a migration that only reads the activity.
The Camel equivalent
<pd:activity name="Call Pricing Service">
<pd:type>com.tibco.plugin.http.client
.HttpRequestActivity
</pd:type>
<config>
<httpMethod>POST</httpMethod>
</config>
<pd:inputBindings>
<Host>
<xsl:value-of
select="'api.internal.example.net'"/>
</Host>
<Port>
<xsl:value-of select="'443'"/>
</Port>
<RequestURI>
<xsl:value-of select="'/v1/orders'"/>
</RequestURI>
<EnableSSL>
<xsl:value-of select="'true'"/>
</EnableSSL>
</pd:inputBindings>
</pd:activity>// the whole activity, as emitted
.setHeader("CamelHttpMethod", constant("POST"))
.setHeader("tibco_host", simple("..."))
.setHeader("tibco_port", simple("..."))
.setHeader("tibco_requesturi", simple("..."))
.setHeader("tibco_enablessl", simple("..."))
.bean("sendHTTPRequestHttpRequestBuilder",
"build")
.toD("${header.targetUrl}"
+ "?throwExceptionOnFailure=false")
.bean("sendHTTPRequestHttpResponseHandler",
"handle")Where the semantics diverge
Building the URL is not this rule’s job, and nothing fills it in by default. The four
configuration fields become four headers with a tibco_ prefix, and the actual request target,
${header.targetUrl}, is left to a bean the rule names but does not write:
<name>HttpRequestBuilder. Until that bean is implemented, the generator’s own fallback registers
it as a stub, a pass-through that returns the body unchanged and sets no header at all. The route
compiles and starts; targetUrl is simply never set, so the request has nowhere to go.
That fallback is deliberate, and worth understanding on its own terms. Every bean name the
generator references but does not generate a real implementation for gets a matching stub in a
shared CommonStubBeans configuration, guarded by @ConditionalOnMissingBean so a real
@Component under the same name silently takes over once written. It is what keeps a whole module
compiling before every activity in it has been ported by hand: useful during a migration in
progress, and easy to mistake for a working integration if the stub is never replaced.
The response handler has the same shape and the same gap. <name>HttpResponseHandler is
expected to turn the raw HTTP response into whatever the process mapped downstream from this
activity’s output; unimplemented, its stub does the same pass-through.
Retries, timeouts and connection reuse are not read. Whatever the engine’s HTTP resource
configured is not part of this activity’s own <config>, is not looked at by the rule, and has no
equivalent in the generated route: the .toD(...) call carries only
throwExceptionOnFailure=false.
Treat HttpRequestBuilder and HttpResponseHandler as the two beans every migrated HTTP call
needs written by hand: the first setting targetUrl and any headers the target expects, the second
mapping the response body and status the way the original activity’s output was consumed.
What the toolchain does
An unconditional rule, so no marker is attached to the activity itself. It sets CamelHttpMethod
from the configured method, sets a tibco_<field> header for each of Host, Port, RequestURI and
EnableSSL that has an input binding, calls a builder bean, sends with
.toD("${header.targetUrl}?throwExceptionOnFailure=false"), then calls a handler bean. Both beans
are named after the activity and are auto-stubbed, as described above, until a real implementation
with the same Spring bean name replaces the stub.