首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用Cloud项目模板在OData调用中设置“SAP-护照”标头

如何用Cloud项目模板在OData调用中设置“SAP-护照”标头
EN

Stack Overflow用户
提问于 2021-11-04 03:11:57
回答 1查看 419关注 0票数 0

我们将使用FRun (不支持CF)在support环境中收集一些静态信息。若要实现对传出连接调用的跟踪,请执行以下操作。我需要更新“SAP-护照”,并将其作为标题转发。

我遵循SAP的正式文档来实现它。https://help.sap.com/viewer/ea72206b834e4ace9cd834feed6c0e09/Cloud/en-US/05a07108d34540d39b8a79e2caf96c8c.html

在我看来,可以跳过步骤2。我唯一需要做的就是更新,并将其设置为request。

样本代码:

1.实现ConnectionInfo接口

代码语言:javascript
复制
public class ConnectionInfoNeo implements ConnectionInfo {

    @Override
    public byte[] getId() {

        UUID uuid = java.util.UUID.randomUUID();

        ByteBuffer bb = ByteBuffer.wrap(new byte[16]);
        bb.putLong(uuid.getMostSignificantBits());
        bb.putLong(uuid.getLeastSignificantBits());

        return bb.array();
    }

    @Override
    public int getCounter() {
        return 1;
    }
}

  1. 获取SapPassportHeader并将其设置为请求头

