首页 > 其他分享 >HTTP POST方式调用SOAP OPERATION类的接口

HTTP POST方式调用SOAP OPERATION类的接口

时间:2023-10-24 12:03:41浏览次数:28  
标签:http string lo lv client HTTP OPERATION TYPE POST

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.hisense.trs.com">'
gv_string INTO gv_string.
*CHECK 1 = 2.
lv_service = 'http://hsekp.hisense.com/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 '&quot;' 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,string,lo,lv,client,HTTP,OPERATION,TYPE,POST
From: https://www.cnblogs.com/sapSB/p/17784466.html

相关文章

  • docker push image harbor http 镜像
    前言搭建的harbor仓库为http协议,在本地登录后,推送镜像发生如下报错:dockerpush192.168.xx.xx/test/grafana:v10.1.1Thepushreferstorepository[192.168.xx.xx/test/grafana]Get"https://192.168.xx.xx/v2/":dialing192.168.xx.xx:443matchesstaticsystemexclude......
  • docker login harbor http login登录
    前言搭建的harbor仓库为http协议,在本地登录时出现如下报错:dockerloginhttp://192.168.xx.xxUsername:adminPassword:Errorresponsefromdaemon:Get"https://192.168.xx.xx/v2/":dialing192.168.xx.xx:443matchesstaticsystemexclude:connectingto192.168.xx......
  • Spring MVC入口Servlet详解(HttpServletBean,FrameworkServlet,DispatcherServlet )
    SpringMVC中DispatcherServlet前端控制器是web服务器的入口,那么它是怎么样进行初始化的,是怎么样进行工作?继承关系1.HttpServletBean主要做一些初始化的工作,将web.xml中配置的参数设置到Servlet中。比如servlet标签的子标签init-param标签中配置的参数。2.FrameworkServlet将Serv......
  • HTTP 传输大文件的几种方案
    在JavaScript中如何实现大文件并发上传?和JavaScript中如何实现大文件并行下载?这两篇文章中,阿宝哥介绍了如何利用async-pool这个库来优化传输大文件的功能。本文将为大家介绍一下HTTP传输大文件的几种方案。不过在介绍具体的方案之前,我们先使用Node.js的fs模块来生成......
  • postgresql中的时间戳格式化
    postgresql时间戳格式化--年selectto_char(to_timestamp(1608018517000/1000),'yyyy');--年-月selectto_char(to_timestamp(1608018517000/1000),'yyyy-MM');--年-月-日selectto_char(to_timestamp(1608018517000/1000),'yyyy-MM-dd');......
  • centos安装postgresql
    安装初始化#安装存储库RPM:sudoyuminstall-yhttps://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm#安装PostgreSQL:sudoyuminstall-ypostgresql14-server#可选择初始化数据库并启用自动启动:sudo/usr/pg......
  • nacos加postgresql
    Nacos2.2版本数据库适配插件一、插件概述1.1、简介从2022年12月14日发布的Nacos2.2正式版本开始,Nacos提供了数据源扩展插件,以便让需要进行其他数据库适配的用户自己编写插件来保存数据。当前项目插件目前已简单适配Postgresql,并抽象了一套常见的兼容项的方言类,开发者可以基于该......
  • WebService SOAP1.1 SOAP1.12 HTTP PSOT方式调用
    WebServiceSOAP1.1SOAP1.12HTTPPSOT方式调用VisualStudio2022新建WebService项目     创建之后,启动运行 设置默认文档即可 经过上面的创建WebService已经创建完成,添加HelloWorld3方法,[WebMethod]publicstringHelloWorld3(inta,stringb......
  • mac 以https的方式启动打包的静态资源
    1npxserve2 brewinstallmkcert 3新建目录,存放证书,在新目录执行,mkcert192.168.31.66 (本机ip)4pwd查看当前目录5在项目执行 npxserve--ssl-cert/Users/da/Desktop/dyl/doc/ssl/192.168.31.66.pem--ssl-key/Users/da/Desktop/dyl/doc/ssl/192.168.31.66-key.pem......
  • 支持多用户协作的API测试工具:Apipost
    在当今快速发展的数字化时代,API已成为企业与开发者实现数据互通、应用集成的重要桥梁。然而,随着API数量的不断增加,API开发、调试、测试、文档等工作也变得越来越复杂。为了解决这一痛点,一款名为Apipost的API协同研发工具应运而生。成功案例许多知名的公司和团队都在使用Apipost......