Облачное приложение Java должно выполнить POST для SOAP API, который находится в другом облаке - PullRequest
0 голосов
/ 22 мая 2019

Я занимаюсь разработкой Java-приложения (пока что сервлета), которое будет развернуто на SAP Cloud Platform (Neo), работающей в рамках "Java EE 7 Web Profile TomEE 7".Это Java-приложение должно отправить POST в SOAP API, который находится в другом облаке (S / 4HANA Cloud) через https.Я использовал Axis2 для генерации классов (включая заглушку) для приложения Java из wsdl этого API.Когда я запускаю приложение Java (из Chrome, поскольку это сервлет), я получаю сообщение об ошибке:

    2019 05 22 15:51:13#+00#ERROR#org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/postjournalentry-application].[com.cfindustries.scpjava.HelloWorldServlet]##anonymous#https-jsse-nio-8041-exec-3#na#hc8b40d36#postjournalentryapplication#web#hc8b40d36#na#na#na#na#Servlet.service() for servlet [com.cfindustries.scpjava.HelloWorldServlet] in context with path [/postjournalentry-application] threw exception org.apache.axis2.AxisFault: The system cannot infer the transport information from the https://my301840-api.s4hana.ondemand.com/sap/bc/srt/scs_ext/sap/journalentrycreaterequestconfi?sap-client=100 URL.
at org.apache.axis2.description.ClientUtils.inferOutTransport(ClientUtils.java:81)
at org.apache.axis2.client.OperationClient.prepareMessageContext(OperationClient.java:289)
at org.apache.axis2.description.OutOnlyAxisOperationClient.executeImpl(OutOnlyAxisOperation.java:244)
at org.apache.axis2.client.OperationClient.execute(OperationClient.java:150)
at com.cfindustries.scpjava.PostJournalEntryServiceStub.journalEntryBulkCreationRequest_In(PostJournalEntryServiceStub.java:190)
at com.cfindustries.scpjava.HelloWorldServlet.doGet(HelloWorldServlet.java:129)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:635)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomee.webservices.CXFJAXRSFilter.doFilter(CXFJAXRSFilter.java:83)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.openejb.server.httpd.EEFilter.doFilter(EEFilter.java:65)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at com.sap.core.communication.server.CertValidatorFilter.doFilter(CertValidatorFilter.java:332)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at com.sap.cloud.sdk.cloudplatform.servlet.RequestContextServletFilter$1.execute(RequestContextServletFilter.java:219)
at com.sap.cloud.sdk.cloudplatform.servlet.Executable.call(Executable.java:23)
at com.sap.cloud.sdk.cloudplatform.servlet.Executable.call(Executable.java:13)
at com.sap.cloud.sdk.cloudplatform.servlet.RequestContextCallable.call(RequestContextCallable.java:82)
at com.sap.cloud.sdk.cloudplatform.servlet.RequestContextServletFilter.doFilter(RequestContextServletFilter.java:221)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at com.sap.cloud.sdk.cloudplatform.security.servlet.HttpCachingHeaderFilter.doFilter(HttpCachingHeaderFilter.java:56)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at com.sap.cloud.sdk.cloudplatform.security.servlet.HttpSecurityHeadersFilter.doFilter(HttpSecurityHeadersFilter.java:41)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.filters.RestCsrfPreventionFilter.doFilter(RestCsrfPreventionFilter.java:113)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:44)
at com.sap.core.connectivity.jco.session.ext.RequestTracker.invoke(RequestTracker.java:55)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:610)
at com.sap.cloud.runtime.impl.bridge.security.AbstractAuthenticator.invoke(AbstractAuthenticator.java:206)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
at org.apache.tomee.catalina.OpenEJBSecurityListener$RequestCapturer.invoke(OpenEJBSecurityListener.java:97)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:650)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:650)
at com.sap.core.tenant.valve.TenantValidationValve.invokeNextValve(TenantValidationValve.java:182)
at com.sap.core.tenant.valve.TenantValidationValve.invoke(TenantValidationValve.java:97)
at com.sap.js.statistics.tomcat.valve.RequestTracingValve.callNextValve(RequestTracingValve.java:113)
at com.sap.js.statistics.tomcat.valve.RequestTracingValve.invoke(RequestTracingValve.java:59)
at com.sap.core.js.monitoring.tomcat.valve.RequestTracingValve.invoke(RequestTracingValve.java:27)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:800)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:806)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1498)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:836)

