Timeout error using pub.client:http

Good day

I am new to webMethods. I am trying to consume and API using pub.client:http. I get the following error when running the flow service

Launch started: 2024-09-10 09:17:41.668
Configuration name: Jokes_flowservice
Configuration location: C:/Users/keletsom/workspace/.metadata/.plugins/org.eclipse.debug.core/.launches/Jokes_flowservice.launch

Could not run ‘Jokes_flowservice’
com.wm.app.b2b.server.ServiceException: java.io.IOException: java.net.ConnectException: Connection timed out: connect

com.wm.app.b2b.server.ServiceException: java.io.IOException: java.net.ConnectException: Connection timed out: connect
at pub.clientimpl.http(clientimpl.java:1524)
at sun.reflect.GeneratedMethodAccessor664.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.wm.app.b2b.server.JavaService.baseInvoke(JavaService.java:411)
at com.wm.app.b2b.server.invoke.InvokeManager.process(InvokeManager.java:744)
at com.wm.app.b2b.server.util.tspace.ReservationProcessor.process(ReservationProcessor.java:46)
at com.wm.app.b2b.server.invoke.StatisticsProcessor.process(StatisticsProcessor.java:61)
at com.wm.app.b2b.server.invoke.ServiceCompletionImpl.process(ServiceCompletionImpl.java:250)
at com.wm.app.b2b.server.invoke.ValidateProcessor.process(ValidateProcessor.java:56)
at com.wm.app.b2b.server.invoke.PipelineProcessor.process(PipelineProcessor.java:178)
at com.wm.app.b2b.server.ACLManager.process(ACLManager.java:345)
at com.wm.app.b2b.server.invoke.DispatchProcessor.process(DispatchProcessor.java:41)
at com.wm.app.b2b.server.AuditLogManager.process(AuditLogManager.java:401)
at com.wm.app.b2b.server.invoke.InvokeManager.invoke(InvokeManager.java:615)
at com.wm.app.b2b.server.invoke.InvokeManager.invoke(InvokeManager.java:425)
at com.wm.app.b2b.server.invoke.InvokeManager.invoke(InvokeManager.java:383)
at com.wm.app.b2b.server.ServiceManager.invoke(ServiceManager.java:253)
at com.wm.app.b2b.server.BaseService.invoke(BaseService.java:236)
at com.wm.lang.flow.FlowInvoke.invoke(FlowInvoke.java:267)
at com.wm.lang.flow.FlowState.invokeNode(FlowState.java:668)
at com.wm.lang.flow.FlowState.step(FlowState.java:534)
at com.wm.lang.flow.FlowState.invoke(FlowState.java:501)
at com.wm.app.b2b.server.FlowSvcImpl.baseInvoke(FlowSvcImpl.java:1150)
at com.wm.app.b2b.server.invoke.InvokeManager.process(InvokeManager.java:744)
at com.wm.app.b2b.server.util.tspace.ReservationProcessor.process(ReservationProcessor.java:46)
at com.wm.app.b2b.server.invoke.StatisticsProcessor.process(StatisticsProcessor.java:61)
at com.wm.app.b2b.server.invoke.ServiceCompletionImpl.process(ServiceCompletionImpl.java:250)
at com.wm.app.b2b.server.invoke.ValidateProcessor.process(ValidateProcessor.java:56)
at com.wm.app.b2b.server.invoke.PipelineProcessor.process(PipelineProcessor.java:178)
at com.wm.app.b2b.server.ACLManager.process(ACLManager.java:345)
at com.wm.app.b2b.server.invoke.DispatchProcessor.process(DispatchProcessor.java:41)
at com.wm.app.b2b.server.AuditLogManager.process(AuditLogManager.java:401)
at com.wm.app.b2b.server.invoke.InvokeManager.invoke(InvokeManager.java:615)
at com.wm.app.b2b.server.invoke.InvokeManager.invoke(InvokeManager.java:425)
at com.wm.app.b2b.server.invoke.InvokeManager.invoke(InvokeManager.java:383)
at com.wm.app.b2b.server.ServiceManager.invoke(ServiceManager.java:253)
at com.wm.app.b2b.server.comm.DefaultServerRequestHandler.handleMessage(DefaultServerRequestHandler.java:127)
at com.wm.app.b2b.server.HTTPMessageHandler.process(HTTPMessageHandler.java:163)
at com.wm.app.b2b.server.HTTPDispatch.handleRequest(HTTPDispatch.java:223)
at com.wm.app.b2b.server.Dispatch.run(Dispatch.java:425)
at com.wm.util.pool.PooledThread.run(PooledThread.java:134)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.io.IOException: java.net.ConnectException: Connection timed out: connect
at com.wm.ext.jsse.JSSESecureSocketFactory.newSocket(JSSESecureSocketFactory.java:586)
at com.wm.ext.jsse.JSSESecureSocketFactory.createSocket(JSSESecureSocketFactory.java:973)
at com.wm.ext.jsse.JSSESecureSocketFactory.createSocket(JSSESecureSocketFactory.java:499)
at com.wm.net.socket.pool.SocketPool.getSocketWrapper(SocketPool.java:216)
at com.wm.net.socket.pool.SocketPoolManager._getSocketWrapper(SocketPoolManager.java:166)
at com.wm.net.socket.pool.SocketPoolManager.getSocketWrapper(SocketPoolManager.java:148)
at com.wm.net.NetURLConnection.getSocket(NetURLConnection.java:988)
at com.wm.net.NetURLConnection.openDirectConnection(NetURLConnection.java:966)
at com.wm.net.NetURLConnection.connect(NetURLConnection.java:200)
at com.wm.net.NetURLConnection.getInputStream(NetURLConnection.java:410)
at com.wm.net.NetURLConnection.getInputStream(NetURLConnection.java:307)
at com.wm.net.HttpContext.getFinalInputStream(HttpContext.java:1075)
at com.wm.net.HttpContext.getInputStream(HttpContext.java:429)
at com.wm.net.HttpContext.getInputStream(HttpContext.java:400)
at com.wm.net.HttpContext.get(HttpContext.java:443)
at com.wm.net.HttpContext.get(HttpContext.java:450)
at pub.clientimpl.http(clientimpl.java:1362)
… 42 more
Caused by: java.net.ConnectException: Connection timed out: connect
at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at com.wm.ext.jsse.JSSESecureSocketFactory.newSocket(JSSESecureSocketFactory.java:534)

