1

We got a WSDL from a 3rd party company. It had a hard-coded IP in it:

<wsdl:service name="SomeWebService">
    <wsdl:port binding="tns:SomeWebService_SOAP_HTTP" name="SomeWebServicePort">
        <soap:address location="http://192.168.0.7:9010/WSProject/SomeWebService"/>
    </wsdl:port>
</wsdl:service>

We generated clients and mock services from this, and all was well. I guess that IP was getting ignored, because it's definitely not a valid URL in our domain.

Recently they announced they had to change tools, and supplied us with a new WSDL. In some ways, it's cleaner and looks better. But the same section still has a hard-coded IP.

<WL5G3N0:service name="SomeWebService">
<WL5G3N0:port binding="WL5G3N2:SomeWebService" name="SomeWebServicePort">
  <WL5G3N3:address location="http://192.168.0.7:9010/WSProject/SomeWebServicePort"/>
</WL5G3N0:port>

The wierd looking namespace aside, they added Port to the URL, and all was strange. We generated a mock service and a JUnit client that talks to the mock and works. But the same client code, used by the real code in the same webapp as the mock service, fails with the below. Notice the IP in the first line. Again, that is not used anywhere else in the app, and is not valie in our network.

We are setting the URL through the client as normal, and it works in some conditions as described above. What to do?

[9/16/15 9:48:00:413 EDT] 000000ce WSChannelFram A   CHFW0019I: The Transport Channel Service has started chain HttpOutboundChain:192.168.0.7:9010.
[9/16/15 9:48:21:546 EDT] 000000ce SystemOut     O 2015-09-16 09:48:21:541 org.quartz.core.JobRunShell - Job DEFAULT.VendorUploadTask threw an unhandled Exception: 
javax.xml.ws.soap.SOAPFaultException: java.net.ConnectException: Connection timed out: no further information
   at org.apache.axis2.jaxws.marshaller.impl.alt.MethodMarshallerUtils.createSystemException(MethodMarshallerUtils.java:1353) ~[org.apache.axis2.jar:?]
   at org.apache.axis2.jaxws.marshaller.impl.alt.MethodMarshallerUtils.demarshalFaultResponse(MethodMarshallerUtils.java:1079) ~[org.apache.axis2.jar:?]
   at org.apache.axis2.jaxws.marshaller.impl.alt.RPCLitMethodMarshaller.demarshalFaultResponse(RPCLitMethodMarshaller.java:558) ~[org.apache.axis2.jar:?]
   at org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler.getFaultResponse(JAXWSProxyHandler.java:626) ~[org.apache.axis2.jar:?]
   at org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler.createResponse(JAXWSProxyHandler.java:566) ~[org.apache.axis2.jar:?]
   at org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler.invokeSEIMethod(JAXWSProxyHandler.java:432) ~[org.apache.axis2.jar:?]
   at org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler.invoke(JAXWSProxyHandler.java:213) ~[org.apache.axis2.jar:?]
   at com.sun.proxy.$Proxy273.processRequest(Unknown Source) ~[?:?]
   at my.org.st05client.usms.St05Client.sendToWS(St05Client.java:31) ~[classes/:?]
   at my.org.job.VendorUploadJob.sendXml(VendorUploadJob.java:154) ~[classes/:?]
   at my.org.job.VendorUploadJob.executeInternal(VendorUploadJob.java:122) ~[classes/:?]
   at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:111) ~[spring-context-support-4.0.0.RELEASE.jar:4.0.0.RELEASE]
   at org.quartz.core.JobRunShell.run(JobRunShell.java:223) [quartz-1.8.6.jar:?]
   at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:549) [quartz-1.8.6.jar:?]