******* Вот часть сервлета:


ConfigurationContext configurationContext = ConfigurationContextFactory.createEmptyConfigurationContext();

PostJournalEntryServiceStub serviceStub = new PostJournalEntryServiceStub(configurationContext);

logger.error("Just before invoking journalEntryBulkCreationRequest_In");
serviceStub.journalEntryBulkCreationRequest_In(journalEntryBulkCreateRequest);

******* Вот выдержка из заглушки:


   /**
 *Constructor that takes in a configContext
 */
public PostJournalEntryServiceStub(
        org.apache.axis2.context.ConfigurationContext configurationContext,
        java.lang.String targetEndpoint) throws org.apache.axis2.AxisFault {
    this(configurationContext, targetEndpoint, false);
}

/**
 * Constructor that takes in a configContext  and useseperate listner
 */
public PostJournalEntryServiceStub(
        org.apache.axis2.context.ConfigurationContext configurationContext,
        java.lang.String targetEndpoint, boolean useSeparateListener)
        throws org.apache.axis2.AxisFault {
    //To populate AxisService

    logger.error("***** 0");

    populateAxisService();

    logger.error("***** 9");
    populateFaults();

    logger.error("***** 10");

    _serviceClient = new org.apache.axis2.client.ServiceClient(configurationContext,
            _service);

    logger.error("***** 11");
    _service.applyPolicy();

    logger.error("***** 12");
    _serviceClient.getOptions()
            .setTo(new org.apache.axis2.addressing.EndpointReference(
                    targetEndpoint));

    logger.error("***** 13");
    _serviceClient.getOptions().setUseSeparateListener(useSeparateListener);

    //Set the soap version
    logger.error("***** 14");
    _serviceClient.getOptions()
            .setSoapVersionURI(org.apache.axiom.soap.SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI);
}

/**
 * Default Constructor
 */
public PostJournalEntryServiceStub(
        org.apache.axis2.context.ConfigurationContext configurationContext)
        throws org.apache.axis2.AxisFault {
    this(configurationContext, "https://my301840-api.s4hana.ondemand.com/sap/bc/srt/scs_ext/sap/journalentrycreaterequestconfi?sap-client=100");
//            "https://my301840-api.s4hana.ondemand.com/sap/bc/srt/scs_ext/sap/journalentrybulkcreationreques?sap-client=100");
}

/**
 * Default Constructor
 */
public PostJournalEntryServiceStub() throws org.apache.axis2.AxisFault {
    this(
            "https://host:port/sap/bc/srt/scs_ext/sap/journalentrybulkcreationreques?sap-client=client-number");
}

/**
 * Constructor taking the target endpoint
 */
public PostJournalEntryServiceStub(java.lang.String targetEndpoint)
        throws org.apache.axis2.AxisFault {
    this(null, targetEndpoint);
}

private static synchronized java.lang.String getUniqueSuffix() {
    // reset the counter if it is greater than 99999
    if (counter > 99999) {
        counter = 0;
    }

    counter = counter + 1;

    return java.lang.Long.toString(java.lang.System.currentTimeMillis()) +
            "_" + counter;
}

