适用于JAVA的SAP Cloud SDK:通过本地主机访问本地系统

2020-08-26 11:00发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


你好

我关注了博客文章,以访问 带有Cloud Platform SDK的OData服务。 我使用自定义OData服务代替标准Businesspartner OData服务,并使用R3 ERP内部部署后端系统代替S/4 HANA。

如果我将应用程序部署到Cloud Foundry子帐户,则它可以正常运行,并且OData服务是通过本地后端上的Cloud Connector和目标服务执行的。

如果我尝试在本地tomee服务器上执行相同的应用程序,则无法访问本地后端系统。

我在子帐户上的目的地如下:

如果我将所有信息(URL,用户,密码)传递到本地目的地,则它不起作用...

执行集成测试时使用相同的erroppr方法。

我该怎么做才能从本地主机访问我的本地backlend?

最诚挚的问候,

克里斯

(24.3 kB)

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


你好

我关注了博客文章,以访问 带有Cloud Platform SDK的OData服务。 我使用自定义OData服务代替标准Businesspartner OData服务,并使用R3 ERP内部部署后端系统代替S/4 HANA。

如果我将应用程序部署到Cloud Foundry子帐户,则它可以正常运行,并且OData服务是通过本地后端上的Cloud Connector和目标服务执行的。

如果我尝试在本地tomee服务器上执行相同的应用程序,则无法访问本地后端系统。

我在子帐户上的目的地如下:

如果我将所有信息(URL,用户,密码)传递到本地目的地,则它不起作用...

执行集成测试时使用相同的erroppr方法。

我该怎么做才能从本地主机访问我的本地backlend?

最诚挚的问候,

克里斯

(24.3 kB)
付费偷看设置
发送
12条回答
N-Moskvin
1楼-- · 2020-08-26 11:26

嗨克里斯,

请您概括一下当前状态?

您写道,本地服务器现在可以连接到本地ERP。 是这样吗?

然后向我们显示您的环境变量。

还请共享您系统的最新状态。yml。

谢谢

Marco

hengyuye
2楼-- · 2020-08-26 11:13

嗨Marco,

摘要:使用真实主机名而不是Cloud Connector连接本地主机。
环境变量如下所示:

设置目标位置= [{名称:" saperp",网址:" http://dt1.datatrain-....de:8000",用户名:" user",密码:" password"}] 

如果我在systems.yml中使用相同的URL,则集成测试将失败,因为连接被吊销了。 systems.yml看起来像这样:

-
 erp:
   默认值:" saperp"
   系统:
     -别名:" saperp"
       uri:" http://dt1.datatrain-....de:8000"
       systemId:" DT1"#可选,默认为""
       sapClient:" 100"#可选,默认为默认SAP cl
       区域设置:" de"#可选,默认为英语(美国)
       erpEdition:"本地"#可选,默认为"云" 

credentials.yml看起来像这样:

-
 证书:
 -别名:" saperp"
   用户名:" user"
   密码:"密码" 

集成测试如下:

 @BeforeClass
     公共静态无效的beforeClass(){
         mockUtil.mockDefaults();
         mockUtil.mockErpDestination(" saperp"," saperp");
     }

     @之前
     公开void before(){
        //RestAssured.baseURI = baseUrl.toExternalForm();
     }

     @测试
     公共无效的testService(){
        //通过资源定义进行JSON模式验证
         最终的JsonSchemaValidator jsonValidator = JsonSchemaValidator
                 .matchesJsonSchemaInClasspath(" tiles-schema.json");

        //HTTP GET响应正常,JSON标头和有效架构
         什么时候()
                 .get("/img/tiles")
         。然后()
                 .statusCode(200)
                 .contentType(ContentType.JSON)
                 .body(jsonValidator);
     } 

这是日志的一部分:

 [ERROR]测试运行:1,失败:0,错误:1,跳过:0,经过的时间:11.98 s <<<失败!  -在de.datatrain.TPServletTest中
 [ERROR] testService(de.datatrain.TPServletTest)经过的时间:5.819 s <<<错误!
 java.net.ConnectException:连接被拒绝:connect
         在de.datatrain.TPServletTest.testService(TPServletTest.java:55)

 