Caused by: java.net.ConnectException: Connection timed out: no further information
   at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) ~[?:1.6.0]
   at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:614) ~[?:1.6.0]
   at com.ibm.ws.tcp.channel.impl.WorkQueueManager.attemptConnectWork(WorkQueueManager.java:866) ~[?:CCX.CF [o1103.02]]
   at com.ibm.ws.tcp.channel.impl.ConnectionManager.getConnection(ConnectionManager.java:185) ~[?:CCX.CF [o1103.02]]
   at com.ibm.ws.tcp.channel.impl.TCPConnLink.connectCommon(TCPConnLink.java:252) ~[?:CCX.CF [o1103.02]]
   at com.ibm.ws.tcp.channel.impl.TCPConnLink.connect(TCPConnLink.java:201) ~[?:CCX.CF [o1103.02]]
   at com.ibm.wsspi.channel.base.OutboundProtocolLink.connect(OutboundProtocolLink.java:87) ~[?:CCX.CF [o1103.02]]
   at com.ibm.ws.http.channel.outbound.impl.HttpOutboundLink.connect(HttpOutboundLink.java:281) ~[com.ibm.ws.runtime.jar:?]
   at com.ibm.ws.channel.framework.impl.OutboundVirtualConnectionImpl.connect(OutboundVirtualConnectionImpl.java:79) ~[?:CCX.CF [o1103.02]]
   at com.ibm.ws.websvcs.transport.http.HTTPConnection.doConnect(HTTPConnection.java:484) ~[com.ibm.wsfp.main.jar:?]
   at com.ibm.ws.websvcs.transport.http.HTTPConnection.connect(HTTPConnection.java:199) ~[com.ibm.wsfp.main.jar:?]
   at com.ibm.ws.websvcs.transport.http.SOAPOverHTTPSender.setupHTTPConnection(SOAPOverHTTPSender.java:2146) ~[com.ibm.wsfp.main.jar:?]
   at com.ibm.ws.websvcs.transport.http.SOAPOverHTTPSender.<init>(SOAPOverHTTPSender.java:2087) ~[com.ibm.wsfp.main.jar:?]
   at com.ibm.ws.websvcs.transport.http.HTTPTransportSender.invoke(HTTPTransportSender.java:352) ~[com.ibm.wsfp.main.jar:?]
   at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:544) ~[org.apache.axis2.jar:?]
   at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:406) ~[org.apache.axis2.jar:?]
   at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:229) ~[org.apache.axis2.jar:?]
   at org.apache.axis2.client.OperationClient.execute(OperationClient.java:165) ~[org.apache.axis2.jar:?]
   at org.apache.axis2.jaxws.core.controller.impl.AxisInvocationController.execute(AxisInvocationController.java:578) ~[org.apache.axis2.jar:?]
   at org.apache.axis2.jaxws.core.controller.impl.AxisInvocationController.doInvoke(AxisInvocationController.java:127) ~[org.apache.axis2.jar:?]
   at org.apache.axis2.jaxws.core.controller.impl.InvocationControllerImpl.invoke(InvocationControllerImpl.java:93) ~[org.apache.axis2.jar:?]
   at org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler.invokeSEIMethod(JAXWSProxyHandler.java:419) ~[org.apache.axis2.jar:?]
   ... 8 more
2015-09-16 09:48:21:546 org.quartz.core.ErrorLogger - Job (DEFAULT.VendorUploadTask threw an exception.
org.quartz.SchedulerException: Job threw an unhandled exception.
   at org.quartz.core.JobRunShell.run(JobRunShell.java:234) [quartz-1.8.6.jar:?]
   at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:549) [quartz-1.8.6.jar:?]
Caused by: javax.xml.ws.soap.SOAPFaultException: java.net.ConnectException: Connection timed out: no further information
   at org.apache.axis2.jaxws.marshaller.impl.alt.MethodMarshallerUtils.createSystemException(MethodMarshallerUtils.java:1353) ~[org.apache.axis2.jar:?]
   at org.apache.axis2.jaxws.marshaller.impl.alt.MethodMarshallerUtils.demarshalFaultResponse(MethodMarshallerUtils.java:1079) ~[org.apache.axis2.jar:?]
   at org.apache.axis2.jaxws.marshaller.impl.alt.RPCLitMethodMarshaller.demarshalFaultResponse(RPCLitMethodMarshaller.java:558) ~[org.apache.axis2.jar:?]
   at org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler.getFaultResponse(JAXWSProxyHandler.java:626) ~[org.apache.axis2.jar:?]
   at org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler.createResponse(JAXWSProxyHandler.java:566) ~[org.apache.axis2.jar:?]
   at org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler.invokeSEIMethod(JAXWSProxyHandler.java:432) ~[org.apache.axis2.jar:?]
   at org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler.invoke(JAXWSProxyHandler.java:213) ~[org.apache.axis2.jar:?]
   at com.sun.proxy.$Proxy273.processRequest(Unknown Source) ~[?:?]
   at my.org.st05client.usms.St05Client.sendToPACES(St05Client.java:31) ~[classes/:?]
   at my.org.job.VendorUploadJob.sendXml(VendorUploadJob.java:154) ~[classes/:?]
   at my.org.job.VendorUploadJob.executeInternal(VendorUploadJob.java:122) ~[classes/:?]
   at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:111) ~[spring-context-support-4.0.0.RELEASE.jar:4.0.0.RELEASE]
   at org.quartz.core.JobRunShell.run(JobRunShell.java:223) ~[quartz-1.8.6.jar:?]
   ... 1 more
