我们将使用FRun (不支持CF)在support环境中收集一些静态信息。若要实现对传出连接调用的跟踪,请执行以下操作。我需要更新“SAP-护照”,并将其作为标题转发。
我遵循SAP的正式文档来实现它。https://help.sap.com/viewer/ea72206b834e4ace9cd834feed6c0e09/Cloud/en-US/05a07108d34540d39b8a79e2caf96c8c.html
在我看来,可以跳过步骤2。我唯一需要做的就是更新,并将其设置为request。
样本代码:
1.实现ConnectionInfo接口
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;
}
}公共类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环境中测试时,我得到了一个例外。
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护照头始终为空。
<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'=========================================================================

发布于 2021-11-04 08:39:19
既然你用sap-cloud-sdk标记了你的问题,我就代表图书馆回答。
它独立于SAP官方文档提供的API。您只需将SAP内部依赖项com.sap.cloud.sdk.cloudplatform:sap-passport添加到项目中即可。只要使用目标API,相应的标头就会自动添加到传出请求中。
https://stackoverflow.com/questions/69834154
复制相似问题