公共类LoggerFactory.getLogger(MyPurchaseOrderService.class);{私有静态最终日志记录器= ctx.lookup("java:comp/env/connectivityConfiguration");私有静态最终日志记录器=新ConnectionInfoNeo();公共列表getPurchaseOrdersValueHelp(String purOrderStr)抛出NamingException { String destinationName = "ErpQueryEndpoint";上下文ctx =新InitialContext();logger.info(“上下文:”+ ctx);// ConnectivityConfiguration配置= (ConnectivityConfiguration)// DestinationConfiguration destConfiguration =DestinationConfiguration // String destinationUrl = destConfiguration.getProperty("URL");

SapPassportHeader sapPassportHeader = updateSapPassportHeader(ctx);

DestinationAccessor.getDestination(destinationName).asHttp();HttpDestination =HttpDestination List purchaseOrders = new DefaultPurchaseOrderService() .getAllPurchaseOrder() .withHeader(“SAP-2”,sapPassportHeader.getValue()) .filter(PurchaseOrder.PURCHASE_ORDER.startsWith(purOrderStr)) //..top(20).executeRequest(目的);List purOrderNumList =新ArrayList<>();purOrderNumList.add(purchaseOrder.getPurchaseOrder());(purchaseOrder -> { sapPassportHeaderProvider.getSapPassportHeader(CONNECTION_INFO);});返回purOrderNumList;}私有SapPassportHeader updateSapPassportHeader(上下文ctx)抛出NamingException { SapPassportHeaderProvider sapPassportHeaderProvider = (SapPassportHeaderProvider) ctx.lookup("java:comp/env/SapPassportHeaderProvider");返回sapPassportHeaderProvider.getSapPassportHeader(CONNECTION_INFO);}

但是当我在Neo环境中测试时,我得到了一个例外。

代码语言:javascript
复制
2021 11 04 03:05:11#+00#ERROR#java.lang.Throwable##ZJE8SZH#https-jsse-nio-8041-exec-6#na#s3td7fnnd5#purchaseorderneoapplication#web#s3td7fnnd5#na#na#na#na#javax.naming.NameNotFoundException: Name [SapPassportHeaderProvider] is not bound in this Context. Unable to find [SapPassportHeaderProvider]. |
2021 11 04 03:05:11#+00#ERROR#java.lang.Throwable##ZJE8SZH#https-jsse-nio-8041-exec-6#na#s3td7fnnd5#purchaseorderneoapplication#web#s3td7fnnd5#na#na#na#na# at org.apache.naming.NamingContext.lookup(NamingContext.java:824) |
2021 11 04 03:05:11#+00#ERROR#java.lang.Throwable##ZJE8SZH#https-jsse-nio-8041-exec-6#na#s3td7fnnd5#purchaseorderneoapplication#web#s3td7fnnd5#na#na#na#na# at org.apache.naming.NamingContext.lookup(NamingContext.java:157) |
2021 11 04 03:05:11#+00#ERROR#java.lang.Throwable##ZJE8SZH#https-jsse-nio-8041-exec-6#na#s3td7fnnd5#purchaseorderneoapplication#web#s3td7fnnd5#na#na#na#na# at org.apache.naming.NamingContext.lookup(NamingContext.java:834) |
2021 11 04 03:05:11#+00#ERROR#java.lang.Throwable##ZJE8SZH#https-jsse-nio-8041-exec-6#na#s3td7fnnd5#purchaseorderneoapplication#web#s3td7fnnd5#na#na#na#na# at org.apache.naming.NamingContext.lookup(NamingContext.java:157) |
2021 11 04 03:05:11#+00#ERROR#java.lang.Throwable##ZJE8SZH#https-jsse-nio-8041-exec-6#na#s3td7fnnd5#purchaseorderneoapplication#web#s3td7fnnd5#na#na#na#na# at org.apache.naming.NamingContext.lookup(NamingContext.java:834) |
2021 11 04 03:05:11#+00#ERROR#java.lang.Throwable##ZJE8SZH#https-jsse-nio-8041-exec-6#na#s3td7fnnd5#purchaseorderneoapplication#web#s3td7fnnd5#na#na#na#na# at org.apache.naming.NamingContext.lookup(NamingContext.java:171) |
2021 11 04 03:05:11#+00#ERROR#java.lang.Throwable##ZJE8SZH#https-jsse-nio-8041-exec-6#na#s3td7fnnd5#purchaseorderneoapplication#web#s3td7fnnd5#na#na#na#na# at org.apache.naming.SelectorContext.lookup(SelectorContext.java:161) |
2021 11 04 03:05:11#+00#ERROR#java.lang.Throwable##ZJE8SZH#https-jsse-nio-8041-exec-6#na#s3td7fnnd5#purchaseorderneoapplication#web#s3td7fnnd5

#na#na#na#na#   at javax.naming.InitialContext.lookup(InitialContext.java:417) |

如何在JNDI中注册SapPassportHeaderProvider?有什么简单的方法可以在Cloud中为Java7项目获取标头吗?

================================================================

我在web.xml中添加了一些资源配置。上述问题已得到解决。但是SAP护照头始终为空。

代码语言:javascript
复制
<resource-ref>
        <res-ref-name>connectivityConfiguration</res-ref-name>
        <res-type>com.sap.core.connectivity.api.configuration.ConnectivityConfiguration</res-type>
    </resource-ref>

    <resource-ref>
        <res-ref-name>SapPassportHeaderProvider</res-ref-name>
        <res-type>com.sap.core.connectivity.api.sappassport.SapPassportHeaderProvider</res-type>
    </resource-ref>

2021 11 04 04:14:58#+00#ERROR#org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/PurchaseOrderNeo-application].[com.bosch.sbs.po.servet.PurchaseOrderValueHelpServlet]##ZJE8SZH#https-jsse-nio-8041-exec-7#na#s3td7fnnd5#purchaseorderneoapplication#web#s3td7fnnd5#na#na#na#na#Servlet.service() for servlet [com.bosch.sbs.po.servet.PurchaseOrderValueHelpServlet] in context with path [/PurchaseOrderNeo-application] threw exception com.sap.cloud.sdk.cloudplatform.exception.ShouldNotHappenException: com.sap.cloud.sdk.cloudplatform.thread.exception.ThreadContextExecutionException: java.lang.NullPointerException: while trying to invoke the method com.sap.core.connectivity.api.sappassport.SapPassportHeader.getValue() of a null object loaded from local variable 'sapPassportHeader'

=========================================================================

EN

回答 1

Stack Overflow用户

发布于 2021-11-04 08:39:19

既然你用sap-cloud-sdk标记了你的问题,我就代表图书馆回答。

它独立于SAP官方文档提供的API。您只需将SAP内部依赖项com.sap.cloud.sdk.cloudplatform:sap-passport添加到项目中即可。只要使用目标API,相应的标头就会自动添加到传出请求中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69834154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档