java - 发出 SOAP 请求时出现 401 错误未经授权

标签 java web-services soap wsdl

最近我收到一位客户的要求。他们提供了 WSDL 来调用他们的服务。他们正在将 IP 白名单列入身份验证。我给了我的服务器公共(public)IP,它被列入白名单。首先,我通过 SOAP UI 工具测试了该服务,它运行正常,没有任何问题。然后我通过JAVA代码集成,失败了。我遇到了类似

的异常

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]

显示 401 未经授权的错误。它是如何通过 SOAP UI 工作的以及为什么它不能通过 JAVA 客户端工作?

我通过 TCPMon 监控 http 流量,除了 header 之外,所有内容都是相同的。因此,我将从 SOAP UI 工具获取的 header 添加到我的 JAVA 客户端,但仍然没有成功。我也遇到了同样的 401 未经授权的错误。

以下是 SOAP UI 和通过 JAVA 客户端发出的 SOAP 请求。

SOAP UI 请求:

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 客户端请求:

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>

注意:我通过查看 SOAP UI header 添加了 JAVA 客户端 header 。实际的 JAVA 客户端 header 如下

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

通过 JAVA 客户端失败的原因可能是什么?任何人都可以回答我的问题吗,因为我被困在这里。

提前致谢, 阿马尔.T

最佳答案

我尝试了其他第三方库,它的工作符合预期。我尝试了 CXF 和 SOAP UI JAVA API 并按预期工作。我不知道为什么它不能与 APACHE AXIS2 一起使用。

如果有人找到了为什么它不能与 AXIS2 一起使用的答案,请发布答案。

谢谢和问候, 阿马尔.T

关于java - 发出 SOAP 请求时出现 401 错误未经授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39683248/

相关文章:

java - 有人可以建议一个带有需求规范文档和 junit 测试的开源 java 项目吗?

java - JScrollPane中的JTextArea, View 坐标平移

在 Tomcat 中部署 war 文件时出现 java.lang.reflect.MalformedParameterizedTypeException

java - 是否能够在构建过程中将 REST 端点标记为忽略?

java - 错误为 XMLRootElement 中有两个名为 "userName"的属性

php - 用于获取产品信息的 Magento API 调用

java - Excel上传不显示小数

web-services - Web 服务 - SOAPui - 接收器无法序列化节点 AXIS2

python - Django 中的 Web 服务

java - 在外部修改时流式传输并发集合是否安全?