private void populateAxisService() throws org.apache.axis2.AxisFault {
    //creating the Service with a unique name

    logger.error("***** 1");
    _service = new org.apache.axis2.description.AxisService("Service" +
            getUniqueSuffix());

    logger.error("***** 2");
    addAnonymousOperations();

    logger.error("***** 3");
    //creating the operations
    org.apache.axis2.description.AxisOperation __operation;

    _operations = new org.apache.axis2.description.AxisOperation[1];

    logger.error("***** 4");
    __operation = new org.apache.axis2.description.OutOnlyAxisOperation();

    logger.error("***** 5");
    __operation.setName(new javax.xml.namespace.QName(
            "http://sap.com/xi/SAPSCORE/SFIN",
            "journalEntryBulkCreationRequest_In"));

    logger.error("***** 6");
    _service.addOperation(__operation);

    logger.error("***** 7");
    (__operation).getMessage(org.apache.axis2.wsdl.WSDLConstants.MESSAGE_LABEL_OUT_VALUE)
            .getPolicySubject()
            .attachPolicy(getPolicy(
                    "<wsp:Policy ... </wsp:Policy>"));

    logger.error("***** 8");
    _operations[0] = __operation;
}

*******Вот отрывок из пом


   <dependencies>
    <dependency>
        <groupId>com.sap.cloud.s4hana.cloudplatform</groupId>
        <artifactId>scp-neo</artifactId>
    </dependency>
    <dependency>
        <groupId>com.sap.cloud.s4hana</groupId>
        <artifactId>s4hana-all</artifactId>
    </dependency>

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>com.sap.cloud</groupId>
        <artifactId>neo-javaee6-wp-api</artifactId>
        <version>${scp.sdkVersion}</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.axis2</groupId>
        <artifactId>axis2-kernel</artifactId>
        <version>1.7.9</version>
    </dependency>
    <dependency>
        <groupId>org.apache.axis2</groupId>
        <artifactId>axis2-adb</artifactId>
        <version>1.7.9</version>
    </dependency>

</dependencies>

