java使用HTTPURLCONNECTION调用SOAP接口如何处理返回参数过大的问题

java使用HTTPURLCONNECTION调用SOAP接口如何处理返回参数过大的问题,第1张

试试下面两种思路

可以分批次请求,一次返回一部分。 一般来说10M以内都是可以接受

服务器端返回一个文件,客户端直接接受文件。(这里接受文件肯定要用流的形式,不能用byte数组)

我做过的一个例子:

import javaxxmlnamespaceQName;

import orgapacheaxisclientCall;

import orgapacheaxisclientService;

import comyupontutilsXMLUtil;

public class ServiceTest {

public String callSGCCService(String operationName,String inputXML,String serviceName,String serverContextRoot)

{

StringBuilder result=null;

try {

String endpoint = serverContextRoot+"/services/"+serviceName;

Service service = new Service();// 创建一个服务(service)调用(call)

Call call = (Call)servicecreateCall();// 通过service创建call对象

callsetTargetEndpointAddress(new javanetURL(endpoint));// 设置service所在URL

callsetOperationName(new QName(">

当我们用web service对外提供接口服务的时候,可能很多接口会返回复杂类型,比如数组; 在此次利用Net下面WCF和我们ASSP APIAlisoft SaaS Platform API进行联调的时候,就发现了问题;如果要想让通过WSDL发布的web service具有最大化的兼容性,最好是参考WS-IWeb Services Interoperability标准,而不要仅仅局限于SOAP标准;以下就返回数组的问题进行下探讨;

ASSP API接口之一为getUsingUser,返回的对象为数组,数组元素也为复杂对象SimpleUserInfo,其中包括两个属性userId和userName;在WSDL声明此type的时候默认采用的是soapenc:Array的方式,这也是SOAP规范中的方式;其声明部分如下:

<xs:complexType name="ArrayOfSimpleUserInfo">

<xs:complexContent>

<xs:restriction base="soapenc:Array">

<xs:attribute ref="soapenc:arrayType" wsdl:arrayType="ns1:SimpleUserInfo[]"></xs:attribute>

</xs:restriction>

</xs:complexContent>

</xs:complexType>

该声明方式在和大部分的客户端语言联调时没有问题,比如Java、Net WSE 20、Net WSE 30、Php;但是在利用WCF进行联调时就出现了问题,其表现为:1)在vs2008中通过Add Service Reference添加服务时不成功,生成的代理类为空;2)若通过命令行工具Svcutil生成,提示不成功,但能看到错误信息,提示如下:

SystemServiceModelDescriptionXmlSerializerMessageContractImporter

错误: 引用类型“>

msg=Unsupported response content type "text/html; charset=utf-8", must be: "text/xml"

上面指明你调用时返回的response是text/html类型,因为SOAP of java只支持xml模式,不过

按照如果你有做deploy 你的sayhello to soap话就不会出问题

你要检查一下:

java orgapachesoapserverServiceManagerCLient [URL] list

or

deploy yourxml

<soapenv:Header/>

<soapenv:Body>

<api:getEmp>

<shopId>string</shopId>

</api:getEmp>

</soapenv:Body>

</soapenv:Envelope>

这个时SOAP协议的标准报文格式,客户端只要发送这样的报文给支持SOAP协议的webservice服务器即可成功调用web service服务

服务端:部署服务只需要自己定义服务的接口和实现类,并用@webservice注解,通过endPoint类直接发布即可

以上就是关于java使用HTTPURLCONNECTION调用SOAP接口如何处理返回参数过大的问题全部的内容,包括:java使用HTTPURLCONNECTION调用SOAP接口如何处理返回参数过大的问题、JAVA通过soap访问webservice、高分求java实现SAOP、WSDl用法例子(最好是电信与sp之间通信的例子)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9731182.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存