用java调用https webservice
最近在做一个调用webservice的客户端,之前做过,以为很容易,但这过程中遇到的一些问题让我发现自己懂的还是太少。
webservice的服务端是需要证书认证的,证书已经发给我了,cer格式的,使用java的keytool工具提取证书后,在调用webservice时执行以下语句:
System.setProperty("javax.net.ssl.trustStore", "xxxx.truststore");
告诉服务端我客户端是有证书的,目前来看没问题。
接下来,我用axis2的wsdl2java生成了客户端的代码,结果一执行就出现如下错误:
<?xml version="1.0" encoding="UTF-8" ?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SOAP-ENV:Body>
<SOAP-ENV:Fault>
<faultcode>SOAP-ENV:Client</faultcode>
<faultstring>[ISS.0088.9109] SOAP is only supported using HTTP POST protocol</faultstring>
<faultactor>http://bcv50s6e.vz.cit.alcatel.fr:8657/soap/WS_UPL</faultactor>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
在soap的开发文档中查到这个错,是因为请求的soap message格式错误,文档地址:http://documentation.softwareag.com/webmethods/wmsuite7/Developer/Guides/7-1-1_SOAP_Developers_Guide.pdf(89页)
这时对方要求我把soap request message发过去,我对webservice只是停留在用的阶段,会用axis,xfire之类的工具写服务端和客户端,但是对soap就是一知半解了,上网找资料,问同事,折腾了半天,总算把request message找出来了。同事给的方法是用tcp monitor之类的工具,但是webservice是https格式的,不能用,后来在生成的客户端代码里把SOAPEnvelope.toString()打出来才得到,如下:
<?xml version='1.0' encoding='utf-8'?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<ns1:UPLGenerate xmlns:ns1="http://www.alcatel-lucent.com/webService/WS_UPL">
<OperationCode>1</OperationCode>
<Plant>2</Plant>
<QuoteNumber>3</QuoteNumber>
<UserID>4</UserID>
<IncludePriceType>5</IncludePriceType>
</ns1:UPLGenerate>
</soapenv:Body>
</soapenv:Envelope>
我猜测,请求message的格式是不是应该和错误返回的xml一样?如果是的话,我就要自定义请求message的格式了,求各位帮忙!
[解决办法]
你是把wsdl下载到本地后再用来生成client的吗?不是的话,可以试试
还有axis2生成客户端有四种方法,你也可以试试别的方法?
[解决办法]
最近在做一个调用webservice的客户端,之前做过,以为很容易,但这过程中遇到的一些问题让我发现自己懂的还是太少。
这个跟LZ同感啊,,,现在我也挠头呢.
我想知道LZ的这个信息(SOAP-Fault)是进行什么设置了?才会出现???
<?xml version="1.0" encoding="UTF-8" ?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SOAP-ENV:Body>
<SOAP-ENV:Fault>
<faultcode>SOAP-ENV:Client </faultcode>
<faultstring>[ISS.0088.9109] SOAP is only supported using HTTP POST protocol </faultstring>
<faultactor>http://bcv50s6e.vz.cit.alcatel.fr:8657/soap/WS_UPL </faultactor>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>