HTTP POST方式调用SOAP OPERATION类的接口
wsdl地址或者接口地址中有多个方法(operation)
如下是soapui测试的例子,wsdl地址下包含多个operation,但是现在我想用http的方式,只做getKnowledgePartsDatabase方法。

因为soap的调用是直接传的xml,所以需要做两个strans来把数据转换一下。这里接口用的是hashmap,所以在abap转换xml的只需要传一个内表,转换里循环处理一下就可以了。如下:蓝框内为全部soapui的xml数据,只是将key value换成了loop

到这里就可以做建单的转换测试了。

转过的xml自带了sap的Envelope和header,所以程序里给处理调,没想其他方法,如果有,可以推荐下,谢谢!
然后是写返回的转换,类型的xml

然后输数据处理
REPORT zcrm_call_strans. TYPES:BEGIN OF ty_item,
id TYPE string,
name TYPE string,
END OF ty_item,
BEGIN OF ty_back,
json TYPE string,
END OF ty_back,
BEGIN OF ty_list,
exportmodel TYPE string,
parttitle TYPE string,
docid TYPE string,
customermodel TYPE string,
END OF ty_list.
DATA:BEGIN OF gw_res,
result TYPE string,
data TYPE TABLE OF ty_list,
issucces TYPE string,
END OF gw_res. DATA:gt_item TYPE TABLE OF ty_item,
gw_item LIKE LINE OF gt_item,
gv_string TYPE string,
gx_service TYPE xstring. DATA: lo_http_client TYPE REF TO if_http_client,
lv_service TYPE string,
lv_request TYPE string,
lv_len TYPE i,
lv_result TYPE string,
lx_result TYPE xstring,
gv_result TYPE string,
lv_code TYPE i,
lv_reason TYPE string,
gw_back TYPE ty_back,
lo_ixml TYPE REF TO if_ixml,
lo_streamfactory TYPE REF TO if_ixml_stream_factory,
lo_istream TYPE REF TO if_ixml_istream,
lo_document TYPE REF TO if_ixml_document,
conv TYPE REF TO cl_abap_conv_in_ce. gw_item-id = 'LoginName'.
gw_item-name = '2023102317301530::MjAwNjI1'.
APPEND gw_item TO gt_item. gw_item-id = 'CustomerModel'.
gw_item-name = 'HR6BF121B'.
APPEND gw_item TO gt_item. CALL TRANSFORMATION zcrm_partsservice_req
SOURCE root = gt_item
RESULT XML gv_string. lv_len = strlen( gv_string ).
lv_len = lv_len - 116. gv_string = gv_string+116(lv_len). CONCATENATE
'<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:'
'soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:crm="http://crmsoap.trs.com">'
gv_string INTO gv_string.
*CHECK 1 = 2.
lv_service = 'http://xxxxxxxxxxxx/ekp/services/trsekp:HisenseEKPPartsService'. CALL FUNCTION 'ECATT_CONV_STRING_TO_XSTRING'
EXPORTING
im_string = gv_string
* IM_ENCODING =
IMPORTING
ex_xstring = gx_service.
* lv_len = strlen( gv_string ). lv_len = xstrlen( gx_service ). cl_http_client=>create_by_url(
EXPORTING
url = lv_service
IMPORTING
client = lo_http_client
EXCEPTIONS
argument_not_found = 1
plugin_not_active = 2
internal_error = 3
OTHERS = 4 ). lo_http_client->request->if_http_entity~set_header_field( name = 'SOAPAction' value = '#getKnowledgePartsDatabase' ).
lo_http_client->request->set_method( if_http_request=>co_request_method_post ).
lo_http_client->request->if_http_entity~set_content_type( content_type = 'text/html' ).
lo_http_client->response->if_http_entity~set_content_type( content_type = 'text/xml;charset=utf-8' ).
lo_http_client->response->if_http_entity~set_header_field( name = '~server_protocol' value = 'HTTP/1.1' ).
lo_http_client->response->if_http_entity~set_header_field( name = 'Transfer-Encoding' value = 'chunked' ). CALL METHOD lo_http_client->request->set_data
EXPORTING
data = gx_service
offset = 0
length = lv_len. lo_http_client->send(
EXCEPTIONS
http_communication_failure = 1
http_invalid_state = 2 ). lo_http_client->receive(
EXCEPTIONS
http_communication_failure = 1
http_invalid_state = 2
http_processing_failed = 3 ). CLEAR lv_result .
lx_result = lo_http_client->response->get_data( ). CLEAR: lv_code,lv_reason.
lo_http_client->response->get_status(
IMPORTING
code = lv_code
reason = lv_reason ).
CALL METHOD lo_http_client->close. CHECK lx_result IS NOT INITIAL. CALL FUNCTION 'ECATT_CONV_XSTRING_TO_STRING'
EXPORTING
im_xstring = lx_result
im_encoding = 'UTF-8'
IMPORTING
ex_string = gv_result. REPLACE ALL OCCURRENCES OF '"' IN gv_result WITH '"'. CALL TRANSFORMATION zcrm_partsservice_rep
SOURCE XML lx_result
RESULT root = gw_back. zprocessjson=>deserialize(
EXPORTING
json = gw_back-json
CHANGING
data = gw_res
). CHECK 1 = 1.
HTTP POST方式调用SOAP OPERATION类的接口的更多相关文章
- 在.NET中调用Java的类
.NET不能直接调用Java的类,但IKVM.NET解决了这个问题. IKVM.NET提供了两种方式调用java的类: ①把生成的jar包放置在程序根目录,然后通过创建URL实例的方式去调用类中的方法 ...
- 翻译-使用Spring调用SOAP Web Service
原文链接: http://spring.io/guides/gs/consuming-web-service/ 调用SOAP web service 本指南将指导你使用Spring调用一个基于SOAP ...
- Atitit 动态调用webservice与客户端代理方式调用
Atitit 动态调用webservice与客户端代理方式调用 方式1: 使用call.invoke 直接调用WSDL,缺点:麻烦,不推荐--特别是JAVA调用.NET的WS时,会有不少的问题需要解 ...
- 终于解决了PHP调用SOAP过程中的种种问题。(转)
最近在做公司和第三方的一个合作项目,需要调用统一验证接口和统一支付接口.由于牵涉公司机密,所以我要单独写一层PHP的接口给第三方用.前面那个验证接口主要卡在了des加密的方式上,这个有时间再说.这篇主 ...
- (转)将wcf 以webservice的方式调用
将wcf 以webservice的方式调用 问题:a公司使用wcf 发布服务(.net Framework 3.0 or 3.5),b公司需要使用a公司发布的服务 ,但b公司目前阶段只使用.net F ...
- 简单对象访问协议(Simple Object Access Protocol),PHP调用SOAP过程中的种种问题;php的soap无故出错的真凶:wsdl缓存
webservice的一种常用实现方式就是soap了.我们后端的JAVA也是用soap的原理实现的.那么我显然首先要上网上搜搜关于soap的文章.最早进入实现的是PHP写的nusoap类.这个n ...
- 详解C#泛型(二) 获取C#中方法的执行时间及其代码注入 详解C#泛型(一) 详解C#委托和事件(二) 详解C#特性和反射(四) 记一次.net core调用SOAP接口遇到的问题 C# WebRequest.Create 锚点“#”字符问题 根据内容来产生一个二维码
详解C#泛型(二) 一.自定义泛型方法(Generic Method),将类型参数用作参数列表或返回值的类型: void MyFunc<T>() //声明具有一个类型参数的泛型方法 { ...
- YbSoftwareFactory 代码生成插件【二十五】:Razor视图中以全局方式调用后台方法输出页面代码的三种方法
上一篇介绍了 MVC中实现动态自定义路由 的实现,本篇将介绍Razor视图中以全局方式调用后台方法输出页面代码的三种方法. 框架最新的升级实现了一个页面部件功能,其实就是通过后台方法查询数据库内容,把 ...
- HttpClient Get/Post方式调用Http接口
本节摘要:本节主要分别介绍如何用get方式.post方式向http接口发送数据. preparation 1. 项目环境如下: myeclipse6.5 .tomcat5.0.system:xp.JD ...
- C#以post方式调用struts rest-plugin service的问题
struts2: 玩转 rest-plugin一文中,学习了用struts2开发restful service的方法,发现用c#以post方式调用时各种报错,但java.ajax,包括firefox ...
随机推荐
- Coupled Iterative Refinement for 6D Multi-Object Pose Estimation论文精读
目录 Coupled Iterative Refinement for 6D Multi-Object Pose Estimation论文精读 论文介绍 Abstract Introduction Re ...
- Tinyhttpd 源代码初步解读
Tinyhttpd 是很早以前的一个 web 服务器程序,由 C 语言编写,整个程序十分小巧,源码只有几百行.它一般不适合用于生产环境,因为它很简单,只实现了读取 html 以及 Get / POST ...
- BUUCTF--Dangeous RSA(小e)
对于e很小,可以直接采取爆破的手段,直接上代码 点击查看代码 #python3 ## -*- coding: utf-8 -*-# import binascii from gmpy2 import ...
- C# 多项目打包时如何将项目引用转为包依赖
项目背景 最近开发一组类库,大约会有五六个项目.一个Core,加上若干面向不同产品的实现库,A/B/C/D...它们都依赖Core. 首先,我想统一版本号,这个容易,通过Directory.Build ...
- C#+Selenium+Nunit实现Web自动化demo
1.新建Nunit工程 步骤如下: 打开Rider选择图示选项 使用Nuget安装对应库 2.编写代码 代码如下: using NUnit.Framework; using OpenQA.Seleni ...
- JMeter提取多个变量值总结
- 理解tomcat中的BIO、NIO、AIO、ARP
理解tomcat中的BIO.NIO.AIO.ARP tomcat作为springboot中默认的web容器,了解tomcat的运转可以帮助我们更好的去调整tomcat的参数达到更好的性能 前置知识 I ...
- kettle介绍-参数变量
ETL中为什么使用参数变量 实现ETL的复用 D,Q,P环境不同,使用变量方便发布 有的条件需要外部传入 增量ETL 灵活性强 kettle中参数变量种类 Environment Variables ...
- 被LangChain4j坑惨了!
最近在深度体验和使用 Spring AI 和 LangChain4j,从开始的满怀期待五五开,但最后极具痛苦的使用 LangChain4j,让我真正体验到了正规军和草台班子的区别. Spring AI ...
- .Net Core环境绑定及配置launchSettings.json
1.Asp.net Core的默认环境配置在项目Properties-->launchSettings.json下 { "$schema": "http://jso ...