Sap web service接口改成https
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Sap web service接口改成https相关的知识,希望对你有一定的参考价值。
参考技术A 1.背景介绍因为项目当中用到了webservice接口,并且提供了一个公网地址给调用方使用,但是调用方在调用的时候一直报错,错误如下。
这个错误的原因是:
302 Found 是HTTP协议中的一个状态码(Status Code),可以简单的理解为该资源原本确实存在,但已经被临时改变了位置;或者换个说法,就是临时的存在于某个临时URL下。通常会发送Header来暂时重定向到新的新位置。
在我看了一下获取到的wsdl文件之后发现,我访问的地址是https,但是<wsdlsoap:addresslocation="http://*****"/>这个节点的值却是http所以把这个改成https就ok。
这是其中的一个错误,第二个错误就是报没有证书认证错误。这个就需要去获取证书了。http://www.cnblogs.com/enenen/p/6238504.html
这篇文章介绍了如何获取证书。最后将生成的证书放到java的security目录下。这样前面的工作就做好了。
2.调用方式介绍
1.先去http://cxf.apache.org下载apache-cxf-3.1.12.zip。然后设置环境变量。
2.然后用命令生成客户端代码wsdl2java -ant -client -d ClientDir hello_world.wsdl。
3.将wsdl文件中的地址改成https。
4.根据命令生成的客户端代码同时会生成一个测试demo.运行就ok了。
最详细的 SAP ABAP Web Service 创建和消费步骤讲解
本文原版发表于 SAP 官方社区,当时用的英文版写作,标题为:Step by step to create, consume and trace web service in ABAP system
https://blogs.sap.com/2014/05/20/step-by-step-to-create-consume-and-trace-web-service-in-abap-system/
总共阅读量超过 18 万。
How to create web service provider in ABAP system
如何在 SAP ABAP 系统创建 web service 提供者
本文主要思路就是创建一个 ABAP function module,然后通过事物码 SOAMANAGER 将其封装成 web service.
下面这个函数在 SAP CRM 里创建,逻辑是简单地根据 SAP CRM 产品 ID,从数据库表里读取其描述信息并返回。
FUNCTION ZGET_PROD_DESCRIPTION.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" VALUE(IV_PROD_ID) TYPE COMM_PRODUCT-PRODUCT_ID
*" EXPORTING
*" VALUE(RV_TEXT) TYPE STRING
*"----------------------------------------------------------------------
SELECT SINGLE A~short_text INTO rv_text FROM COMM_PRSHTEXT AS A
INNER JOIN comm_product AS B ON B~product_id = iv_prod_id AND B~product_guid = A~product_guid.
ENDFUNCTION.
需要用事物码 SOAMANAGER 暴露成 Web Service 的函数,必须标注成 Remote enabled:
SE37 里,菜单 Utilities->More Utilities->Create Web Service->From the Function Module:
按照向导一步步 Next 即可,按照自己的实际场景,选择合适的 Web Service 调用安全认证机制。
完成向导后,应该能得到如下的服务定义:
点击上图 ALV 面板的 “WSDL” 标签页,浏览 Web Service 的 WSDL:
使用事物码 SOAMANAGER, 创建 Web Service Configuration:
找到我们刚才通过向导创建好的服务定义:
点击 Create Service 按钮:
选择合适的通信安全设置(Community Security):
点击 Finish 按钮:
现在这个 web service 就可以消费了。点击这个图标:Open Binding WSDL Generation:
把这个用于绑定的 WSDL 链接保存下来备用。
下面介绍 SAP ABAP Web Service 的消费步骤。
事物码 SE80,新建一个 Service Consumer:
在 Generation Source 里,选择 External WSDL / Schema:
把之前我们创建的 Service Definition 里创建好的 Service Definition WSDL Url,粘贴过来:
激活 Service Consumer,会自动生成一个 ABAP 类,这个类用于消费 web service. 激活该类,记下其名字。
回到事物码 SOAMANAGER, 找到之前创建的 Consumer Proxy:
创建一个新的 logical port:
将 Web Service 创建时保存的 url 填进去。记住不能将 SE80 里 WSDL 标签页里的 url 填入,否则会遇到下列错误:
SRT Framework exception: Initial value "consumer context table" in method IF_SRT_WSP_CONFIG_REGISTRY~CREATE_CONTEXTS_FROM_WS of class CL_SRT_WSP_CONFIG_REGISTRY
从 SE80 Service Consumer 里,我们能观察到这个代理类的输入和输出参数定义。
现在就可以在 ABAP 报表里,消费这个 proxy class 了。
完整的 ABAP 代码:
data: lr_proxy TYPE REF TO CO_ZPRODUCTDESCRIPTION4,
input TYPE ZGET_PROD_DESCRIPTION,
output TYPE ZGET_PROD_DESCRIPTION_RESPONSE.
input-iv_prod_id = \'ARNO_TEST004\'.
CREATE OBJECT lr_proxy
EXPORTING
LOGICAL_PORT_NAME = \'ZLP_JERRY1\'.
CALL METHOD lr_proxy->ZGET_PROD_DESCRIPTION
EXPORTING
input = input
IMPORTING
output = output.
我们执行这个 ABAP 报表,通过 web service 调用的方式,根据产品 ID ARNO_TEST004,拿到了其描述信息:TEST FOR WORKSHOP dsf test 11 tesdgt12
这个描述信息,和我们在 WebClient UI 上观察到的一致:
ABAP Web service 执行的监控和跟踪
事物码 SRT_UTIL, 为需要进行 Web Service 执行监控的用户,创建一个新的配置:
将 Functional Trace 下拉菜单项的值选择成 High. 根据实际需要,也可以启用 Performance Trace 和 Payload Trace,这些选项默认都是关闭状态:Inactive.
最后别忘了点击 ”Save Configuration“ 按钮。
重新执行会触发 Web Service 调用的操作。然后回到事物码 SRT_UTIL,点击 Functional Trace,点击刷新按钮,就看到了刚才 Web Service 调用的执行明细。
其实用法和 SQL Trace 即事物码 ST05 很类似。
双击类型为 ”Response“ 的某一行,能看到 Web service 调用返回的明细,比如之前提到的,根据输入产品 ID 去数据库查询,再返回的产品描述信息:TEST FOR WORKSHOP dsf test 11 tesdgt12
更多Jerry的原创文章,尽在:"汪子熙":
以上是关于Sap web service接口改成https的主要内容,如果未能解决你的问题,请参考以下文章