为什么 Primavera P6 EPPM REST API 版本 2112 不允许访问 Spread REST 端点?

问题描述 投票:0回答:2

我正在开发一个 Java 应用程序,以使用 P6 EPPM REST API 从 Oracle Primavera P6 EPPM 2112 中提取数据。

我安装了 Weblogic、Primavera P6 EPPM 版本 21.12 以及 P6 WebServices、Microsoft SQL Server 并加载了客户提供的项目数据。

一切正常,我的 Java 应用程序可以通过 P6 EPPM REST API 获取项目、WBS 和活动数据,问题是我需要加载传播信息,但我的服务器中不存在所有 Spread REST 端点。这些 Spread 端点在 P6 WebServices (SOAP) 中可用,但在 REST API 服务中不可用。

我搜索了 Oracle 的 P6 EPPM REST API 网站文档,Spread REST 端点可用于所有其他端点:

P6 EPPM Rest API - 传播 REST 端点

我已阅读所有可用的 P6 EPPM 2112 相关文档并在线搜索此问题但没有成功。我还在 Oracle 社区网站上发布了一个问题,但仍然没有答案。

为了启用这些 Spread 端点,我必须执行任何其他配置吗?还是它们仅在较新的 P6 EPPM 版本中可用?

简而言之,为什么 Spread REST 端点在我的 P6 EPPM 2112 服务器上不可用?

我在三台不同的计算机(2 个 Windows 10 桌面客户端和 1 个 Windows Server 计算机)上安装了完整的 P6 软件包,以查看我在安装过程中是否犯了错误,但 Spread REST 端点在这些安装中均不可用。

java rest weblogic primavera
2个回答
1
投票

由于没有得到任何回复,也找不到任何解决方案,所以我将Primavera环境更新到了22.12版本。此次更新后,所有端点现已可用。


0
投票

您能否提供一个简单的代码来开始在 EPPM 中使用 api。

    import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.X509Certificate;
 
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
 
import org.apache.commons.httpclient.HttpStatus;
 
public class SampleOAUTHGET {
 
    private static String userName = "<username>";
    private static String password = "<password>";
    private static String hostName = "<hostname>";
    private static String portNumber = "<portnumber>";
    private static String objectId = "<objectId>";
    private static String tokenGenerationUrl = "http://" + hostName + ":" + portNumber + "/p6ws/oauth/token";
    private static String loadActivitiesURL = "http://" + hostName + ":" + portNumber + "/p6ws/restapi/location?Fields=City,Country,CountryCode,CreateDate,CreateUser,LastUpdateDate,LastUpdateUser,Latitude,Longitude,Municipality,Name,ObjectId,PostalCode,State,StateCode&Filter=ObjectId :eq: " + objectId;
 
    public static void main(String s[]) throws Exception {
        String responseJson = callRestURL(tokenGenerationUrl, "POST");
        System.out.println("Response:- " + responseJson);
    }
 
    private static String callRestURL(String restUrl, String method) throws Exception {
        HttpURLConnection conn = null;
        try {
            trustAllCert();
            String authTokenResponse = getAuthTokenDetails();
            URL loadUrl = new URL(loadActivitiesURL);
            conn = (HttpURLConnection) loadUrl.openConnection();
            conn.setDoOutput(true);
            conn.setDoInput(true);
            conn.setRequestMethod("GET");
            conn.setRequestProperty("Accept", "application/json");
            conn.setRequestProperty("Content-Type", "application/json");
            System.out.println("Token Generated : " + authTokenResponse);
            conn.setRequestProperty("Authorization", authTokenResponse);
            if (conn.getResponseCode() != HttpStatus.SC_OK) {
                throw new RuntimeException("Failed : HTTP error code : " + conn.getResponseCode() + "Error: "
                        + readStreamData(conn.getErrorStream()));
            }
            return readStreamData(conn.getInputStream());
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (conn != null) {
                conn.disconnect();
            }
        }
        return "";
        
    }
    
    @SuppressWarnings("unchecked")
    private static String getAuthTokenDetails() {
        HttpURLConnection conn = null;
        try {
            // Generating the OAuth Token
            URL tokenUrl = new URL(tokenGenerationUrl);
            conn = (HttpURLConnection) tokenUrl.openConnection();
            conn.setDoOutput(true);
            conn.setDoInput(true);
            conn.setRequestMethod("POST");
            conn.setRequestProperty("Accept", "application/json");
            conn.setRequestProperty("Content-Type", "application/json");
            String userCredentials = userName + ":" + password;
            String base64Credentials = javax.xml.bind.DatatypeConverter.printBase64Binary(userCredentials.getBytes());
            String basicAuth = base64Credentials;
            conn.setRequestProperty("authToken", basicAuth);
            conn.setRequestProperty("token_exp", "3600");
            if (conn.getResponseCode() != 200) {
                throw new RuntimeException("Failed : HTTP error code : " + conn.getResponseCode() + "Error: " + readStreamData(conn.getErrorStream()));
            }
            return readStreamData(conn.getInputStream());
        } catch (Exception e) {
            conn.disconnect();
            throw new RuntimeException("Failed to generate OAuth Token");
        }
    }
 
    private static String readStreamData(InputStream is) throws IOException {
        try (BufferedReader br = new BufferedReader(new InputStreamReader(is))) {
            String output;
            StringBuilder buff = new StringBuilder();
            while ((output = br.readLine()) != null) {
                buff.append(output);
            }
            return buff.toString();
        }
    }
 
    private static void trustAllCert() throws NoSuchAlgorithmException, KeyManagementException {
        // Create a trust manager that does not validate certificate chains
        TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
            @Override
            public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                return null;
            }
 
            @Override
            public void checkClientTrusted(X509Certificate[] certs, String authType) {
            }
 
            @Override
            public void checkServerTrusted(X509Certificate[] certs, String authType) {
            }
        } };
        // Install the all-trusting trust manager
        SSLContext sc = SSLContext.getInstance("SSL");
        sc.init(null, trustAllCerts, new java.security.SecureRandom());
        HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
        // Create all-trusting host name verifier
        HostnameVerifier allHostsValid = new HostnameVerifier() {
            @Override
            public boolean verify(String hostname, SSLSession session) {
                return true;
            }
        };
        // Install the all-trusting host verifier
        HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);
    }
 
}

我正在使用此代码,但它不起作用

© www.soinside.com 2019 - 2024. All rights reserved.