2
votes

Recently I got a requirement from one of our customer. They provided a WSDL to call their service. They are doing IP whitelisting for authentication. I gave my server public IP and it got whitelisted. First, I tested that service through SOAP UI tool and it got worked without any issues. Then I integrated through JAVA code and it got failed. I am getting an exception like

Unable to sendViaPost to url[https://apps.greystar.com/gsWebService/gsExtract.asmx] org.apache.axis2.AxisFault: Transport error: 401 Error: Unauthorized at org.apache.axis2.transport.http.impl.httpclient3.HTTPSenderImpl.handleResponse(HTTPSenderImpl.java:343) ~[axis2-transport-http-1.7.1.jar:1.7.1] at org.apache.axis2.transport.http.impl.httpclient3.HTTPSenderImpl.sendViaPost(HTTPSenderImpl.java:213) ~[axis2-transport-http-1.7.1.jar:1.7.1] at org.apache.axis2.transport.http.HTTPSender.send(HTTPSender.java:121) [axis2-transport-http-1.7.1.jar:1.7.1] at org.apache.axis2.transport.http.CommonsHTTPTransportSender.writeMessageWithCommons(CommonsHTTPTransportSender.java:403) [axis2-transport-http-1.7.1.jar:1.7.1] at org.apache.axis2.transport.http.CommonsHTTPTransportSender.invoke(CommonsHTTPTransportSender.java:234) [axis2-transport-http-1.7.1.jar:1.7.1] at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:431) [axis2-kernel-1.7.1.jar:1.7.1] at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:399) [axis2-kernel-1.7.1.jar:1.7.1] at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:225) [axis2-kernel-1.7.1.jar:1.7.1] at org.apache.axis2.client.OperationClient.execute(OperationClient.java:150) [axis2-kernel-1.7.1.jar:1.7.1] at com.reputation.r4e.integrator.greystar.ExtractDataStub.greystarExtract(ExtractDataStub.java:300) [classes/:na] at com.reputation.r4e.integrator.recordreader.GreystarLocationImportRecordReader.getGreystarExtractResponse(GreystarLocationImportRecordReader.java:198) [classes/:na] at com.reputation.r4e.integrator.recordreader.GreystarLocationImportRecordReader.process(GreystarLocationImportRecordReader.java:97) [classes/:na] at com.reputation.r4e.integrator.impl.DefaultPipeline.flow(DefaultPipeline.java:33) [classes/:na] at com.reputation.r4e.integrator.impl.DefaultPipeline.process(DefaultPipeline.java:52) [classes/:na] at com.reputation.r4e.integrator.importer.NullImporter.process(NullImporter.java:38) [classes/:na] at com.reputation.r4e.integrator.impl.DefaultPipeline.flow(DefaultPipeline.java:33) [classes/:na] at com.reputation.r4e.integrator.impl.DefaultPipeline.process(DefaultPipeline.java:52) [classes/:na] at com.reputation.r4e.integrator.IntegrationRunner$IntegrationRunnable.run(IntegrationRunner.java:87) [classes/:na] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_45] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_45] at java.lang.Thread.run(Thread.java:745) [na:1.8.0_45]

It's saying 401 unauthorised error. How it got worked through SOAP UI and why its not working through a JAVA client.?

I monitor http traffic through TCPMon and except headers all are same. So I added the headers which got from the SOAP UI tool to my JAVA Client but still no luck. I am getting the same 401 unauthorised error.

Here are the soap request of both SOAP UI and through JAVA Client.

SOAP UI Request:

POST https://apps.greystar.com/gsWebService/gsExtract.asmx HTTP/1.1
Accept-Encoding: gzip,deflate
Content-Type: application/soap+xml;charset=UTF-8;action="https://apps.greystar.com/greystarExtract"
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36
Content-Length: 692
Host: apps.greystar.com
Connection: Keep-Alive

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"  xmlns:apps="https://apps.greystar.com/">
  <soap:Header/>
  <soap:Body>
     <apps:greystarExtract>
        <apps:axmlVendorCode>VENDOR_CODE</apps:axmlVendorCode>
        <apps:axmlToken>PASSWORD</apps:axmlToken>
        <apps:axmlExtractType>PROPERTY_LIST</apps:axmlExtractType>
        <apps:axmlFormat>XML</apps:axmlFormat>
        <apps:axmlParameters></apps:axmlParameters>
     </apps:greystarExtract>
  </soap:Body>
</soap:Envelope>

JAVA CLIENT Request:

POST /gsWebService/gsExtract.asmx HTTP/1.1
Content-Type: application/soap+xml; charset=UTF-8; action="https://apps.greystar.com/greystarExtract
Accept-Encoding: gzip,deflate
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36[\r][\n]
Connection: Keep-Alive
Host: apps.greystar.com
Transfer-Encoding: chunked

<?xml version='1.0' encoding='UTF-8'?>
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
     <soapenv:Header />
     <soapenv:Body>
        <ns1:greystarExtract xmlns:ns1="https://apps.greystar.com/">
           <ns1:axmlVendorCode>VENDOR_CODE</ns1:axmlVendorCode>
           <ns1:axmlToken>PASSWORD</ns1:axmlToken>
           <ns1:axmlExtractType>PROPERTY_LIST</ns1:axmlExtractType>
           <ns1:axmlFormat>JSON</ns1:axmlFormat>
           <ns1:axmlParameters></ns1:axmlParameters>
        </ns1:greystarExtract>
     </soapenv:Body>
</soapenv:Envelope>

Note: I added JAVA Client headers by looking at the SOAP UI headers. The actual JAVA client headers are below

POST /gsWebService/gsExtract.asmx HTTP/1.1
Content-Type: application/soap+xml; charset=UTF-8;               
action="https://apps.greystar.com/greystarExtract
User-Agent: Axis2
Host: apps.greystar.com
Transfer-Encoding: chunked

What could be the reason for failing this through JAVA client.? Can any one please answer my question because I stuck over here.

Thanks in advance, Amar.T

1
Are the certificates on the destination server valid?BlackFlag
I am just user to use that service. I don't know about the server code. If the certificate is invalid how that got work through SOAP UI.?Amar
Well the last time I tried to implement soap in android I got hold up when the server certificate wasn't valid and therefore not trustful. So the framework decided to stop the communication. What happens if you try to open the wsdl in your browser? Do you see a valid certificate?BlackFlag
Yes I am able to see a valid certificate in the browser. But the problem is I am getting the result from SOAP UI tool but not through JAVA client. If its not a valid certificate the SOAP UI should fail right.?Amar
Well when my client refused the connection SOAP UI still worked without any problems.BlackFlag

1 Answers

0
votes

I tried other third party libraries and its working as expected. I tried CXF and SOAP UI JAVA API and its working as expected. I don't know why its not working with APACHE AXIS2.

If anyone finds the answer why its not working with AXIS2 please post the answer.

Thanks & Regards, Amar.T