Caused by: java.net.ConnectException: Connection timed out: no further information
   at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) ~[?:1.6.0]
   at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:614) ~[?:1.6.0]
   at com.ibm.ws.tcp.channel.impl.WorkQueueManager.attemptConnectWork(WorkQueueManager.java:866) ~[?:CCX.CF [o1103.02]]
   at com.ibm.ws.tcp.channel.impl.ConnectionManager.getConnection(ConnectionManager.java:185) ~[?:CCX.CF [o1103.02]]
   at com.ibm.ws.tcp.channel.impl.TCPConnLink.connectCommon(TCPConnLink.java:252) ~[?:CCX.CF [o1103.02]]
   at com.ibm.ws.tcp.channel.impl.TCPConnLink.connect(TCPConnLink.java:201) ~[?:CCX.CF [o1103.02]]
   at com.ibm.wsspi.channel.base.OutboundProtocolLink.connect(OutboundProtocolLink.java:87) ~[?:CCX.CF [o1103.02]]
   at com.ibm.ws.http.channel.outbound.impl.HttpOutboundLink.connect(HttpOutboundLink.java:281) ~[com.ibm.ws.runtime.jar:?]
   at com.ibm.ws.channel.framework.impl.OutboundVirtualConnectionImpl.connect(OutboundVirtualConnectionImpl.java:79) ~[?:CCX.CF [o1103.02]]
   at com.ibm.ws.websvcs.transport.http.HTTPConnection.doConnect(HTTPConnection.java:484) ~[com.ibm.wsfp.main.jar:?]
   at com.ibm.ws.websvcs.transport.http.HTTPConnection.connect(HTTPConnection.java:199) ~[com.ibm.wsfp.main.jar:?]
   at com.ibm.ws.websvcs.transport.http.SOAPOverHTTPSender.setupHTTPConnection(SOAPOverHTTPSender.java:2146) ~[com.ibm.wsfp.main.jar:?]
   at com.ibm.ws.websvcs.transport.http.SOAPOverHTTPSender.<init>(SOAPOverHTTPSender.java:2087) ~[com.ibm.wsfp.main.jar:?]
   at com.ibm.ws.websvcs.transport.http.HTTPTransportSender.invoke(HTTPTransportSender.java:352) ~[com.ibm.wsfp.main.jar:?]
   at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:544) ~[org.apache.axis2.jar:?]
   at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:406) ~[org.apache.axis2.jar:?]
   at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:229) ~[org.apache.axis2.jar:?]
   at org.apache.axis2.client.OperationClient.execute(OperationClient.java:165) ~[org.apache.axis2.jar:?]
   at org.apache.axis2.jaxws.core.controller.impl.AxisInvocationController.execute(AxisInvocationController.java:578) ~[org.apache.axis2.jar:?]
   at org.apache.axis2.jaxws.core.controller.impl.AxisInvocationController.doInvoke(AxisInvocationController.java:127) ~[org.apache.axis2.jar:?]
   at org.apache.axis2.jaxws.core.controller.impl.InvocationControllerImpl.invoke(InvocationControllerImpl.java:93) ~[org.apache.axis2.jar:?]
   at org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler.invokeSEIMethod(JAXWSProxyHandler.java:419) ~[org.apache.axis2.jar:?]
   at org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler.invoke(JAXWSProxyHandler.java:213) ~[org.apache.axis2.jar:?]
   at com.sun.proxy.$Proxy273.processRequest(Unknown Source) ~[?:?]
   at my.org.st05client.usms.St05Client.sendToPACES(St05Client.java:31) ~[classes/:?]
   at my.org.job.VendorUploadJob.sendXml(VendorUploadJob.java:154) ~[classes/:?]
   at my.org.job.VendorUploadJob.executeInternal(VendorUploadJob.java:122) ~[classes/:?]
   at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:111) ~[spring-context-support-4.0.0.RELEASE.jar:4.0.0.RELEASE]
   at org.quartz.core.JobRunShell.run(JobRunShell.java:223) ~[quartz-1.8.6.jar:?]
   ... 1 more
Entropy
  • 1,219
  • 6
  • 21
  • 45
  • Just noticed - That TransportChannel statement appears to be coming from the mock service, not the client. The rest is still a mystery. – Entropy Sep 16 '15 at 15:15
  • There are 2 ways a WebService client determine an endpoint address, the first one via BindingProvider and the second one via WSDL's port section. So, in your case you should check the way you get it, because in case of the second, your client will try to connect to the eddress from WSDL and will fault with timeout exception. Take a look at this task http://stackoverflow.com/questions/2490737/how-to-change-webservice-url-endpoint – Stanislav Sep 16 '15 at 15:19
  • @Stanislav - Thanks for the quick reply. Yes, we are using the BindingProvider setting on the client. And the above section is the only place in the WSDL with an IP. Everything else is a placeholder along the lines of: http://SomeWS/SomeWebService.wsdl. – Entropy Sep 16 '15 at 16:20

1 Answers1

0

Eventually, we found references to the old service still lingering in the ibm web-bind xml, and in some very curious generated file in the wsdl directory we'd never seen before that we thing was an artifact of the fact that we generated the new service client while the old was still in the project.

We tried tweking our way of the problem to no avail and eventually settled on "scorched earth". We deleted every trace of either client and regenerated from scratch. And that worked.

Entropy
  • 1,219
  • 6
  • 21
  • 45