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 ...
随机推荐
- Oracle临时表会随另外一个表的创建自动提交并清空
创建一个临时表,用它导入一些数据 用这个临时表生成另外一个表,用create table ... 但生成的这表总是空的. 原来create table 前会进行提交commit, 而临时表在commi ...
- 对象命名为何需要避免'-er'和'-or'后缀
之前写过两篇关于软件工程中对象命名的文章:开发中对象命名的一点思考与对象命名怎么上手?从现实世界,但感觉还是没有说透, 在软件工程中,如果问我什么最重要,我的答案是对象命名.良好的命名能够反映系统的本 ...
- 查看CentOS7的版本信息
1,查看CentOS的版本号: cat /etc/centos-release 显示结果: ...
- CoreOS 更新重启后, 所有容器服务全部停掉了
今天有几个服务出问题了,上去看了下,这台 CoreOS 下的所有容器服务竟然全部停掉了,好奇怪,启动容器时明明加了--detach参数了呀. 问题原因 想了想,会不是是 CoreOS 更新重启导致的, ...
- 7 个最近很火的开源项目「GitHub 热点速览」
可能很多人昨天都刷到了消息:GitHub 抽风,导致中国区未登录的用户无法访问,现在问题已经修复. 看到这个消息时,我的第一反应也是"被制裁了?"从震惊到平静,不过短短几分钟,随即 ...
- JDK的SPI有什么缺陷?dubbo做了什么改进?
JDK的SPI机制的缺点 ⽂件中的所有类都会被加载且被实例化.这样也就导致获取某个实现类的方式不够灵活,只能通过 Iterator 形式获取,不能根据某个参数来获取对应的实现类.如果不想用某些实现类, ...
- DOC,PDF,PPT文件转换为HTML代码记录
pom文件引入 <repositories> <repository> <id>com.e-iceblue</id> <url>http:/ ...
- 把 Java WebApi 快速转为 Mcp-Server(使用 Solon AI MCP)
solon-ai-mcp,提供了各种 mcp 相关能力,支持 java8, java11, java17, java21, java24 .是 solon-ai 项目的重要组成部分,也可以嵌入到 sp ...
- 雷总小米十周年演讲---国外友人评价第一次看到MIUI系统
雷总在小米十周年演讲时提到的当时讨论MIUI系统的帖子 xdadevelopers论坛 https://forum.xda-developers.com/showthread.php?t=787877 ...
- 关于网传微信聊天记录提取工具"留痕"盗取个人信息的分析
今天早上看到一篇文章,是关于一个微信聊天记录提取工具泄露个人信息的内容,于是我就好奇,看了一下作者的 github,然后也是自己小小的分析了一下 1.官方地址 Github: https://gith ...