Hi @keletsom

Seems like a Network issue. Few pointers below

  1. Is there a Firewall at either your or the Target system? If yes then mostly Whitelisting of Hostnames and IPs must be required.
  2. Have you tried to Access the same API via other tools like Postman and SOAP UI? If yes are you getting response when using these tools

HI @Kailash_Mishra

  1. Yes. I checked the IS and I get Error [ISP.0046.0019C] (tid=1170) Unable to establish connection to Enterprise Gateway Server .1.**.60:****. Exception: Connection timed out: connect.
  2. I am able to access the API from the server where IS is being hosted.

Hi,

looks like an issue with your reverse invoke configuration.
Can you share more details about your configuration, i.e. why you are using an Enterprise Gateway (Reverse Invoke scenario) here?

Regards,
Holger

HI @Holger_von_Thomsen

Was already set up when I joined(trying to understand) , I cant give a sure answer as to why or how yet.

Looks like the IS where Enterprise Gateway is setup has expired licenses.
I cant connect to it from the server I am working on.

Thanks

Keletso

Hi,

in this case, you should try to get in contact with the responsible admin for obtaining a new valid license for your Enterprise Gateaway.

Regards,
Holger

Hi, Thank you for the help

pub.client:http that includes a custom header or data field to represent “Prava Software Solutions” located at Mancherial — this could be useful if you want to pass organization details along with the HTTP request:


:white_check_mark: Example Code with Prava Software Solutions & Mancherial Info

java

CopyEdit

// pipeline variables
IDataCursor pipelineCursor = pipeline.getCursor();

// Prepare input document
IData inputDoc = IDataFactory.create();
IDataCursor inputCursor = inputDoc.getCursor();

// HTTP Method and URL
IDataUtil.put(inputCursor, "method", "post");
IDataUtil.put(inputCursor, "url", "https://your-api-endpoint.com/resource");

// Headers
IData headers = IDataFactory.create();
IDataCursor headersCursor = headers.getCursor();
IDataUtil.put(headersCursor, "Content-Type", "application/json");
// Optional: Adding company info in header (if applicable)
IDataUtil.put(headersCursor, "X-Organization", "Prava Software Solutions");
IDataUtil.put(headersCursor, "X-Location", "Mancherial");
headersCursor.destroy();

IDataUtil.put(inputCursor, "headers", headers);

// Body (JSON data including company information)
IData data = IDataFactory.create();
IDataCursor dataCursor = data.getCursor();

// Example JSON body
String jsonBody = "{"
    + "\"company\": \"Prava Software Solutions\","
    + "\"location\": \"Mancherial\","
    + "\"message\": \"This is a test write operation.\""
    + "}";

IDataUtil.put(dataCursor, "json", jsonBody);
dataCursor.destroy();

IDataUtil.put(inputCursor, "data", data);

// Timeouts (adjust as necessary to prevent timeout errors)
IData timeouts = IDataFactory.create();
IDataCursor timeoutsCursor = timeouts.getCursor();
IDataUtil.put(timeoutsCursor, "socketTimeout", "30000"); // 30 seconds
IDataUtil.put(timeoutsCursor, "connectTimeout", "10000"); // 10 seconds
timeoutsCursor.destroy();

IDataUtil.put(inputCursor, "timeouts", timeouts);

inputCursor.destroy();

// Invoke pub.client:http
IData outputDoc = Service.doInvoke("pub.client", "http", inputDoc);

// Handle output
IDataCursor outputCursor = outputDoc.getCursor();
String response = IDataUtil.getString(outputCursor, "body");
String status = IDataUtil.getString(outputCursor, "status");
String statusMessage = IDataUtil.getString(outputCursor, "statusMessage");
outputCursor.destroy();

// Set output in pipeline
IDataUtil.put(pipelineCursor, "response", response);
IDataUtil.put(pipelineCursor, "status", status);
IDataUtil.put(pipelineCursor, "statusMessage", statusMessage);

pipelineCursor.destroy();

:white_check_mark: What was added/modified:

  1. Company and Location in Header:

java

CopyEdit

IDataUtil.put(headersCursor, "X-Organization", "Prava Software Solutions");
IDataUtil.put(headersCursor, "X-Location", "Mancherial");
  • These custom headers can be read by the receiving API/server.
  1. Company and Location in JSON Body:

json

CopyEdit

{
  "company": "Prava Software Solutions",
  "location": "Mancherial",
  "message": "This is a test write operation."
}
  1. Timeout Settings to help avoid timeout errors.

:gear: Things to Consider:

  • Adjust timeouts based on how slow/fast the target API responds.
  • Replace "https://your-api-endpoint.com/resource" with your actual endpoint.
  • Headers like "X-Organization" are custom headers, and should be handled by the server you are posting to.

Reasonable info – but why so much Java code?

Also, beware of using X- headers. Lots of mixed guidance on the web about them.