<build>
    <finalName>${project.artifactId}</finalName>

    <plugins>
        <plugin>
            <groupId>org.apache.axis2</groupId>
            <artifactId>axis2-wsdl2code-maven-plugin</artifactId>
            <version>1.7.9</version>
            <executions>
                <execution>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>wsdl2code</goal>
                    </goals>
                    <configuration>
                        <packageName>com.cfindustries.scpjava</packageName>
                        <wsdlFile>src/main/resources/wsdl/JOURNALENTRYBULKCREATIONREQUES.wsdl</wsdlFile>
                        <databindingName>adb</databindingName>
                        <syncMode>async</syncMode>
                        <unpackClasses>true</unpackClasses>
                    </configuration>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.apache.axis2</groupId>
            <artifactId>axis2-transport-http</artifactId>
            <version>1.7.9</version>
        </plugin>
        <plugin>
            <groupId>org.apache.axis2</groupId>
            <artifactId>axis2-transport-local</artifactId>
            <version>1.7.9</version>
        </plugin>

    </plugins>

    <pluginManagement>
        <plugins>
             <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.1.0</version>
                <configuration>
                    <attachClasses>true</attachClasses>
                    <archive>
                        <manifestEntries>
                            <Version>${project.version}</Version>
                            <Import-Package>${scp.warImportPackage}</Import-Package>
                        </manifestEntries>
                    </archive>
                    <webResources>
                        <resources>
                            <filtering>true</filtering>
                            <directory>src/main/webapp</directory>
                            <includes>
                                <include>**/web.xml</include>
                            </includes>
                        </resources>
                    </webResources>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>3.0.2</version>
                <configuration>
                    <artifactItems>
                        <artifactItem>
                            <groupId>com.sap.cloud</groupId>
                            <artifactId>neo-javaee6-wp-sdk</artifactId>
                            <version>${scp.sdkVersion}</version>
                            <type>zip</type>
                            <overWrite>false</overWrite>
                            <outputDirectory>${scp.sdkInstallPath}</outputDirectory>
                        </artifactItem>
                    </artifactItems>
                </configuration>
            </plugin>

            <!-- Plugin for deployment to SAP Cloud Platform Neo. -->
            <plugin>
                <groupId>com.sap.cloud</groupId>
                <artifactId>neo-javaee6-wp-maven-plugin</artifactId>
                <version>${scp.sdkVersion}</version>
                <executions>
                    <execution>
                        <id>stop</id>
                        <phase>install</phase>
                        <goals>
                            <goal>stop</goal>
                        </goals>
                        <configuration>
                            <skip>${scp.skipRestart}</skip>
                        </configuration>
                    </execution>
                    <execution>
                        <id>deploy</id>
                        <phase>install</phase>
                        <goals>
                            <goal>deploy</goal>
                        </goals>
                        <configuration>
                            <skip>${scp.skipDeploy}</skip>
                            <vmArguments>${scp.vmArguments}</vmArguments>
                        </configuration>
                    </execution>
                    <execution>
                        <id>start</id>
                        <phase>install</phase>
                        <goals>
                            <goal>start</goal>
                        </goals>
                        <configuration>
                            <skip>${scp.skipRestart}</skip>
                        </configuration>
                    </execution>
                    <execution>
                        <id>rolling-update</id>
                        <phase>install</phase>
                        <goals>
                            <goal>rolling-update</goal>
                        </goals>
                        <configuration>
                            <skip>${scp.skipRollingUpdate}</skip>
                        </configuration>
                    </execution>
                </executions>
                <configuration>
                    <sdkInstallPath>${scp.sdkInstallPath}</sdkInstallPath>
                    <skip>${scp.skipInstallSdk}</skip>

                    <application>${scp.app}</application>
                    <source>${project.build.directory}/${project.build.finalName}.war</source>

                    <vmArguments>${scp.vmArguments}</vmArguments>
                    <size>${scp.vmSize}</size>
                    <minimumProcesses>${scp.vmMinProcesses}</minimumProcesses>
                    <maximumProcesses>${scp.vmMaxProcesses}</maximumProcesses>

                    <host>${scp.host}</host>
                    <account>${scp.account}</account>
                    <user>${scp.username}</user>
                    <password>${scp.password}</password>
                    <synchronous>true</synchronous>

                    <httpProxyHost>${proxy.host}</httpProxyHost>
                    <httpProxyPort>${proxy.port}</httpProxyPort>
                    <httpsProxyHost>${proxy.host}</httpsProxyHost>
                    <httpsProxyPort>${proxy.port}</httpsProxyPort>

                    <consoleCommand />
                    <consoleHttpProxyHost>${proxy.host}</consoleHttpProxyHost>
                    <consoleHttpProxyPort>${proxy.port}</consoleHttpProxyPort>
                    <consoleHttpsProxyHost>${proxy.host}</consoleHttpsProxyHost>
                    <consoleHttpsProxyPort>${proxy.port}</consoleHttpsProxyPort>

                    <dbsystem />
                    <dbSize />
                    <dbUser />
                </configuration>
            </plugin>

            <!-- Plugin for deployment to local runtime of SAP Cloud Platform Neo. -->
            <plugin>
                <groupId>com.sap.cloud.s4hana.plugins</groupId>
                <artifactId>scp-neo-maven-plugin</artifactId>
                <version>1.11.1</version>
                <configuration>
                    <sdkPlugin>neo-javaee6-wp-maven-plugin</sdkPlugin>
                    <sdkPluginVersion>${scp.sdkVersion}</sdkPluginVersion>
                    <sdkInstallPath>${scp.sdkInstallPath}</sdkInstallPath>
                    <sdkSymbolicLink>${scp.sdkSymbolicLink}</sdkSymbolicLink>
                    <sdkServerContentPath>${scp.sdkLocalServerContentPath}</sdkServerContentPath>
                    <source>${project.build.directory}/${project.build.finalName}.war</source>
                    <proxyHost>${proxy.host}</proxyHost>
                    <proxyPort>${proxy.port}</proxyPort>
                    <httpNonProxyHosts>${non.proxy.hosts}</httpNonProxyHosts>
                    <destinations>
                        <destination>
                            <path>${scp.sdkErpEndpoint}</path>
                            <username>${erp.username}</username>
                            <password>${erp.password}</password>
                            <url>${erp.url}</url>
                        </destination>
                    </destinations>
                </configuration>
            </plugin>

        </plugins>
    </pluginManagement>
</build>
...