C++调用webservice问题

qq_35875288 2017-09-14 03:05:57
//保存xml形式的字符串
char *psXML=NULL; // 用来保存xml的字符串,可以放到函数参数里传递出去
TiXmlPrinter printer;
xmlDocument->Accept(&printer);
psXML = new char[512];
memset(psXML,0x0,sizeof(psXML));
memcpy(psXML,printer.CStr(),printer.Size());
psXML[printer.Size()] = '\0';

soap_init1(soap, SOAP_IO_KEEPALIVE);
input=(_ns1__ZYST02_USCOREIFS002*)malloc(sizeof(_ns1__ZYST02_USCOREIFS002)+1);
input -> IS_USCOREINPUT = (ns1__ZSYST02_USCOREIFS002_USCOREIN *)psXML;
printf("工艺规程传输的参数为:\n");
printf("IS_USCOREINPUT=%s\n",input->IS_USCOREINPUT);
printf("以上工艺规程传输的参数为!\n");
printf("webservice地址为:!%s\n",webservice);


////调用服务

if(soap_call___ns1__ZYST02_USCOREIFS002(soap,NULL,"",input,&result)==SOAP_OK)//一到调用就报错
{

char sapid [255];
char itemid [255];
char* fh_item_id = NULL;
tag_t* fh_item_tag = NULLTAG;
char* fh_type_name = NULL;
writeXML( log_file, (const char *)result.ES_USCOREOUTPUT);
printf("SAP返回值为:%s\n", result.ES_USCOREOUTPUT);

}
else
{
writeXML( log_file, "调用SAPWebService接口失败!");
printf("调用SAPWebService接口失败");
}



我跟踪了下这个调用方法:

SOAP_FMAC5 int SOAP_FMAC6 soap_call___ns1__ZYST02_USCOREIFS002(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct _ns1__ZYST02_USCOREIFS002 *ns1__ZYST02_USCOREIFS002, struct _ns1__ZYST02_USCOREIFS002Response *ns1__ZYST02_USCOREIFS002Response)
{ struct __ns1__ZYST02_USCOREIFS002 soap_tmp___ns1__ZYST02_USCOREIFS002;
printf("1:\n");
if (soap_endpoint == NULL)
soap_endpoint = "http://sapdev01.stfm.com:8010/sap/bc/srt/rfc/sap/zyst02_ifs002/200/zyst02_ifs002/lp01";
if (soap_action == NULL)
soap_action = "urn:sap-com:document:sap:rfc:functions:ZYST02_IFS002:ZYST02_IFS002Request";
printf("2:\n");
soap_begin(soap);
printf("3:\n");
soap->encodingStyle = NULL;
printf("4:\n");
soap_tmp___ns1__ZYST02_USCOREIFS002.ns1__ZYST02_USCOREIFS002 = ns1__ZYST02_USCOREIFS002;
printf("5:\n");
soap_serializeheader(soap);//这句报错!
printf("6:\n");
soap_serialize___ns1__ZYST02_USCOREIFS002(soap, &soap_tmp___ns1__ZYST02_USCOREIFS002);
printf("7:\n");
if (soap_begin_count(soap))
printf("8:\n");
return soap->error;
if (soap->mode & SOAP_IO_LENGTH)
{ if (soap_envelope_begin_out(soap)
|| soap_putheader(soap)
|| soap_body_begin_out(soap)
|| soap_put___ns1__ZYST02_USCOREIFS002(soap, &soap_tmp___ns1__ZYST02_USCOREIFS002, "-ns1:ZYST02_IFS002", NULL)
|| soap_body_end_out(soap)
|| soap_envelope_end_out(soap))
return soap->error;
}
if (soap_end_count(soap))
return soap->error;
if (soap_connect(soap, soap_url(soap, soap_endpoint, NULL), soap_action)
|| soap_envelope_begin_out(soap)
|| soap_putheader(soap)
|| soap_body_begin_out(soap)
|| soap_put___ns1__ZYST02_USCOREIFS002(soap, &soap_tmp___ns1__ZYST02_USCOREIFS002, "-ns1:ZYST02_IFS002", NULL)
|| soap_body_end_out(soap)
|| soap_envelope_end_out(soap)
|| soap_end_send(soap))
return soap_closesock(soap);
if (!ns1__ZYST02_USCOREIFS002Response)
return soap_closesock(soap);
soap_default__ns1__ZYST02_USCOREIFS002Response(soap, ns1__ZYST02_USCOREIFS002Response);
if (soap_begin_recv(soap)
|| soap_envelope_begin_in(soap)
|| soap_recv_header(soap)
|| soap_body_begin_in(soap))
return soap_closesock(soap);
soap_get__ns1__ZYST02_USCOREIFS002Response(soap, ns1__ZYST02_USCOREIFS002Response, "ns1:ZYST02_IFS002Response", NULL);
if (soap->error)
return soap_recv_fault(soap, 0);
if (soap_body_end_in(soap)
|| soap_envelope_end_in(soap)
|| soap_end_recv(soap))
return soap_closesock(soap);
return soap_closesock(soap);
}

由于是在别的软件上做的二次开发,无法获取错误信息。
...全文
129 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
www_adintr_com 2017-09-14
  • 打赏
  • 举报
回复
崩溃可以生成 dump 文件来分析 http://blog.csdn.net/whatday/article/details/47275711
qq_35875288 2017-09-14
  • 打赏
  • 举报
回复
因为是在别的软件上做的二次开发,所以没有报错信息,平台软件直接崩溃了。
www_adintr_com 2017-09-14
  • 打赏
  • 举报
回复
报的什么错误也不说明一下?
qq_35875288 2017-09-14
  • 打赏
  • 举报
回复
自己顶一下!

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