有什么想法吗?

非常感谢您的帮助。

最佳成绩,

Chris

CJones
3楼-- · 2020-08-26 11:09

对我来说,好像没有触发对ERP系统的调用,但是对servlet或控制器的访问不起作用。 您介意向我们展示您的servlet或控制器,它侦听相对路径"/img/tiles"吗?

哎,真难
4楼-- · 2020-08-26 11:14

嗨,Marco,

此处是Servlet:

 @WebServlet("/img/tiles")
 公共类TPServlet扩展了HttpServlet {
    
          私有静态最终长serialVersionUID = 1L;
         私有静态最终Logger logger = LoggerFactory.getLogger(TPServlet.class);

         私有最终ErpHttpDestination目标= DestinationAccessor.getDestination(" saperp")。asHttp()。decorate(DefaultErpHttpDestination :: new);

         @Override
         受保护的void doGet(最终HttpServletRequest请求,最终HttpServletResponse响应)
                 引发ServletException,IOException {
             尝试{
                 最终List 磁贴=
                         新的DefaultTpsrvService()
                                 .getAllTile()
                                 .orderBy(Tile.SORT,Order.ASC)
                                 .top(200)
                                 .execute(目的地);

                 response.setContentType(" application/json");
                 response.getWriter()。write(new Gson()。toJson(tiles));
             } catch(final ODataException e){
                 logger.error(e.getMessage(),e);
                 response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
                 response.getWriter()。write(e.getMessage());
             }

         }

 } 

最好的问候和帮助,

Chris

我是小鹏鹏啊
5楼-- · 2020-08-26 11:28

您能否发布整个集成测试课程? 在上方,您删节了一些但可能很重要的部分。

我还假设您的单元测试正常工作,对吧?

小灯塔
6楼-- · 2020-08-26 11:07

我目前尚未实现单元tsts。

这是集成测试的代码:

包de.datatrain;

 导入io.restassured.RestAssured;
 导入io.restassured.http.ContentType;
 导入io.restassured.module.jsv.JsonSchemaValidator;
 导入org.jboss.arquillian.container.test.api.Deployment;
 导入org.jboss.arquillian.junit.Arquillian;
 导入org.jboss.arquillian.test.api.ArquillianResource;
 导入org.jboss.shrinkwrap.api.spec.WebArchive;
 导入org.junit.Before;
 导入org.junit.BeforeClass;
 导入org.junit.Test;
 导入org.junit.runner.RunWith;
 导入org.slf4j.Logger;
 导入org.slf4j.LoggerFactory;
 导入java.net.URL;
 导入com.sap.cloud.sdk.testutil.MockUtil;

 何时导入静态io.restassured.RestAssured。

 @RunWith(Arquillian.class)
 公共类TPServletTest {
     私有静态最终MockUtil mockUtil = new MockUtil();
     私有静态最终Logger logger = LoggerFactory.getLogger(TPServletTest.class);

     @ArquillianResource
     私有网址baseUrl;

     @部署
     公共静态WebArchive createDeployment(){
         返回TestUtil.createDeployment(TPServletTest.class);
     }

     @课前
     公共静态无效的beforeClass(){
         mockUtil.mockDefaults();
         mockUtil.mockErpDestination(" saperp"," saperp");
     }

     @之前
     公开void before(){
         RestAssured.baseURI = baseUrl.toExternalForm();
     }

     @测试
     公共无效的testService(){
        //通过资源定义进行JSON模式验证
         最终的JsonSchemaValidator jsonValidator = JsonSchemaValidator
                 .matchesJsonSchemaInClasspath(" tiles-schema.json");

        //HTTP GET响应正常,JSON标头和有效架构
         什么时候()
                 .get("/img/tiles")
         。然后()
                 .statusCode(200)
                 .contentType(ContentType.JSON)
                 .body(jsonValidator);
     }
 } 

一周热门 更多>